Skip to content
This repository was archived by the owner on Dec 14, 2021. It is now read-only.

Commit 8ea72d9

Browse files
committed
add test.lua
1 parent dc213c5 commit 8ea72d9

File tree

2 files changed

+114
-2
lines changed

2 files changed

+114
-2
lines changed

match.c

+3-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ int main(int argc, char **argv)
1111
if (argc < 3)
1212
{
1313
printf("Usage: %s pattern string\n", argv[0]);
14-
return 1;
14+
return -1;
1515
}
1616
tre_comp tregex;
1717
tre_compile(argv[1], &tregex);
@@ -24,10 +24,11 @@ int main(int argc, char **argv)
2424
if (start)
2525
{
2626
printf("match start: %zu match end: %zu\n", start - string, end - string);
27+
return 1;
2728
}
2829
else
2930
{
3031
printf("no match\n");
32+
return 0;
3133
}
32-
return 0;
3334
}

test.lua

+111
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
local _sf = string.format
2+
local commandfmt = [[./match '%s' '%s']]
3+
local printfmt = [[%s : "%s", "%s", %s]]
4+
5+
local _x = function(s)
6+
return s:gsub('\\', '\\\\'):gsub('\n', '\\n'):gsub('\r', '\\r'):gsub('\t', '\\t')
7+
end
8+
9+
local OK = "OK"
10+
local NOK = "NOK"
11+
12+
local test_tre = function(expected, pattern, sample)
13+
local result
14+
local pipe = io.popen(string.format(commandfmt, pattern, sample))
15+
pipe:read('*all')
16+
local _, exit, match = pipe:close()
17+
if exit == "exit" then
18+
pattern, sample = _x(pattern), _x(sample)
19+
if (match == 1 and expected == OK) or (match == 0 and expected == NOK) then
20+
result = "PASS"
21+
else
22+
result = "FAIL"
23+
end
24+
print(_sf(printfmt, result, pattern, sample, expected))
25+
else
26+
print(expected, pattern, sample, "Program error", exit, match)
27+
end
28+
end
29+
30+
test_tre(true, "\\d", "a")
31+
32+
local test_vector =
33+
{
34+
{ OK, "\\d", "5" },
35+
{ OK, "\\w+", "hej" },
36+
{ OK, "\\s", "\t \n" },
37+
{ NOK, "\\S", "\t \n" },
38+
{ OK, "[\\s]", "\t \n" },
39+
{ NOK, "[\\S]", "\t \n" },
40+
{ NOK, "\\D", "5" },
41+
{ NOK, "\\W+", "hej" },
42+
{ OK, "[0-9]+", "12345" },
43+
{ OK, "\\D", "hej" },
44+
{ NOK, "\\d", "hej" },
45+
{ OK, "[^\\w]", "\\" },
46+
{ OK, "[\\W]", "\\" },
47+
{ NOK, "[\\w]", "\\" },
48+
{ OK, "[^\\d]", "d" },
49+
{ NOK, "[\\d]", "d" },
50+
{ NOK, "[^\\D]", "d" },
51+
{ OK, "[\\D]", "d" },
52+
{ OK, "^.*\\\\.*$", "c:\\Tools" },
53+
{ OK, "^[\\+-]*[\\d]+$", "+27" },
54+
{ OK, "[abc]", "1c2" },
55+
{ NOK, "[abc]", "1C2" },
56+
{ OK, "[1-5]+", "0123456789" },
57+
{ OK, "[.2]", "1C2" },
58+
{ OK, "a*$", "Xaa" },
59+
{ OK, "a*$", "Xaa" },
60+
{ OK, "[a-h]+", "abcdefghxxx" },
61+
{ NOK, "[a-h]+", "ABCDEFGH" },
62+
{ OK, "[A-H]+", "ABCDEFGH" },
63+
{ NOK, "[A-H]+", "abcdefgh" },
64+
{ OK, "[^\\s]+", "abc def" },
65+
{ OK, "[^fc]+", "abc def" },
66+
{ OK, "[^d\\sf]+", "abc def" },
67+
{ OK, "\n", "abc\ndef" },
68+
{ OK, "b.\\s*\n", "aa\r\nbb\r\ncc\r\n\r\n" },
69+
{ OK, ".*c", "abcabc" },
70+
{ OK, ".+c", "abcabc" },
71+
{ OK, "[b-z].*", "ab" },
72+
{ OK, "b[k-z]*", "ab" },
73+
{ NOK, "[0-9]", " - " },
74+
{ OK, "[^0-9]", " - " },
75+
{ OK, "0|", "0|" },
76+
{ NOK, "\\d\\d:\\d\\d:\\d\\d", "0s:00:00" },
77+
{ NOK, "\\d\\d:\\d\\d:\\d\\d", "000:00" },
78+
{ NOK, "\\d\\d:\\d\\d:\\d\\d", "00:0000" },
79+
{ NOK, "\\d\\d:\\d\\d:\\d\\d", "100:0:00" },
80+
{ NOK, "\\d\\d:\\d\\d:\\d\\d", "00:100:00" },
81+
{ NOK, "\\d\\d:\\d\\d:\\d\\d", "0:00:100" },
82+
{ OK, "\\d\\d?:\\d\\d?:\\d\\d?", "0:0:0" },
83+
{ OK, "\\d\\d?:\\d\\d?:\\d\\d?", "0:00:0" },
84+
{ OK, "\\d\\d?:\\d\\d?:\\d\\d?", "0:0:00" },
85+
{ OK, "\\d\\d?:\\d\\d?:\\d\\d?", "00:0:0" },
86+
{ OK, "\\d\\d?:\\d\\d?:\\d\\d?", "00:00:0" },
87+
{ OK, "\\d\\d?:\\d\\d?:\\d\\d?", "00:0:00" },
88+
{ OK, "\\d\\d?:\\d\\d?:\\d\\d?", "0:00:00" },
89+
{ OK, "\\d\\d?:\\d\\d?:\\d\\d?", "00:00:00" },
90+
{ OK, "[Hh]ello [Ww]orld\\s*[!]?", "Hello world !" },
91+
{ OK, "[Hh]ello [Ww]orld\\s*[!]?", "hello world !" },
92+
{ OK, "[Hh]ello [Ww]orld\\s*[!]?", "Hello World !" },
93+
{ OK, "[Hh]ello [Ww]orld\\s*[!]?", "Hello world! " },
94+
{ OK, "[Hh]ello [Ww]orld\\s*[!]?", "Hello world !" },
95+
{ OK, "[Hh]ello [Ww]orld\\s*[!]?", "hello World !" },
96+
{ NOK, "\\d\\d?:\\d\\d?:\\d\\d?", "a:0" }, -- Failing test case reported in https://github.com/kokke/tiny-regex-c/issues/12 */
97+
--[[]]
98+
{ OK, "[^\\w][^-1-4]", ")T" },
99+
{ OK, "[^\\w][^-1-4]", ")^" },
100+
{ OK, "[^\\w][^-1-4]", "*)" },
101+
{ OK, "[^\\w][^-1-4]", "!." },
102+
{ OK, "[^\\w][^-1-4]", " x" },
103+
{ OK, "[^\\w][^-1-4]", "$b" },
104+
--[[]]
105+
{ OK, ".?bar", "real_bar" },
106+
{ NOK, ".?bar", "real_foo" },
107+
{ NOK, "X?Y", "Z" },
108+
}
109+
110+
111+
for i, v in pairs(test_vector) do test_tre(table.unpack(v)) end

0 commit comments

Comments
 (0)