xref: /freebsd-src/lib/libc/tests/gen/fnmatch_testcases.h (revision 559a218c9b257775fb249b67945fe4a05b7a6b9f)
1fbf5b9f8SEnji Cooper /*-
2fbf5b9f8SEnji Cooper  * Copyright (c) 2010 Jilles Tjoelker
3fbf5b9f8SEnji Cooper  * All rights reserved.
4fbf5b9f8SEnji Cooper  *
5fbf5b9f8SEnji Cooper  * Redistribution and use in source and binary forms, with or without
6fbf5b9f8SEnji Cooper  * modification, are permitted provided that the following conditions
7fbf5b9f8SEnji Cooper  * are met:
8fbf5b9f8SEnji Cooper  * 1. Redistributions of source code must retain the above copyright
9fbf5b9f8SEnji Cooper  *    notice, this list of conditions and the following disclaimer.
10fbf5b9f8SEnji Cooper  * 2. Redistributions in binary form must reproduce the above copyright
11fbf5b9f8SEnji Cooper  *    notice, this list of conditions and the following disclaimer in the
12fbf5b9f8SEnji Cooper  *    documentation and/or other materials provided with the distribution.
13fbf5b9f8SEnji Cooper  *
14fbf5b9f8SEnji Cooper  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15fbf5b9f8SEnji Cooper  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16fbf5b9f8SEnji Cooper  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17fbf5b9f8SEnji Cooper  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18fbf5b9f8SEnji Cooper  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19fbf5b9f8SEnji Cooper  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20fbf5b9f8SEnji Cooper  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21fbf5b9f8SEnji Cooper  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22fbf5b9f8SEnji Cooper  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23fbf5b9f8SEnji Cooper  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24fbf5b9f8SEnji Cooper  * SUCH DAMAGE.
25fbf5b9f8SEnji Cooper  */
26fbf5b9f8SEnji Cooper 
27fbf5b9f8SEnji Cooper #include <fnmatch.h>
28fbf5b9f8SEnji Cooper 
29fbf5b9f8SEnji Cooper struct testcase {
30fbf5b9f8SEnji Cooper 	const char *pattern;
31fbf5b9f8SEnji Cooper 	const char *string;
32fbf5b9f8SEnji Cooper 	int flags;
33fbf5b9f8SEnji Cooper 	int result;
34fbf5b9f8SEnji Cooper } testcases[] = {
35dd3d75baSEnji Cooper 	{ "", "", 0, 0 },
36dd3d75baSEnji Cooper 	{ "a", "a", 0, 0 },
37dd3d75baSEnji Cooper 	{ "a", "b", 0, FNM_NOMATCH },
38dd3d75baSEnji Cooper 	{ "a", "A", 0, FNM_NOMATCH },
39dd3d75baSEnji Cooper 	{ "*", "a", 0, 0 },
40dd3d75baSEnji Cooper 	{ "*", "aa", 0, 0 },
41dd3d75baSEnji Cooper 	{ "*a", "a", 0, 0 },
42dd3d75baSEnji Cooper 	{ "*a", "b", 0, FNM_NOMATCH },
43dd3d75baSEnji Cooper 	{ "*a*", "b", 0, FNM_NOMATCH },
44dd3d75baSEnji Cooper 	{ "*a*b*", "ab", 0, 0 },
45dd3d75baSEnji Cooper 	{ "*a*b*", "qaqbq", 0, 0 },
46dd3d75baSEnji Cooper 	{ "*a*bb*", "qaqbqbbq", 0, 0 },
47dd3d75baSEnji Cooper 	{ "*a*bc*", "qaqbqbcq", 0, 0 },
48dd3d75baSEnji Cooper 	{ "*a*bb*", "qaqbqbb", 0, 0 },
49dd3d75baSEnji Cooper 	{ "*a*bc*", "qaqbqbc", 0, 0 },
50dd3d75baSEnji Cooper 	{ "*a*bb", "qaqbqbb", 0, 0 },
51dd3d75baSEnji Cooper 	{ "*a*bc", "qaqbqbc", 0, 0 },
52dd3d75baSEnji Cooper 	{ "*a*bb", "qaqbqbbq", 0, FNM_NOMATCH },
53dd3d75baSEnji Cooper 	{ "*a*bc", "qaqbqbcq", 0, FNM_NOMATCH },
54dd3d75baSEnji Cooper 	{ "*a*a*a*a*a*a*a*a*a*a*", "aaaaaaaaa", 0, FNM_NOMATCH },
55dd3d75baSEnji Cooper 	{ "*a*a*a*a*a*a*a*a*a*a*", "aaaaaaaaaa", 0, 0 },
56dd3d75baSEnji Cooper 	{ "*a*a*a*a*a*a*a*a*a*a*", "aaaaaaaaaaa", 0, 0 },
57dd3d75baSEnji Cooper 	{ ".*.*.*.*.*.*.*.*.*.*", ".........", 0, FNM_NOMATCH },
58dd3d75baSEnji Cooper 	{ ".*.*.*.*.*.*.*.*.*.*", "..........", 0, 0 },
59dd3d75baSEnji Cooper 	{ ".*.*.*.*.*.*.*.*.*.*", "...........", 0, 0 },
60dd3d75baSEnji Cooper 	{ "*?*?*?*?*?*?*?*?*?*?*", "123456789", 0, FNM_NOMATCH },
61dd3d75baSEnji Cooper 	{ "??????????*", "123456789", 0, FNM_NOMATCH },
62dd3d75baSEnji Cooper 	{ "*??????????", "123456789", 0, FNM_NOMATCH },
63dd3d75baSEnji Cooper 	{ "*?*?*?*?*?*?*?*?*?*?*", "1234567890", 0, 0 },
64dd3d75baSEnji Cooper 	{ "??????????*", "1234567890", 0, 0 },
65dd3d75baSEnji Cooper 	{ "*??????????", "1234567890", 0, 0 },
66dd3d75baSEnji Cooper 	{ "*?*?*?*?*?*?*?*?*?*?*", "12345678901", 0, 0 },
67dd3d75baSEnji Cooper 	{ "??????????*", "12345678901", 0, 0 },
68dd3d75baSEnji Cooper 	{ "*??????????", "12345678901", 0, 0 },
69dd3d75baSEnji Cooper 	{ "[x]", "x", 0, 0 },
70dd3d75baSEnji Cooper 	{ "[*]", "*", 0, 0 },
71dd3d75baSEnji Cooper 	{ "[?]", "?", 0, 0 },
72dd3d75baSEnji Cooper 	{ "[", "[", 0, 0 },
73dd3d75baSEnji Cooper 	{ "[[]", "[", 0, 0 },
74dd3d75baSEnji Cooper 	{ "[[]", "x", 0, FNM_NOMATCH },
75dd3d75baSEnji Cooper 	{ "[*]", "", 0, FNM_NOMATCH },
76dd3d75baSEnji Cooper 	{ "[*]", "x", 0, FNM_NOMATCH },
77dd3d75baSEnji Cooper 	{ "[?]", "x", 0, FNM_NOMATCH },
78dd3d75baSEnji Cooper 	{ "*[*]*", "foo*foo", 0, 0 },
79dd3d75baSEnji Cooper 	{ "*[*]*", "foo", 0, FNM_NOMATCH },
80dd3d75baSEnji Cooper 	{ "[0-9]", "0", 0, 0 },
81dd3d75baSEnji Cooper 	{ "[0-9]", "5", 0, 0 },
82dd3d75baSEnji Cooper 	{ "[0-9]", "9", 0, 0 },
83dd3d75baSEnji Cooper 	{ "[0-9]", "/", 0, FNM_NOMATCH },
84dd3d75baSEnji Cooper 	{ "[0-9]", ":", 0, FNM_NOMATCH },
85dd3d75baSEnji Cooper 	{ "[0-9]", "*", 0, FNM_NOMATCH },
86dd3d75baSEnji Cooper 	{ "[!0-9]", "0", 0, FNM_NOMATCH },
87dd3d75baSEnji Cooper 	{ "[!0-9]", "5", 0, FNM_NOMATCH },
88dd3d75baSEnji Cooper 	{ "[!0-9]", "9", 0, FNM_NOMATCH },
89dd3d75baSEnji Cooper 	{ "[!0-9]", "/", 0, 0 },
90dd3d75baSEnji Cooper 	{ "[!0-9]", ":", 0, 0 },
91dd3d75baSEnji Cooper 	{ "[!0-9]", "*", 0, 0 },
92dd3d75baSEnji Cooper 	{ "*[0-9]", "a0", 0, 0 },
93dd3d75baSEnji Cooper 	{ "*[0-9]", "a5", 0, 0 },
94dd3d75baSEnji Cooper 	{ "*[0-9]", "a9", 0, 0 },
95dd3d75baSEnji Cooper 	{ "*[0-9]", "a/", 0, FNM_NOMATCH },
96dd3d75baSEnji Cooper 	{ "*[0-9]", "a:", 0, FNM_NOMATCH },
97dd3d75baSEnji Cooper 	{ "*[0-9]", "a*", 0, FNM_NOMATCH },
98dd3d75baSEnji Cooper 	{ "*[!0-9]", "a0", 0, FNM_NOMATCH },
99dd3d75baSEnji Cooper 	{ "*[!0-9]", "a5", 0, FNM_NOMATCH },
100dd3d75baSEnji Cooper 	{ "*[!0-9]", "a9", 0, FNM_NOMATCH },
101dd3d75baSEnji Cooper 	{ "*[!0-9]", "a/", 0, 0 },
102dd3d75baSEnji Cooper 	{ "*[!0-9]", "a:", 0, 0 },
103dd3d75baSEnji Cooper 	{ "*[!0-9]", "a*", 0, 0 },
104dd3d75baSEnji Cooper 	{ "*[0-9]", "a00", 0, 0 },
105dd3d75baSEnji Cooper 	{ "*[0-9]", "a55", 0, 0 },
106dd3d75baSEnji Cooper 	{ "*[0-9]", "a99", 0, 0 },
107dd3d75baSEnji Cooper 	{ "*[0-9]", "a0a0", 0, 0 },
108dd3d75baSEnji Cooper 	{ "*[0-9]", "a5a5", 0, 0 },
109dd3d75baSEnji Cooper 	{ "*[0-9]", "a9a9", 0, 0 },
110dd3d75baSEnji Cooper 	{ "\\*", "*", 0, 0 },
111dd3d75baSEnji Cooper 	{ "\\?", "?", 0, 0 },
112dd3d75baSEnji Cooper 	{ "\\[x]", "[x]", 0, 0 },
113dd3d75baSEnji Cooper 	{ "\\[", "[", 0, 0 },
114dd3d75baSEnji Cooper 	{ "\\\\", "\\", 0, 0 },
115dd3d75baSEnji Cooper 	{ "*\\**", "foo*foo", 0, 0 },
116dd3d75baSEnji Cooper 	{ "*\\**", "foo", 0, FNM_NOMATCH },
117dd3d75baSEnji Cooper 	{ "*\\\\*", "foo\\foo", 0, 0 },
118dd3d75baSEnji Cooper 	{ "*\\\\*", "foo", 0, FNM_NOMATCH },
119dd3d75baSEnji Cooper 	{ "\\(", "(", 0, 0 },
120dd3d75baSEnji Cooper 	{ "\\a", "a", 0, 0 },
121dd3d75baSEnji Cooper 	{ "\\*", "a", 0, FNM_NOMATCH },
122dd3d75baSEnji Cooper 	{ "\\?", "a", 0, FNM_NOMATCH },
123dd3d75baSEnji Cooper 	{ "\\*", "\\*", 0, FNM_NOMATCH },
124dd3d75baSEnji Cooper 	{ "\\?", "\\?", 0, FNM_NOMATCH },
125dd3d75baSEnji Cooper 	{ "\\[x]", "\\[x]", 0, FNM_NOMATCH },
126dd3d75baSEnji Cooper 	{ "\\[x]", "\\x", 0, FNM_NOMATCH },
127dd3d75baSEnji Cooper 	{ "\\[", "\\[", 0, FNM_NOMATCH },
128dd3d75baSEnji Cooper 	{ "\\(", "\\(", 0, FNM_NOMATCH },
129dd3d75baSEnji Cooper 	{ "\\a", "\\a", 0, FNM_NOMATCH },
130dd3d75baSEnji Cooper 	{ "\\", "\\", 0, FNM_NOMATCH },
131*9404dae2SPedro F. Giffuni 	{ "\\", "", 0, FNM_NOMATCH },
132dd3d75baSEnji Cooper 	{ "\\*", "\\*", FNM_NOESCAPE, 0 },
133dd3d75baSEnji Cooper 	{ "\\?", "\\?", FNM_NOESCAPE, 0 },
134dd3d75baSEnji Cooper 	{ "\\", "\\", FNM_NOESCAPE, 0 },
135dd3d75baSEnji Cooper 	{ "\\\\", "\\", FNM_NOESCAPE, FNM_NOMATCH },
136dd3d75baSEnji Cooper 	{ "\\\\", "\\\\", FNM_NOESCAPE, 0 },
137dd3d75baSEnji Cooper 	{ "*\\*", "foo\\foo", FNM_NOESCAPE, 0 },
138dd3d75baSEnji Cooper 	{ "*\\*", "foo", FNM_NOESCAPE, FNM_NOMATCH },
139dd3d75baSEnji Cooper 	{ "*", ".", FNM_PERIOD, FNM_NOMATCH },
140dd3d75baSEnji Cooper 	{ "?", ".", FNM_PERIOD, FNM_NOMATCH },
141dd3d75baSEnji Cooper 	{ ".*", ".", 0, 0 },
142dd3d75baSEnji Cooper 	{ ".*", "..", 0, 0 },
143dd3d75baSEnji Cooper 	{ ".*", ".a", 0, 0 },
144dd3d75baSEnji Cooper 	{ "[0-9]", ".", FNM_PERIOD, FNM_NOMATCH },
145dd3d75baSEnji Cooper 	{ "a*", "a.", 0, 0 },
146dd3d75baSEnji Cooper 	{ "a/a", "a/a", FNM_PATHNAME, 0 },
147dd3d75baSEnji Cooper 	{ "a/*", "a/a", FNM_PATHNAME, 0 },
148dd3d75baSEnji Cooper 	{ "*/a", "a/a", FNM_PATHNAME, 0 },
149dd3d75baSEnji Cooper 	{ "*/*", "a/a", FNM_PATHNAME, 0 },
150dd3d75baSEnji Cooper 	{ "a*b/*", "abbb/x", FNM_PATHNAME, 0 },
151dd3d75baSEnji Cooper 	{ "a*b/*", "abbb/.x", FNM_PATHNAME, 0 },
152dd3d75baSEnji Cooper 	{ "*", "a/a", FNM_PATHNAME, FNM_NOMATCH },
153dd3d75baSEnji Cooper 	{ "*/*", "a/a/a", FNM_PATHNAME, FNM_NOMATCH },
154dd3d75baSEnji Cooper 	{ "b/*", "b/.x", FNM_PATHNAME | FNM_PERIOD, FNM_NOMATCH },
155dd3d75baSEnji Cooper 	{ "b*/*", "a/.x", FNM_PATHNAME | FNM_PERIOD, FNM_NOMATCH },
156dd3d75baSEnji Cooper 	{ "b/.*", "b/.x", FNM_PATHNAME | FNM_PERIOD, 0 },
157dd3d75baSEnji Cooper 	{ "b*/.*", "b/.x", FNM_PATHNAME | FNM_PERIOD, 0 },
158dd3d75baSEnji Cooper 	{ "a", "A", FNM_CASEFOLD, 0 },
159dd3d75baSEnji Cooper 	{ "A", "a", FNM_CASEFOLD, 0 },
160dd3d75baSEnji Cooper 	{ "[a]", "A", FNM_CASEFOLD, 0 },
161dd3d75baSEnji Cooper 	{ "[A]", "a", FNM_CASEFOLD, 0 },
162dd3d75baSEnji Cooper 	{ "a", "b", FNM_CASEFOLD, FNM_NOMATCH },
163dd3d75baSEnji Cooper 	{ "a", "a/b", FNM_PATHNAME, FNM_NOMATCH },
164dd3d75baSEnji Cooper 	{ "*", "a/b", FNM_PATHNAME, FNM_NOMATCH },
165dd3d75baSEnji Cooper 	{ "*b", "a/b", FNM_PATHNAME, FNM_NOMATCH },
166dd3d75baSEnji Cooper 	{ "a", "a/b", FNM_PATHNAME | FNM_LEADING_DIR, 0 },
167dd3d75baSEnji Cooper 	{ "*", "a/b", FNM_PATHNAME | FNM_LEADING_DIR, 0 },
168dd3d75baSEnji Cooper 	{ "*", ".a/b", FNM_PATHNAME | FNM_LEADING_DIR, 0 },
169dd3d75baSEnji Cooper 	{ "*a", ".a/b", FNM_PATHNAME | FNM_LEADING_DIR, 0 },
170dd3d75baSEnji Cooper 	{ "*", ".a/b", FNM_PATHNAME | FNM_PERIOD | FNM_LEADING_DIR, FNM_NOMATCH },
171dd3d75baSEnji Cooper 	{ "*a", ".a/b", FNM_PATHNAME | FNM_PERIOD | FNM_LEADING_DIR, FNM_NOMATCH },
172dd3d75baSEnji Cooper 	{ "a*b/*", "abbb/.x", FNM_PATHNAME | FNM_PERIOD, FNM_NOMATCH },
173fbf5b9f8SEnji Cooper };
174