// gcc -Wall -I. -Dlinux=1 -DHAVE_VA_COPY -o match_main match_main.c utils/match.c utils/malloc.c // -pg --coverage -fprofile-arcs -ftest-coverage // ./match_main // gcov match -s utils -m // less match.c.gcov #include #include #include //#include #include "utils/magic.h" #include "utils/utils.h" #include "utils/malloc.h" void TxError(char *fmt, ...) { va_list ap; va_start(ap, fmt); fprintf(stderr, fmt, ap); va_end(ap); } static int try_match(int failcount, const char *pattern, const char *string, bool expect) { char *p = strdup(pattern); char *s = strdup(string); bool res = Match(p, s); if(res != expect) failcount++; printf("%s: Match(\"%s\", \"%s\") = %d\n", (res != expect) ? "FAIL": "PASS", p, s, res ); freeMagic(s); freeMagic(p); return failcount; } int main() { int failcount = 0; printf("Match(char *pattern, char *string) = (1 for TRUE, 0 for FALSE)\n"); failcount = try_match(failcount, "foo", "", FALSE); failcount = try_match(failcount, "foo", "fo", FALSE); failcount = try_match(failcount, "foo", "foo", TRUE); failcount = try_match(failcount, "foo", "fooo", FALSE); failcount = try_match(failcount, "foo", "0", FALSE); failcount = try_match(failcount, "foo", "0fo", FALSE); failcount = try_match(failcount, "foo", "0foo", FALSE); failcount = try_match(failcount, "foo", "0fooo", FALSE); failcount = try_match(failcount, "", "", TRUE); failcount = try_match(failcount, "a", "", FALSE); failcount = try_match(failcount, "", "a", FALSE); failcount = try_match(failcount, "?", "", FALSE); failcount = try_match(failcount, "?", "a", TRUE); failcount = try_match(failcount, "a?c", "abc", TRUE); failcount = try_match(failcount, "a?c", "aBc", TRUE); failcount = try_match(failcount, "a?c", "a?c", TRUE); failcount = try_match(failcount, "a[bB]c", "abc", TRUE); failcount = try_match(failcount, "a[bB]c", "aBc", TRUE); failcount = try_match(failcount, "a[bB]c", "aZc", FALSE); failcount = try_match(failcount, "a[bB]c", "ab", FALSE); failcount = try_match(failcount, "a[bB]c", "ac", FALSE); failcount = try_match(failcount, "a[0-8]c", "a0c", TRUE); failcount = try_match(failcount, "a[0-8]c", "a8c", TRUE); failcount = try_match(failcount, "a[0-8]c", "a9c", FALSE); failcount = try_match(failcount, "a[0-8]c", "a0", FALSE); failcount = try_match(failcount, "a[0-8]c", "a9", FALSE); failcount = try_match(failcount, "a[0-8]c", "ac", FALSE); failcount = try_match(failcount, "a[1-0]c", "ac", FALSE); // user error failcount = try_match(failcount, "a[1-0]c", "a0c", TRUE); // really ? failcount = try_match(failcount, "a[0-1]c", "a0c", TRUE); failcount = try_match(failcount, "a[0-", "ac", FALSE); failcount = try_match(failcount, "a[]", "ac", FALSE); // user error failcount = try_match(failcount, "a[]c", "ac", FALSE); // user error failcount = try_match(failcount, "ab*", "abc", TRUE); failcount = try_match(failcount, "a*c", "aBc", TRUE); failcount = try_match(failcount, "a*c", "ac", TRUE); failcount = try_match(failcount, "a*c", "aBBBBc", TRUE); failcount = try_match(failcount, "a*", "a", TRUE); failcount = try_match(failcount, "a*", "ab", TRUE); failcount = try_match(failcount, "a*", "abcde", TRUE); failcount = try_match(failcount, "a**", "a", FALSE); // really ? this looks like a bug ? failcount = try_match(failcount, "a**", "ab", TRUE); failcount = try_match(failcount, "a**", "abcde", TRUE); failcount = try_match(failcount, "a**z", "az", TRUE); // this form works failcount = try_match(failcount, "a***z", "az", TRUE); // as does this failcount = try_match(failcount, "a**z", "abz", TRUE); failcount = try_match(failcount, "a**z", "abcdez", TRUE); failcount = try_match(failcount, "a*n*z", "an", FALSE); failcount = try_match(failcount, "a*n*z", "az", FALSE); failcount = try_match(failcount, "a*n*z", "anz", TRUE); failcount = try_match(failcount, "a*n*z", "abcdenz", TRUE); failcount = try_match(failcount, "a*n*z", "anbcdez", TRUE); failcount = try_match(failcount, "a*n*z", "abcndez", TRUE); failcount = try_match(failcount, "a\\*", "a*", TRUE); failcount = try_match(failcount, "a\\*", "ab", FALSE); failcount = try_match(failcount, "a\\[", "a[", TRUE); failcount = try_match(failcount, "a\\", "a", FALSE); failcount = try_match(failcount, "a\\", "a\\", FALSE); failcount = try_match(failcount, "astring", "astring", TRUE); failcount = try_match(failcount, "astring", "astring_and_anything_else", FALSE); // really ? failcount = try_match(failcount, "astring_and_anything_else", "astring_and_anything_else", TRUE); failcount = try_match(failcount, "astring_and_anything_else", "astring", FALSE); // really ? printf("failcount=%d\n", failcount); return failcount == 0 ? 0 : 1; }