+int main (int argc, char **argv)
+{
+ TEST ("[a-]", "-", TRUE);
+
+ TEST ("a", "a", TRUE);
+ TEST ("a", "b", FALSE);
+
+ /* Test what ? matches */
+ TEST ("?", "a", TRUE);
+ TEST ("?", ".", FALSE);
+ TEST ("a?", "a.", TRUE);
+ TEST ("a/?", "a/b", TRUE);
+ TEST ("a/?", "a/.", FALSE);
+ TEST ("?", "/", FALSE);
+
+ /* Test what * matches */
+ TEST ("*", "a", TRUE);
+ TEST ("*", ".", FALSE);
+ TEST ("a*", "a.", TRUE);
+ TEST ("a/*", "a/b", TRUE);
+ TEST ("a/*", "a/.", FALSE);
+ TEST ("*", "/", FALSE);
+
+ /* Range tests */
+ TEST ("[ab]", "a", TRUE);
+ TEST ("[ab]", "c", FALSE);
+ TEST ("[^ab]", "a", FALSE);
+ TEST ("[!ab]", "a", FALSE);
+ TEST ("[^ab]", "c", TRUE);
+ TEST ("[!ab]", "c", TRUE);
+ TEST ("[a-c]", "b", TRUE);
+ TEST ("[a-c]", "d", FALSE);
+ TEST ("[a-]", "-", TRUE);
+ TEST ("[]]", "]", TRUE);
+ TEST ("[^]]", "a", TRUE);
+ TEST ("[!]]", "a", TRUE);
+
+ /* Various unclosed ranges */
+ TEST ("[ab", "a", FALSE);
+ TEST ("[a-", "a", FALSE);
+ TEST ("[ab", "c", FALSE);
+ TEST ("[a-", "c", FALSE);
+ TEST ("[^]", "a", FALSE);
+
+ /* Ranges and special no-wildcard matches */
+ TEST ("[.]", ".", FALSE);
+ TEST ("a[.]", "a.", TRUE);
+ TEST ("a/[.]", "a/.", FALSE);
+ TEST ("[/]", "/", FALSE);
+ TEST ("[^/]", "a", TRUE);
+
+ /* Basic tests of * (and combinations of * and ?) */
+ TEST ("a*b", "ab", TRUE);
+ TEST ("a*b", "axb", TRUE);
+ TEST ("a*b", "axxb", TRUE);
+ TEST ("a**b", "ab", TRUE);
+ TEST ("a**b", "axb", TRUE);
+ TEST ("a**b", "axxb", TRUE);
+ TEST ("a*?*b", "ab", FALSE);
+ TEST ("a*?*b", "axb", TRUE);
+ TEST ("a*?*b", "axxb", TRUE);
+
+ /* Test of *[range] */
+ TEST ("a*[cd]", "ac", TRUE);
+ TEST ("a*[cd]", "axc", TRUE);
+ TEST ("a*[cd]", "axx", FALSE);
+
+ TEST ("a/[.]", "a/.", FALSE);
+ TEST ("a*[.]", "a/.", FALSE);
+
+ /* Test of UTF-8 */
+
+ TEST ("ä", "ä", TRUE); /* TEST ("ä", "ä", TRUE); */
+ TEST ("?", "ä", TRUE); /* TEST ("?", "ä", TRUE); */
+ TEST ("*ö", "äö", TRUE); /* TEST ("*ö", "äö", TRUE); */
+ TEST ("*ö", "ääö", TRUE); /* TEST ("*ö", "ääö", TRUE); */
+ TEST ("[ä]", "ä", TRUE); /* TEST ("[ä]", "ä", TRUE); */
+ TEST ("[ä-ö]", "é", TRUE); /* TEST ("[ä-ö]", "é", TRUE); */
+ TEST ("[ä-ö]", "a", FALSE); /* TEST ("[ä-ö]", "a", FALSE); */
+
+#ifdef DO_ESCAPE
+ /* Tests of escaping */
+ TEST ("\\\\", "\\", TRUE);
+ TEST ("\\?", "?", TRUE);
+ TEST ("\\?", "a", FALSE);
+ TEST ("\\*", "*", TRUE);
+ TEST ("\\*", "a", FALSE);
+ TEST ("\\[a-b]", "[a-b]", TRUE);
+ TEST ("[\\\\]", "\\", TRUE);
+ TEST ("[\\^a]", "a", TRUE);
+ TEST ("[a\\-c]", "b", FALSE);
+ TEST ("[a\\-c]", "-", TRUE);
+ TEST ("[a\\]", "a", FALSE);
+#endif /* DO_ESCAPE */
+
+ return 0;