116 lines
3.2 KiB
Lua
Executable File
116 lines
3.2 KiB
Lua
Executable File
-- See Copyright Notice in the file LICENSE
|
|
|
|
local luatest = require "luatest"
|
|
local N = luatest.NT
|
|
|
|
local function norm(a) return a==nil and N or a end
|
|
|
|
local function get_gsub (lib)
|
|
return lib.gsub or
|
|
function (subj, pattern, repl, n)
|
|
return lib.new (pattern) : gsub (subj, repl, n)
|
|
end
|
|
end
|
|
|
|
local function set_f_gsub1 (lib, flg)
|
|
local subj, pat = "abcdef", "[abef]+"
|
|
return {
|
|
Name = "Function gsub, set1",
|
|
Func = get_gsub (lib),
|
|
--{ s, p, f, n, res1, res2, res3 },
|
|
{ {"a\0c", ".", "#" }, {"###", 3, 3} }, -- subj contains nuls
|
|
}
|
|
end
|
|
|
|
local function set_f_find (lib, flg)
|
|
return {
|
|
Name = "Function find",
|
|
Func = lib.find,
|
|
--{subj, patt, st,cf,ef}, { results }
|
|
{ {"a\0c", ".+"}, { 1,3 } }, -- subj contains nul
|
|
{ {"a\0c", "a\0c", N,flg.PEND}, { 1,3 } }, -- subj and patt contain nul
|
|
}
|
|
end
|
|
|
|
local function set_f_match (lib, flg)
|
|
return {
|
|
Name = "Function match",
|
|
Func = lib.match,
|
|
--{subj, patt, st,cf,ef}, { results }
|
|
{ {"a\0c", ".+"}, {"a\0c"} }, -- subj contains nul
|
|
{ {"a\0c", "a\0c", N,flg.PEND}, {"a\0c"} }, -- subj and patt contain nul
|
|
}
|
|
end
|
|
|
|
local function set_f_gmatch (lib, flg)
|
|
-- gmatch (s, p, [cf], [ef])
|
|
local function test_gmatch (subj, patt)
|
|
local out, guard = {}, 10
|
|
for a, b in lib.gmatch (subj, patt) do
|
|
table.insert (out, { norm(a), norm(b) })
|
|
guard = guard - 1
|
|
if guard == 0 then break end
|
|
end
|
|
return unpack (out)
|
|
end
|
|
return {
|
|
Name = "Function gmatch",
|
|
Func = test_gmatch,
|
|
--{ subj patt results }
|
|
{ {"a\0c", "." }, {{"a",N},{"\0",N},{"c",N}} },--nuls in subj
|
|
}
|
|
end
|
|
|
|
local function set_f_split (lib, flg)
|
|
-- split (s, p, [cf], [ef])
|
|
local function test_split (subj, patt)
|
|
local out, guard = {}, 10
|
|
for a, b, c in lib.split (subj, patt) do
|
|
table.insert (out, { norm(a), norm(b), norm(c) })
|
|
guard = guard - 1
|
|
if guard == 0 then break end
|
|
end
|
|
return unpack (out)
|
|
end
|
|
return {
|
|
Name = "Function split",
|
|
Func = test_split,
|
|
--{ subj patt results }
|
|
{ {"a,\0,c", ","}, {{"a",",",N},{"\0",",",N},{"c",N,N}, } },--nuls in subj
|
|
}
|
|
end
|
|
|
|
local function set_m_exec (lib, flg)
|
|
return {
|
|
Name = "Method exec",
|
|
Method = "exec",
|
|
-- {patt,cf}, {subj,st,ef} { results }
|
|
{ {".+"}, {"a\0c"}, {1,3,{}} }, -- subj contains nul
|
|
{ {"a\0c",flg.PEND}, {"a\0c"}, {1,3,{}} }, -- subj and patt contain nul
|
|
}
|
|
end
|
|
|
|
local function set_m_tfind (lib, flg)
|
|
return {
|
|
Name = "Method tfind",
|
|
Method = "tfind",
|
|
-- {patt,cf}, {subj,st,ef} { results }
|
|
{ {".+"}, {"a\0c"}, {1,3,{}} }, -- subj contains nul
|
|
{ {"a\0c",flg.PEND}, {"a\0c"}, {1,3,{}} }, -- subj and patt contain nul
|
|
}
|
|
end
|
|
|
|
return function (libname)
|
|
local lib = require (libname)
|
|
local flags = lib.flags ()
|
|
return {
|
|
set_f_match (lib, flags),
|
|
set_f_find (lib, flags),
|
|
set_f_gmatch (lib, flags),
|
|
set_f_gsub1 (lib, flags),
|
|
set_m_exec (lib, flags),
|
|
set_m_tfind (lib, flags),
|
|
}
|
|
end
|
|
|