|
| 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