diff options
-rw-r--r-- | src/algo.h | 4 | ||||
-rw-r--r-- | src/common.c | 29 | ||||
-rw-r--r-- | src/common.h | 5 | ||||
-rw-r--r-- | test/README | 4 | ||||
-rw-r--r-- | test/luatest.lua | 17 | ||||
-rw-r--r-- | test/runtest.lua | 41 | ||||
-rw-r--r-- | windows/mingw/_mingw.mak | 19 | ||||
-rw-r--r-- | windows/mingw/rex_onig.mak | 2 | ||||
-rw-r--r-- | windows/mingw/rex_pcre.mak | 2 |
9 files changed, 86 insertions, 37 deletions
@@ -736,4 +736,8 @@ static void alg_register (lua_State *L, const luaL_Reg *r_methods, #endif lua_pushfstring (L, REX_VERSION" (for %s)", name); lua_setfield (L, -2, "_VERSION"); +#ifndef REX_NOEMBEDDEDTEST + lua_pushcfunction (L, newmembuffer); + lua_setfield (L, -2, "_newmembuffer"); +#endif } diff --git a/src/common.c b/src/common.c index 1b1323e..3dd543a 100644 --- a/src/common.c +++ b/src/common.c @@ -264,3 +264,32 @@ int luaL_typerror (lua_State *L, int narg, const char *tname) { return luaL_argerror(L, narg, msg); } #endif + +#ifndef REX_NOEMBEDDEDTEST +static int ud_topointer (lua_State *L) { + lua_pushlightuserdata (L, lua_touserdata (L, 1)); + return 1; +} + +static int ud_len (lua_State *L) { + lua_pushinteger (L, lua_objlen (L, 1)); + return 1; +} + +/* for testing purposes only */ +int newmembuffer (lua_State *L) { + size_t len; + const char* s = luaL_checklstring (L, 1, &len); + void *ud = lua_newuserdata (L, len); + memcpy (ud, s, len); + lua_newtable (L); /* metatable */ + lua_pushvalue (L, -1); + lua_setfield (L, -2, "__index"); /* metatable.__index = metatable */ + lua_pushcfunction (L, ud_topointer); + lua_setfield (L, -2, "topointer"); + lua_pushcfunction (L, ud_len); + lua_setfield (L, -2, "__len"); + lua_setmetatable (L, -2); + return 1; +} +#endif /* #ifndef REX_NOEMBEDDEDTEST */ diff --git a/src/common.h b/src/common.h index e457754..41d968e 100644 --- a/src/common.h +++ b/src/common.h @@ -7,6 +7,7 @@ #include "lua.h" #if LUA_VERSION_NUM > 501 +# define lua_objlen lua_rawlen int luaL_typerror (lua_State *L, int narg, const char *tname); #endif @@ -95,4 +96,8 @@ void *Lmalloc (lua_State *L, size_t size); void *Lrealloc (lua_State *L, void *p, size_t osize, size_t nsize); void Lfree (lua_State *L, void *p, size_t size); +#ifndef REX_NOEMBEDDEDTEST +int newmembuffer (lua_State *L); +#endif + #endif diff --git a/test/README b/test/README index 693ef93..100a276 100644 --- a/test/README +++ b/test/README @@ -1,5 +1,7 @@ To test Lrexlib, execute the following command line: - lua ./runtest.lua [-v] LIBRARY... + lua ./runtest.lua [-a] [-v] LIBRARY... +-a use the external "Alien" library for "buffer subject" tests, + rather than the internal function -v gives verbose output diff --git a/test/luatest.lua b/test/luatest.lua index 3949d90..53d967d 100644 --- a/test/luatest.lua +++ b/test/luatest.lua @@ -67,25 +67,20 @@ end -- returns: -- 1) true, if success; false, if failure -- 2) test results table or error_message -local function test_function (test, func) +local function test_function (test, func, newmembuffer) local res local t = packNT (pcall (func, unpackNT (test[1]))) if t[1] then table.remove (t, 1) res = t - if alien then - local subject = test[1][1] - local buf = alien.buffer (#subject) - if #subject > 0 then - alien.memmove (buf:topointer (), subject, #subject) - end - test[1][1] = buf + if newmembuffer then + test[1][1] = newmembuffer (test[1][1]) local t = packNT (pcall (func, unpackNT (test[1]))) if t[1] then table.remove (t, 1) res = t else - print "alien test failed" + print "buffer subjects test failed" res = t[2] --> error_message end end @@ -120,13 +115,13 @@ local function test_method (test, constructor, name) end -- returns: a list of failed tests -local function test_set (set, lib) +local function test_set (set, lib, newmembuffer) local list = {} if type (set.Func) == "function" then local func = set.Func for i,test in ipairs (set) do - local ok, res = test_function (test, func) + local ok, res = test_function (test, func, newmembuffer) if not ok then table.insert (list, {i=i, res}) end diff --git a/test/runtest.lua b/test/runtest.lua index 88b581b..e1f1a40 100644 --- a/test/runtest.lua +++ b/test/runtest.lua @@ -1,13 +1,5 @@ -- See Copyright Notice in the file LICENSE --- See if we have alien, so we can do tests with buffer subjects -local ok -ok, alien = pcall (require, "alien") -if not ok then - io.stderr:write ("Warning: alien not found, so cannot run tests with buffer subjects\n") - alien = nil -end - do local path = "./?.lua;" if package.path:sub(1, #path) ~= path then @@ -16,8 +8,17 @@ do end local luatest = require "luatest" +local function newalienbuffer (str) + local alien = require "alien" + local buf = alien.buffer (#str) + if #str > 0 then + alien.memmove (buf:topointer (), str, #str) + end + return buf +end + -- returns: number of failures -local function test_library (libname, setfile, verbose) +local function test_library (libname, setfile, verbose, use_alien) if verbose then print (("[lib: %s; file: %s]"):format (libname, setfile)) end @@ -25,10 +26,14 @@ local function test_library (libname, setfile, verbose) local f = require (setfile) local sets = f (libname) - local realalien = alien - if libname == "rex_posix" and not lib.flags ().STARTEND and alien then - alien = nil - io.stderr:write ("Cannot run posix tests with alien without REG_STARTEND\n") + local newmembuffer = use_alien and newalienbuffer or lib._newmembuffer + if newmembuffer then + if libname == "rex_posix" and not lib.flags ().STARTEND then + newmembuffer = nil + io.stderr:write ("Cannot run posix tests with buffer subjects without REG_STARTEND\n") + end + else + io.stderr:write ("Warning: cannot run tests with buffer subjects\n") end local n = 0 -- number of failures @@ -36,7 +41,7 @@ local function test_library (libname, setfile, verbose) if verbose then print (set.Name or "Unnamed set") end - local err = luatest.test_set (set, lib) + local err = luatest.test_set (set, lib, newmembuffer) if verbose then for _,v in ipairs (err) do print (" Test " .. v.i) @@ -48,7 +53,6 @@ local function test_library (libname, setfile, verbose) if verbose then print "" end - alien = realalien return n end @@ -64,14 +68,19 @@ local avail_tests = { do local verbose, tests, nerr = false, {}, 0 local dir + local use_alien -- check arguments for i = 1, select ("#", ...) do local arg = select (i, ...) if arg:sub(1,1) == "-" then if arg == "-v" then verbose = true + elseif arg == "-a" then + use_alien = true elseif arg:sub(1,2) == "-d" then dir = arg:sub(3) + else + error ("invalid argument: [" .. arg .. "]") end else if avail_tests[arg] then @@ -99,7 +108,7 @@ do for _, test in ipairs (tests) do package.loaded[test.lib] = nil -- to force-reload the tested library for _, setfile in ipairs (test) do - nerr = nerr + test_library (test.lib, setfile, verbose) + nerr = nerr + test_library (test.lib, setfile, verbose, use_alien) end end print ("Total number of failures: " .. nerr) diff --git a/windows/mingw/_mingw.mak b/windows/mingw/_mingw.mak index 9d56927..224c7fa 100644 --- a/windows/mingw/_mingw.mak +++ b/windows/mingw/_mingw.mak @@ -1,5 +1,7 @@ # Use with GNU Make. +VERSION = 2.7.2 + # User Settings ------------------------------------------------------------ # Target Lua version (51 for Lua 5.1; 52 for Lua 5.2). @@ -9,18 +11,21 @@ LUAVERSION = 51 # LUADLL : Name of Lua DLL to link to (.dll should be omitted). # LUAEXE : Name of Lua interpreter. # LUAINC : Path of Lua include files. +# LIBPATH : Path of lua5.1.dll, lua52.dll, pcre.dll, etc. + +LIBPATH = c:\exe32 ifeq ($(LUAVERSION),51) - INSTALLPATH = s:\exe\lib32\lua51 + INSTALLPATH = s:\exe\lib32\lua\5.1 LUADLL = lua5.1 LUAEXE = lua.exe - LUAINC = s:\progr\work\system\include\lua51 + LUAINC = s:\progr\work\system\include\lua\5.1 MYCFLAGS += -DREX_CREATEGLOBALVAR else - INSTALLPATH = s:\exe\lib32\lua52 + INSTALLPATH = s:\exe\lib32\lua\5.2 LUADLL = lua52 LUAEXE = lua52.exe - LUAINC = s:\progr\work\system\include\lua52 + LUAINC = s:\progr\work\system\include\lua\5.2 # MYCFLAGS += -DREX_CREATEGLOBALVAR endif @@ -28,9 +33,9 @@ endif BIN = $(PROJECT).dll BININSTALL = $(INSTALLPATH)\$(BIN) -CC = gcc +CC = mingw32-gcc CFLAGS = -W -Wall -O2 $(INCS) -DREX_OPENLIB=luaopen_$(PROJECT) \ - -DREX_LIBNAME=\"$(PROJECT)\" $(MYCFLAGS) + -DREX_LIBNAME=\"$(PROJECT)\" -DVERSION=\"$(VERSION)\" $(MYCFLAGS) DEFFILE = $(PROJECT).def EXPORTED = luaopen_$(PROJECT) INCS = -I$(LUAINC) $(MYINCS) @@ -54,7 +59,7 @@ test: cd $(TESTPATH) && $(LUAEXE) runtest.lua $(TESTNAME) -d$(CURDIR) $(BIN): $(OBJ) $(DEFFILE) - $(CC) $(DEFFILE) $(OBJ) $(LIBS) -o $@ -shared + $(CC) $(DEFFILE) $(OBJ) -L$(LIBPATH) $(LIBS) -o $@ -shared $(DEFFILE): echo EXPORTS > $@ diff --git a/windows/mingw/rex_onig.mak b/windows/mingw/rex_onig.mak index 4e9f5f7..deaeb40 100644 --- a/windows/mingw/rex_onig.mak +++ b/windows/mingw/rex_onig.mak @@ -2,7 +2,7 @@ # User Settings ------------------------------------------------------------ # path of Oniguruma include files -REGEXINC = s:\progr\work\system\include +REGEXINC = s:\progr\work\system\include\oniguruma # -------------------------------------------------------------------------- PROJECT = rex_onig diff --git a/windows/mingw/rex_pcre.mak b/windows/mingw/rex_pcre.mak index b6d34ce..1f3dd76 100644 --- a/windows/mingw/rex_pcre.mak +++ b/windows/mingw/rex_pcre.mak @@ -2,7 +2,7 @@ # User Settings ------------------------------------------------------------ # path of PCRE include files -REGEXINC = s:\progr\work\system\include +REGEXINC = s:\progr\work\system\include\pcre # -------------------------------------------------------------------------- PROJECT = rex_pcre |