/* $Id: uwildmat-t.c 7262 2005-06-06 04:45:48Z eagle $
**
** wildmat test suite.
**
** As of March 11, 2001, this test suite achieves 100% coverage of the
** wildmat source code at that time.
*/
#include "clibrary.h"
#include "libinn.h"
static void
test_r(int n, const char *text, const char *pattern, bool matches)
{
bool matched;
matched = uwildmat(text, pattern);
printf("%sok %d\n", matched == matches ? "" : "not ", n);
if (matched != matches)
printf(" %s\n %s\n expected %d\n", text, pattern, matches);
}
static void
test_p(int n, const char *text, const char *pattern, enum uwildmat matches)
{
enum uwildmat matched;
matched = uwildmat_poison(text, pattern);
printf("%sok %d\n", matched == matches ? "" : "not ", n);
if (matched != matches)
printf(" %s\n %s\n expected %d got %d\n", text, pattern,
(int) matches, (int) matched);
}
static void
test_s(int n, const char *text, const char *pattern, bool matches)
{
bool matched;
matched = uwildmat_simple(text, pattern);
printf("%sok %d\n", matched == matches ? "" : "not ", n);
if (matched != matches)
printf(" %s\n %s\n expected %d\n", text, pattern, matches);
}
int
main(void)
{
puts("166");
/* Basic wildmat features. */
test_r( 1, "foo", "foo", true);
test_r( 2, "foo", "bar", false);
test_r( 3, "", "", true);
test_r( 4, "foo", "???", true);
test_r( 5, "foo", "??", false);
test_r( 6, "foo", "*", true);
test_r( 7, "foo", "f*", true);
test_r( 8, "foo", "*f", false);
test_r( 9, "foo", "*foo*", true);
test_r( 10, "foobar", "*ob*a*r*", true);
test_r( 11, "aaaaaaabababab", "*ab", true);
test_r( 12, "foo*", "foo\\*", true);
test_r( 13, "foobar", "foo\\*bar", false);
test_r( 14, "\\", "\\\\", true);
test_r( 15, "ball", "*[al]?", true);
test_r( 16, "ten", "[ten]", false);
test_r( 17, "ten", "**[^te]", true);
test_r( 18, "ten", "**[^ten]", false);
test_r( 19, "ten", "t[a-g]n", true);
test_r( 20, "ten", "t[^a-g]n", false);
test_r( 21, "ton", "t[^a-g]n", true);
test_r( 22, "]", "]", true);
test_r( 23, "a]b", "a[]]b", true);
test_r( 24, "a-b", "a[]-]b", true);
test_r( 25, "a]b", "a[]-]b", true);
test_r( 26, "aab", "a[]-]b", false);
test_r( 27, "aab", "a[]a-]b", true);
/* Multiple and negation. */
test_r( 28, "foo", "!foo", false);
test_r( 29, "foo", "!bar", false);
test_r( 30, "foo", "*,!foo", false);
test_r( 31, "foo", "*,!bar", true);
test_r( 32, "foo", "foo,bar", true);
test_r( 33, "bar", "foo,bar", true);
test_r( 34, "baz", "foo,bar", false);
test_r( 35, "baz", "foo,ba?", true);
test_r( 36, "", "!", false);
test_r( 37, "foo", "!", false);
test_r( 38, "a", "a,!b,c", true);
test_r( 39, "b", "a,!b,c", false);
test_r( 40, "c", "a,!b,c", true);
test_r( 41, "ab", "a*,!ab", false);
test_r( 42, "abc", "a*,!ab", true);
test_r( 43, "dabc", "a*,!ab", false);
test_r( 44, "abc", "a*,!ab*,abc", true);
test_r( 45, "", ",", true);
test_r( 46, "a", ",a", true);
test_r( 47, "a", "a,,,", true);
test_r( 48, "b", ",a", false);
test_r( 49, "b", "a,,,", false);
test_r( 50, "a,b", "a\\,b", true);
test_r( 51, "a,b", "a\\\\,b", false);
test_r( 52, "a\\", "a\\\\,b", true);
test_r( 53, "a\\,b", "a\\\\,b", false);
test_r( 54, "a\\,b", "a\\\\\\,b", true);
test_r( 55, ",", "\\,", true);
test_r( 56, ",\\", "\\,", false);
test_r( 57, ",\\", "\\,\\\\,", true);
test_r( 58, "", "\\,\\\\,", true);
test_r( 59, "", "\\,,!", false);
test_r( 60, "", "\\,!,", true);
/* Various additional tests. */
test_r( 61, "acrt", "a[c-c]st", false);
test_r( 62, "]", "[^]-]", false);
test_r( 63, "a", "[^]-]", true);
test_r( 64, "", "\\", false);
test_r( 65, "\\", "\\", false);
test_r( 66, "foo", "*,@foo", true);
test_r( 67, "@foo", "@foo", true);
test_r( 68, "foo", "@foo", false);
test_r( 69, "[ab]", "\\[ab]", true);
test_r( 70, "?a?b", "\\??\\?b", true);
test_r( 71, "abc", "\\a\\b\\c", true);
/* Poison negation. */
test_p( 72, "abc", "*", UWILDMAT_MATCH);
test_p( 73, "abc", "def", UWILDMAT_FAIL);
test_p( 74, "abc", "*,!abc", UWILDMAT_FAIL);
test_p( 75, "a", "*,@a", UWILDMAT_POISON);
test_p( 76, "ab", "*,@a*,ab", UWILDMAT_MATCH);
test_p( 77, "ab", "*,@a**,!ab", UWILDMAT_FAIL);
test_p( 78, "@ab", "\\@ab", UWILDMAT_MATCH);
test_p( 79, "@ab", "@\\@ab", UWILDMAT_POISON);
/* UTF-8 characters. */
test_r( 80, "S\303\256ne", "S\303\256ne", true);
test_r( 81, "S\303\256ne", "S\303\257ne", false);
test_r( 82, "S\303\256ne", "S?ne", true);
test_r( 83, "S\303\256ne", "S*e", true);
test_r( 84, "S\303\256ne", "S[a-\330\200]ne", true);
test_r( 85, "S\303\256ne", "S[a-\300\256]ne", false);
test_r( 86, "S\303\256ne", "S[^\1-\177]ne", true);
test_r( 87, "S\303\256ne", "S[0\303\256$]ne", true);
test_r( 88, "\2", "[\1-\3]", true);
test_r( 89, "\330\277", "[\330\276-\331\200]", true);
test_r( 90, "\337\277", "[\337\276-\350\200\200]", true);
test_r( 91, "\357\277\277", "[\357\277\276-\364\200\200\200]", true);
test_r( 92, "\357\276\277", "[\357\277\276-\364\200\200\200]", false);
test_r( 93, "\367\277\277\277",
"[\310\231-\372\200\200\200\200]", true);
test_r( 94, "\373\277\277\277\277",
"[\1-\375\200\200\200\200\200]", true);
test_r( 95, "\375\200\200\200\200\200",
"[\5-\375\200\200\200\200\200]", true);
test_r( 96, "\375\277\277\277\277\276",
"[\375\277\277\277\277\275-\375\277\277\277\277\277]", true);
test_r( 97, "b\357\277\277a", "b?a", true);
test_r( 98, "b\367\277\277\277a", "b?a", true);
test_r( 99, "b\373\277\277\277\277a", "b?a", true);
test_r(100, "b\375\277\277\277\277\276a", "b?a", true);
test_r(101, "\357\240\275S\313\212\375\206\203\245\260\211",
"????", true);
test_r(102, "S\303\256ne", "S\\\303\256ne", true);
test_r(103, "s", "[^\330\277-\375\277\277\277\277\277]", true);
test_r(104, "\367\277\277\277",
"[^\330\277-\375\277\277\277\277\277]", false);
/* Malformed UTF-8. */
test_r(105, "S\303\256ne", "S?\256ne", false);
test_r(106, "\303\303", "?", false);
test_r(107, "\303\303", "??", true);
test_r(108, "\200", "[\177-\201]", true);
test_r(109, "abc\206d", "*\206d", true);
test_r(110, "\303\206", "*\206", false);
test_r(111, "\40", "\240", false);
test_r(112, "\323", "[a-\377]", true);
test_r(113, "\376\277\277\277\277\277", "?", false);
test_r(114, "\376\277\277\277\277\277", "??????", true);
test_r(115, "\377\277\277\277\277\277", "?", false);
test_r(116, "\377\277\277\277\277\277", "??????", true);
test_r(117, "\303\323\206", "??", true);
test_r(118, "\206", "[\341\206f]", true);
test_r(119, "f", "[\341\206f]", true);
test_r(120, "\207", "[\341\206-\277]", true);
test_r(121, "\207", "[\341\206\206-\277]", false);
test_r(122, "\300", "[\277-\341\206]", true);
test_r(123, "\206", "[\277-\341\206]", true);
test_r(124, "\341\206", "[\341\206-\277]?", true);
/* Additional tests, including some malformed wildmats. */
test_r(125, "ab", "a[]b", false);
test_r(126, "a[]b", "a[]b", false);
test_r(127, "ab[", "ab[", false);
test_r(128, "ab", "[^", false);
test_r(129, "ab", "[-", false);
test_r(130, "-", "[-]", true);
test_r(131, "-", "[a-", false);
test_r(132, "-", "[^a-", false);
test_r(133, "-", "[--A]", true);
test_r(134, "5", "[--A]", true);
test_r(135, "\303\206", "[--A]", false);
test_r(136, " ", "[ --]", true);
test_r(137, "$", "[ --]", true);
test_r(138, "-", "[ --]", true);
test_r(139, "0", "[ --]", false);
test_r(140, "-", "[---]", true);
test_r(141, "-", "[------]", true);
test_r(142, "j", "[a-e-n]", false);
test_r(143, "a", "[^------]", true);
test_r(144, "[", "[]-a]", false);
test_r(145, "^", "[]-a]", true);
test_r(146, "^", "[^]-a]", false);
test_r(147, "[", "[^]-a]", true);
test_r(148, "^", "[a^bc]", true);
test_r(149, "-b]", "[a-]b]", true);
test_r(150, "\\]", "[\\]]", true);
test_r(151, "]", "[\\-^]", true);
test_r(152, "[", "[\\-^]", false);
test_r(153, "G", "[A-\\]", true);
test_r(154, "aaabbb", "b*a", false);
test_r(155, "aabcaa", "*ba*", false);
test_r(156, ",", "[,]", true);
test_r(157, ",", "[\\,]", true);
test_r(158, "\\", "[\\,]", true);
test_r(159, "-", "[,-.]", true);
test_r(160, "+", "[,-.]", false);
test_r(161, "-.]", "[,-.]", false);
/* Tests for the wildmat_simple interface. */
test_s(162, "ab,cd", "ab,cd", true);
test_s(163, "ab", "ab,cd", false);
test_s(164, "!aaabbb", "!a*b*", true);
test_s(165, "ccc", "*,!a*", false);
test_s(166, "foo", "*", true);
return 0;
}
syntax highlighted by Code2HTML, v. 0.9.1