Ne.app NeANT
The Ne.app NeANT User module of the NeANT distribution.
0.fnmatch.cpp
Go to the documentation of this file.
1
27#include <rw_fnmatch.h> // for rw_fnmatch()
28#include <stdio.h> // for fprintf(), stderr
29
30
31#ifdef _RWSTD_OS_LINUX
32# include <fnmatch.h> // for fnmatch()
33# define FNMATCH(pat, str, arg) fnmatch (pat, str, arg)
34#endif // _RWSTD_OS_LINUX
35
36
37// the number of failed tests
38static int nerrors;
39
40static void
41test (int line, int exp, const char *pat, const char *str)
42{
43 const int result = rw_fnmatch (pat, str, 0);
44
45#ifdef FNMATCH
46 const int native = FNMATCH (pat, str, 0);
47#else // if !defined (FNMATCH)
48 const int native = exp;
49#endif // FNMATCH
50
51 if (result != native || (-1 < exp && result != exp)) {
52
53 ++nerrors;
54
55 fprintf (stderr,
56 "%d. rw_fnmatch(\"%s\", \"%s\", 0) ==> %d, "
57 "expected (native:own) %d:%d\n",
58 line, pat, str, result, native, exp);
59 }
60}
61
62
63int main ()
64{
65#define TEST(exp, pat, str) test (__LINE__, exp, pat, str)
66
67 TEST (0, "", "");
68 TEST (1, "", "a");
69 TEST (1, "a", "");
70
71 TEST (0, "a", "a");
72 TEST (1, "a", "b");
73
74 TEST (0, "ab", "ab");
75 TEST (1, "ab", "ac");
76
77 TEST (0, "abc", "abc");
78 TEST (1, "xbc", "abc");
79 TEST (1, "ayc", "abc");
80 TEST (1, "abz", "abc");
81
82 // exercise escaped characters
83 TEST (1, "\\a", "");
84 TEST (0, "\\a", "a");
85 TEST (1, "\\a", "\\a");
86 TEST (1, "\\\\", "");
87 TEST (0, "\\\\", "\\");
88 TEST (1, "\\?", "\\a");
89 TEST (0, "\\?", "?");
90 TEST (1, "\\?", "\\?");
91 TEST (0, "\\[", "[");
92 TEST (1, "\\[", "\\[");
93 TEST (0, "\\[a", "[a");
94 TEST (0, "\\[a]", "[a]");
95 TEST (0, "\\[a\\]", "[a]");
96 TEST (0, "\\[\\a\\]", "[a]");
97
98 // exercise the question mark pattern
99 TEST (1, "?", "");
100 TEST (0, "?", "a");
101 TEST (1, "?", "ab");
102
103 TEST (1, "\\?", "");
104 TEST (1, "\\?", "a");
105 TEST (0, "\\?", "?");
106
107 TEST (0, "a?", "ad");
108 TEST (0, "?b", "ab");
109 TEST (1, "?b", "ac");
110 TEST (0, "??", "ae");
111 TEST (1, "??", "aef");
112
113 TEST (0, "?bc", "abc");
114 TEST (0, "a?c", "abc");
115 TEST (0, "ab?", "abc");
116
117 TEST (0, "??c", "abc");
118 TEST (0, "a??", "abc");
119 TEST (0, "?b?", "abc");
120
121 TEST (1, "??c", "abz");
122 TEST (1, "a??", "xbc");
123 TEST (1, "?b?", "ayc");
124
125 TEST (0, "???", "abc");
126 TEST (1, "???", "ab");
127 TEST (1, "???", "abcd");
128
129 // exercise the asterisk pattern
130 TEST (0, "*", "");
131 TEST (0, "*", "a");
132 TEST (0, "*", "ab");
133 TEST (0, "*", "abc");
134
135 TEST (1, "\\*", "");
136 TEST (1, "\\*", "a");
137 TEST (0, "\\*", "*");
138 TEST (1, "\\*", "ab");
139 TEST (1, "\\*", "abc");
140
141 TEST (0, "**", "");
142 TEST (0, "**", "a");
143 TEST (0, "**", "ab");
144 TEST (0, "**", "abc");
145
146 TEST (1, "*\\*", "");
147 TEST (1, "*\\*", "a");
148 TEST (0, "*\\*", "a*");
149 TEST (0, "*\\*", "ab*");
150
151 TEST (1, "a*", "");
152 TEST (0, "a*", "a");
153 TEST (0, "a*", "ab");
154 TEST (0, "a*", "abc");
155
156 TEST (1, "a**", "");
157 TEST (0, "a**", "a");
158 TEST (0, "a**", "ab");
159 TEST (0, "a**", "abc");
160
161 TEST (1, "**c", "");
162 TEST (1, "**c", "a");
163 TEST (1, "**c", "ab");
164 TEST (0, "**c", "abc");
165 TEST (1, "**c", "abcd");
166
167 TEST (1, "a*z", "");
168 TEST (1, "a*z", "a");
169 TEST (1, "a*z", "ab");
170 TEST (1, "a*z", "abc");
171 TEST (0, "a*z", "abcz");
172 TEST (0, "a*z", "abcdz");
173 TEST (0, "a*z", "abcdez");
174
175 TEST (1, "ab*z", "");
176 TEST (1, "ab*z", "a");
177 TEST (1, "ab*z", "ab");
178 TEST (1, "ab*z", "abc");
179 TEST (0, "ab*z", "abcz");
180 TEST (0, "ab*z", "abcdz");
181 TEST (0, "ab*z", "abcdez");
182
183 TEST (1, "a*yz", "");
184 TEST (1, "a*yz", "a");
185 TEST (1, "a*yz", "ab");
186 TEST (1, "a*yz", "abc");
187 TEST (1, "a*yz", "abcz");
188 TEST (0, "a*yz", "abcyz");
189 TEST (0, "a*yz", "abcdyz");
190
191 TEST (1, "ab*yz", "");
192 TEST (1, "ab*yz", "a");
193 TEST (1, "ab*yz", "ab");
194 TEST (1, "ab*yz", "abc");
195 TEST (1, "ab*yz", "abcz");
196 TEST (0, "ab*yz", "abcyz");
197 TEST (0, "ab*yz", "abcdyz");
198 TEST (0, "ab*yz", "abcdeyz");
199
200 TEST (1, "ab*x*z", "");
201 TEST (1, "ab*x*z", "a");
202 TEST (1, "ab*x*z", "ab");
203 TEST (1, "ab*x*z", "abc");
204 TEST (1, "ab*x*z", "abcz");
205 TEST (1, "ab*x*z", "abcyz");
206 TEST (0, "ab*x*z", "abcxyz");
207 TEST (0, "ab*x*z", "abcxxyz");
208 TEST (0, "ab*x*z", "abcxyyz");
209
210 TEST (1, "*b*x*z", "");
211 TEST (1, "*b*x*z", "a");
212 TEST (1, "*b*x*z", "ab");
213 TEST (1, "*b*x*z", "abc");
214 TEST (1, "*b*x*z", "abcz");
215 TEST (1, "*b*x*z", "abcyz");
216 TEST (0, "*b*x*z", "bcxyz");
217 TEST (0, "*b*x*z", "abcxyz");
218 TEST (0, "*b*x*z", "aabcxyz");
219 TEST (0, "*b*x*z", "abcxxyz");
220 TEST (0, "*b*x*z", "abcxyyz");
221
222 TEST (1, "abc*klm*xyz", "");
223 TEST (1, "abc*klm*xyz", "a");
224 TEST (1, "abc*klm*xyz", "ak");
225 TEST (1, "abc*klm*xyz", "akx");
226
227 TEST (1, "abc*klm*xyz", "abkx");
228 TEST (1, "abc*klm*xyz", "abklx");
229 TEST (1, "abc*klm*xyz", "abklxy");
230 TEST (1, "abc*klm*xyz", "abcklxy");
231 TEST (1, "abc*klm*xyz", "abcklmxy");
232 TEST (0, "abc*klm*xyz", "abcklmxyz");
233 TEST (0, "abc*klm*xyz", "abcdklmxyz");
234 TEST (0, "abc*klm*xyz", "abcdklmnxyz");
235
236 // exercise simple bracket expressions
237 TEST (1, "[a]", "");
238 TEST (0, "[a]", "a");
239 TEST (1, "[a]", "b");
240 TEST (1, "[?]", "c");
241 TEST (0, "[?]", "?");
242 TEST (1, "[-]", "d");
243 TEST (0, "[-]", "-");
244 TEST (1, "[]]", "e");
245 TEST (0, "[]]", "]");
246 TEST (1, "[\\]]", "f");
247 TEST (1, "[\\]]", "\\");
248 TEST (0, "[\\]]", "]");
249
250 TEST (1, "[\\!a]", "");
251 TEST (0, "[\\!a]", "a");
252 TEST (1, "[\\!a]", "b");
253 TEST (0, "[\\!?]", "!");
254 TEST (0, "[\\!?]", "?");
255 TEST (0, "[\\!-]", "-");
256 TEST (0, "[\\!!]", "!");
257 TEST (0, "[\\\\!]", "\\");
258
259 TEST (1, "[ab]", "");
260 TEST (0, "[ab]", "a");
261 TEST (0, "[ab]", "b");
262 TEST (1, "[ab]", "c");
263
264 TEST (1, "[a]b", "");
265 TEST (1, "[a]b", "a");
266 TEST (0, "[a]b", "ab");
267 TEST (1, "[a]b", "b");
268
269 TEST (1, "a[b]", "");
270 TEST (1, "a[b]", "a");
271 TEST (0, "a[b]", "ab");
272 TEST (1, "a[b]", "b");
273
274 TEST (1, "a[bc]", "");
275 TEST (1, "a[bc]", "a");
276 TEST (0, "a[bc]", "ab");
277 TEST (0, "a[bc]", "ac");
278 TEST (1, "a[bc]", "abc");
279 TEST (1, "a[\\]]", "ab");
280 TEST (0, "a[\\]]", "a]");
281
282 TEST (1, "[abc]", "");
283 TEST (0, "[abc]", "a");
284 TEST (0, "[abc]", "b");
285 TEST (0, "[abc]", "c");
286 TEST (1, "[abc]", "ab");
287 TEST (1, "[abc]", "ac");
288 TEST (1, "[abc]", "abc");
289
290 // exercise negated bracket expressions
291 TEST (1, "[!a]", "");
292 TEST (1, "[!a]", "a");
293 TEST (0, "[!a]", "b");
294 TEST (1, "[!?]", "?");
295 TEST (0, "[!?]", "c");
296 TEST (1, "[!-]", "-");
297 TEST (0, "[!-]", "d");
298 TEST (1, "[!!]", "!");
299 TEST (0, "[!!]", "e");
300
301 TEST (1, "[!ab]", "");
302 TEST (1, "[!ab]", "a");
303 TEST (1, "[!ab]", "b");
304 TEST (0, "[!ab]", "c");
305
306 TEST (1, "[!a]b", "");
307 TEST (1, "[!a]b", "a");
308 TEST (1, "[!a]b", "ab");
309 TEST (1, "[!a]b", "b");
310 TEST (0, "[!a]b", "bb");
311
312 TEST (1, "a[!b]", "");
313 TEST (1, "a[!b]", "a");
314 TEST (1, "a[!b]", "ab");
315 TEST (1, "a[!b]", "b");
316 TEST (0, "a[!b]", "ac");
317
318 TEST (1, "a[!bc]", "");
319 TEST (1, "a[!bc]", "a");
320 TEST (1, "a[!bc]", "ab");
321 TEST (1, "a[!bc]", "ac");
322 TEST (0, "a[!bc]", "ad");
323 TEST (0, "a[!!?]", "ae");
324 TEST (0, "a[!?!]", "af");
325 TEST (0, "a[!?-]", "ag");
326 TEST (0, "a[!-?]", "ah");
327 TEST (1, "a[!bc]", "aae");
328 TEST (1, "a[!bc]", "abe");
329 TEST (1, "a[!bc]", "ace");
330
331 TEST (1, "[!abc]", "");
332 TEST (1, "[!abc]", "a");
333 TEST (1, "[!abc]", "b");
334 TEST (1, "[!abc]", "c");
335 TEST (0, "[!abc]", "d");
336 TEST (1, "[!abc]", "ab");
337 TEST (1, "[!abc]", "ac");
338 TEST (1, "[!abc]", "ad");
339 TEST (1, "[!abc]", "abc");
340 TEST (1, "[!abc]", "abcd");
341
342 TEST (1, "[!abc]d", "");
343 TEST (1, "[!abc]d", "a");
344 TEST (1, "[!abc]d", "b");
345 TEST (1, "[!abc]d", "c");
346 TEST (1, "[!abc]d", "d");
347 TEST (0, "[!abc]d", "dd");
348 TEST (1, "[!abc]d", "ab");
349 TEST (1, "[!abc]d", "ac");
350 TEST (1, "[!abc]d", "ad");
351 TEST (1, "[!abc]d", "abc");
352 TEST (1, "[!abc]d", "abcd");
353
354 // exercise bracket expressions with ranges
355 TEST (1, "[a-a]", "");
356 TEST (0, "[a-a]", "a");
357 TEST (1, "[a-a]", "b");
358 TEST (1, "[a-a]", "ab");
359 TEST (1, "[a-a]", "ba");
360
361 TEST (1, "[a-b]", "");
362 TEST (0, "[a-b]", "a");
363 TEST (0, "[a-b]", "b");
364 TEST (1, "[a-b]", "c");
365
366 TEST (1, "[a-c]", "");
367 TEST (0, "[a-c]", "a");
368 TEST (0, "[a-c]", "b");
369 TEST (0, "[a-c]", "c");
370 TEST (1, "[a-c]", "d");
371
372 TEST (1, "[a-ce]", "");
373 TEST (0, "[a-ce]", "a");
374 TEST (0, "[a-ce]", "b");
375 TEST (0, "[a-ce]", "c");
376 TEST (1, "[a-ce]", "d");
377 TEST (0, "[a-ce]", "e");
378 TEST (1, "[a-ce]", "f");
379
380 TEST (1, "[ac-e]", "");
381 TEST (0, "[ac-e]", "a");
382 TEST (1, "[ac-e]", "b");
383 TEST (0, "[ac-e]", "c");
384 TEST (0, "[ac-e]", "d");
385 TEST (0, "[ac-e]", "e");
386 TEST (1, "[ac-e]", "f");
387
388 TEST (1, "[ac-eg]", "");
389 TEST (0, "[ac-eg]", "a");
390 TEST (1, "[ac-eg]", "b");
391 TEST (0, "[ac-eg]", "c");
392 TEST (0, "[ac-eg]", "d");
393 TEST (0, "[ac-eg]", "e");
394 TEST (1, "[ac-eg]", "f");
395 TEST (0, "[ac-eg]", "g");
396
397 TEST (1, "[ac-egk-m]", "");
398 TEST (0, "[ac-egk-m]", "a");
399 TEST (1, "[ac-egk-m]", "b");
400 TEST (0, "[ac-egk-m]", "c");
401 TEST (0, "[ac-egk-m]", "d");
402 TEST (0, "[ac-egk-m]", "e");
403 TEST (1, "[ac-egk-m]", "f");
404 TEST (0, "[ac-egk-m]", "g");
405 TEST (1, "[ac-egk-m]", "h");
406 TEST (1, "[ac-egk-m]", "i");
407 TEST (1, "[ac-egk-m]", "j");
408 TEST (0, "[ac-egk-m]", "k");
409 TEST (0, "[ac-egk-m]", "l");
410 TEST (0, "[ac-egk-m]", "m");
411 TEST (1, "[ac-egk-m]", "n");
412
413 TEST (1, "[1-9][0-9]", "");
414 TEST (1, "[1-9][0-9]", "0");
415 TEST (1, "[1-9][0-9]", "1");
416 TEST (1, "[1-9][0-9]", "2");
417 TEST (1, "[1-9][0-9]", "00");
418 TEST (1, "[1-9][0-9]", "01");
419 TEST (0, "[1-9][0-9]", "10");
420 TEST (0, "[1-9][0-9]", "11");
421 TEST (0, "[1-9][0-9]", "12");
422 TEST (0, "[1-9][0-9]", "90");
423 TEST (0, "[1-9][0-9]", "99");
424 TEST (1, "[1-9][0-9]", "999");
425
426 TEST (1, "[1-9].[0-9]", "0.1");
427 TEST (0, "[1-9].[0-9]", "1.0");
428 TEST (1, "[1-9].[0-9]", "1.0.0");
429
430 // exercise mixed patterns
431 TEST (1, "[1-9].[0-9]*", "1.");
432 TEST (0, "[1-9].[0-9]*", "1.2");
433 TEST (0, "[1-9].[0-9]*", "1.23");
434 TEST (0, "[1-9].[0-9]*", "1.2x");
435 TEST (0, "[1-9]?[0-9]*", "1-2y");
436
437 TEST (1, "*-aix[1-9].[0-9]-xlc7.0.0.[0-9]", "ppc-aix4.3-xlc6.0");
438 TEST (1, "*-aix[1-9].[0-9]-xlc7.0.0.[0-9]", "ppc-aix5.2-xlc6.0");
439 TEST (0, "*-aix[1-9].[0-9]-xlc7.0.0.[0-9]", "ppc-aix4.3-xlc7.0.0.0");
440
441 // exercise incomplete patterns
442 TEST (1, "\\", "");
443 TEST (1, "\\", "a");
444 TEST (1, "\\", "\\");
445 TEST (1, "[", "");
446 TEST (1, "[", "a");
447 TEST (1, "[", "[");
448 TEST (1, "[a", "");
449 TEST (1, "[a", "[a");
450
451 // return 0 on success, 1 on failure
452 return !(0 == nerrors);
453}
#define TEST(exp, pat, str)
int main()
Definition 0.fnmatch.cpp:63
#define line
Definition 17.names.cpp:490
volatile int result
#define stderr
const char * str
Definition exec.cpp:170
_TEST_EXPORT int rw_fnmatch(const char *, const char *, int)
Definition fnmatch.cpp:127