#include #include #include #include #include "prefix_match.h" #include "test_framework.h" // --- test cases --- bool test_prefix_match() { const char *options[] = { "ahoj",//0 "ahojahoj",//1 "ble",//2 "citron",//3 "foo",//4 "foo bar",//5 "foo baz",//6 "foo bcz",//7 "eps",//8 "eps set",//9 "eps set config",//10 "eps get config",//11 "eps hk2",//12 "eps hk2 vi",//13 "eps hk2 out",//14 "delete from table users",//15 "delete,from;,,,,table sessions",//16 NULL }; check_eq(prefix_match("", options, 0), -1); check_eq(prefix_match("b", options, 0), 2); check_eq(prefix_match("c", options, 0), 3); check_eq(prefix_match("citron", options, 0), 3); check_eq(prefix_match("foo", options, 0), 4); check_eq(prefix_match("foo ", options, 0), -1); check_eq(prefix_match("foo bc", options, 0), 7); check_eq(prefix_match("foo bcz", options, 0), 7); check_eq(prefix_match("fOO bcz", options, PREFIXMATCH_CASE_SENSITIVE), -1); // CS check_eq(prefix_match("fOO bcz", options, 0), 7); // CI check_eq(prefix_match("ahoj", options, 0), 0); check_eq(prefix_match("ahoja", options, 0), 1); return true; } bool test_multipart_test() { check_eq(pm_multipart_test("ahoj", "ahoj", " ", 0), 1); check_eq(pm_multipart_test("ah", "ahoj", " ", 0), 1); check_eq(pm_multipart_test("xxxx", "ahoj", " ", 0), 0); check_eq(pm_multipart_test("", "ahoj", " ", 0), 0); check_eq(pm_multipart_test("", "", " ", 0), 1); check_eq(pm_multipart_test("multi part", "multi part", " ", 0), 1); check_eq(pm_multipart_test("multi", "multi part", " ", 0), 0); check_eq(pm_multipart_test("multi part", "multi", " ", 0), 0); check_eq(pm_multipart_test("multi part", "multi dog", " ", 0), 0); check_eq(pm_multipart_test("multi part", "multi part", " ", 0), 1); check_eq(pm_multipart_test(" multi part ", "multi part", " ", 0), 1); check_eq(pm_multipart_test("multi ,; part", "multi,part", ",; ", 0), 1); check_eq(pm_multipart_test("m p", "multi part", " ", 0), 1); check_eq(pm_multipart_test("mu pa", "multi part", " ", 0), 1); check_eq(pm_multipart_test("mu pp", "multi part", " ", 0), 0); check_eq(pm_multipart_test("m ", "multi part", " ", PREFIXMATCH_MULTI_PARTIAL), 2); check_eq(pm_multipart_test("v l s h", "very long sentence here", " ", 0), 1); check_eq(pm_multipart_test("v l s h", "very long sentence here too", " ", 0), 0); check_eq(pm_multipart_test("v l", "very long sentence here too", " ", 0), 0); check_eq(pm_multipart_test("v l", "very long sentence here too", " ", PREFIXMATCH_MULTI_PARTIAL), 2); check_eq(pm_multipart_test("v l s h", "very long sentence here", " ", PREFIXMATCH_MULTI_PARTIAL | PREFIXMATCH_CASE_SENSITIVE), 1); check_eq(pm_multipart_test("v l s h", "very long sentence here too", " ", PREFIXMATCH_MULTI_PARTIAL), 2); return true; } bool test_multipart_match() { const char *options[] = { "ahoj",//0 "foo",//1 "foo bar",//2 "foo baz",//3 "foo bcz",//4 "eps", // 5 "eps set",//6 "eps set config",//7 "eps get config",//8 "eps hk2",//9 "eps hk2 vi", //10 "eps hk2 out",//11 "delete from table users",//12 "delete,from;,,,,table sessions",//13 NULL }; check_eq(prefix_multipart_match("", options, " ", 0), -1); check_eq(prefix_multipart_match("x", options, " ", 0), -1); check_eq(prefix_multipart_match("ahoj", options, " ", 0), 0); check_eq(prefix_multipart_match("a", options, " ", 0), 0); check_eq(prefix_multipart_match("ah", options, " ", 0), 0); check_eq(prefix_multipart_match("foo", options, " ", 0), 1); check_eq(prefix_multipart_match("f", options, " ", 0), 1); check_eq(prefix_multipart_match("f b", options, " ", 0), -1); check_eq(prefix_multipart_match("f b", options, " ", PREFIXMATCH_MULTI_PARTIAL), -1); check_eq(prefix_multipart_match("f bc", options, " ", 0), 4); check_eq(prefix_multipart_match("e", options, " ", 0), 5); check_eq(prefix_multipart_match("eps", options, " ", 0), 5); check_eq(prefix_multipart_match("eps banana", options, " ", 0), -1); check_eq(prefix_multipart_match("eps banana", options, " ", PREFIXMATCH_MULTI_PARTIAL), -1); check_eq(prefix_multipart_match("eps set", options, " ", 0), 6); check_eq(prefix_multipart_match("e s", options, " ", 0), 6); check_eq(prefix_multipart_match("e set", options, " ", 0), 6); check_eq(prefix_multipart_match("eps s", options, " ", 0), 6); check_eq(prefix_multipart_match("eps s", options, " ", 0), 6); check_eq(prefix_multipart_match("e s c", options, " ", 0), 7); check_eq(prefix_multipart_match("e g c", options, " ", 0), 8); // there is only one get command check_eq(prefix_multipart_match("eps get", options, " ", 0), -1); check_eq(prefix_multipart_match("eps get", options, " ", PREFIXMATCH_MULTI_PARTIAL), 8); check_eq(prefix_multipart_match("e g", options, " ", 0), -1); check_eq(prefix_multipart_match("e g", options, " ", PREFIXMATCH_MULTI_PARTIAL), 8); check_eq(prefix_multipart_match("epx get", options, " ", 0), -1); check_eq(prefix_multipart_match("epx get", options, " ", PREFIXMATCH_MULTI_PARTIAL), -1); check_eq(prefix_multipart_match("d f t u", options, " ", 0), 12); check_eq(prefix_multipart_match("d f t s", options, ",; ", 0), 13); return true; } // --- test launcher --- static struct Test tests[] = { {"prefix_match", test_prefix_match}, {"prefix_multipart_test", test_multipart_test}, {"prefix_multipart_match", test_multipart_match}, {NULL, NULL} }; int main() { run_tests(tests, "main"); return 0; }