1 /* psx-extend.c: Test POSIX extended regular expressions. */
9 /* Intervals can only match up to RE_DUP_MAX occurences of anything. */
10 char dup_max_plus_one[6];
11 sprintf (dup_max_plus_one, "%d", RE_DUP_MAX + 1);
14 printf ("\nStarting POSIX extended tests.\n");
15 t = posix_extended_test;
17 re_set_syntax (RE_SYNTAX_POSIX_MINIMAL_EXTENDED);
19 test_posix_generic ();
21 printf ("\nContinuing POSIX extended tests.\n");
23 /* Grouping tests that differ from basic's. */
25 test_should_match = true;
28 /* Valid use of special characters. */
29 test_match ("\\(a", "(a");
30 test_match ("a\\+", "a+");
31 test_match ("a\\?", "a?");
32 test_match ("\\{a", "{a");
33 test_match ("\\|a", "|a");
34 test_match ("a\\|b", "a|b");
35 test_match ("a\\|?", "a");
36 test_match ("a\\|?", "a|");
37 test_match ("a\\|*", "a");
38 test_match ("a\\|*", "a||");
39 test_match ("\\(*\\)", ")");
40 test_match ("\\(*\\)", "(()");
41 test_match ("a\\|+", "a|");
42 test_match ("a\\|+", "a||");
43 test_match ("\\(+\\)", "()");
44 test_match ("\\(+\\)", "(()");
45 test_match ("a\\||b", "a|");
46 test_match ("\\(?\\)", ")");
47 test_match ("\\(?\\)", "()");
49 test_match ("a+", "a");
50 test_match ("a+", "aa");
51 test_match ("a?", "");
52 test_match ("a?", "a");
54 /* Bracket expressions. */
55 test_match ("[(]", "(");
56 test_match ("[+]", "+");
57 test_match ("[?]", "?");
58 test_match ("[{]", "{");
59 test_match ("[|]", "|");
61 test_match ("(a+)*", "");
62 test_match ("(a+)*", "aa");
63 test_match ("(a?)*", "");
64 test_match ("(a?)*", "aa");
65 /* (No) back references. */
66 test_match ("(a)\\1", "a1");
67 /* Invalid as intervals,
68 but are valid patterns. */
70 test_match ("^{", "{");
71 test_match ("a|{", "{");
72 test_match ("({)", "{");
79 MATCH_SELF (concat ("a{", dup_max_plus_one));
80 MATCH_SELF (concat (concat ("a{", dup_max_plus_one), ","));
82 MATCH_SELF ("a{1,0}");
84 test_match ("[a{0,1}]", "}");
85 test_match ("a{1,3}{-1}", "aaa{-1}");
86 test_match (concat ("a{1,3}{", dup_max_plus_one),
87 concat ("aaa{", dup_max_plus_one));
88 test_match ("a{1,3}{2,1}", "aaa{2,1}");
89 test_match ("a{1,3}{1,2", "aaa{1,2");
90 /* Valid consecutive repetitions. */
91 test_match ("a*+", "a");
92 test_match ("a*?", "a");
93 test_match ("a++", "a");
94 test_match ("a+*", "a");
95 test_match ("a+?", "a");
96 test_match ("a??", "a");
97 test_match ("a?*", "a");
98 test_match ("a?+", "a");
100 test_match ("a{2}?", "");
101 test_match ("a{2}?", "aa");
102 test_match ("a{2}+", "aa");
103 test_match ("a{2}{2}", "aaaa");
105 test_match ("a{1}?*", "");
106 test_match ("a{1}?*", "aa");
108 test_match ("(a?){0,3}b", "aaab");
109 test_fastmap ("(a?){0,3}b", "ab", 0, 0);
110 test_match ("(a+){0,3}b", "b");
111 test_fastmap ("(a+){0,3}b", "ab", 0, 0);
112 test_match ("(a+){0,3}b", "ab");
113 test_fastmap ("(a+){0,3}b", "ab", 0, 0);
114 test_match ("(a+){1,3}b", "aaab");
115 test_match ("(a?){1,3}b", "aaab");
117 test_match ("\\\\{1}", "\\"); /* Extended only. */
119 test_match ("(a?)?", "a");
120 test_match ("(a?b)?c", "abc");
121 test_match ("(a+)*b", "b");
123 test_match ("a|b", "a");
124 test_match ("a|b", "b");
125 test_fastmap ("a|b", "ab", 0, 0);
127 TEST_SEARCH ("a|b", "cb", 0, 2);
128 TEST_SEARCH ("a|b", "cb", 0, 2);
130 test_match ("(a|b|c)", "a");
131 test_match ("(a|b|c)", "b");
132 test_match ("(a|b|c)", "c");
134 test_match ("(a|b|c)*", "abccba");
136 test_match ("(a(b*))|c", "a"); /* xx do registers. */
137 test_match ("(a(b*))|c", "ab");
138 test_match ("(a(b*))|c", "c");
140 test_fastmap ("(a+?*|b)", "ab", 0, 0);
141 test_match ("(a+?*|b)", "b");
142 TEST_REGISTERS ("(a+?*|b)", "b", 0, 1, 0, 1, -1, -1);
144 test_fastmap ("(a+?*|b)*", "ab", 0, 0);
145 test_match ("(a+?*|b)*", "bb");
146 TEST_REGISTERS ("(a+?*|b)*", "bb", 0, 2, 1, 2, -1, -1);
148 test_fastmap ("(a*|b)*", "ab", 0, 0);
149 test_match ("(a*|b)*", "bb");
150 TEST_REGISTERS ("(a*|b)*", "bb", 0, 2, 1, 2, -1, -1);
152 test_fastmap ("((a*)|b)*", "ab", 0, 0);
153 test_match ("((a*)|b)*", "bb");
154 TEST_REGISTERS ("((a*)|b)*", "bb", 0, 2, 1, 2, 1, 1);
156 test_fastmap ("(a{0,}|b)*", "ab", 0, 0);
157 test_match ("(a{0,}|b)*", "bb");
158 TEST_REGISTERS ("(a{0,}|b)*", "bb", 0, 2, 1, 2, -1, -1);
160 test_fastmap ("((a{0,})|b)*", "ab", 0, 0);
161 test_match ("((a{0,})|b)*", "bb");
162 TEST_REGISTERS ("((a{0,})|b)*", "bb", 0, 2, 1, 2, 1, 1);
165 test_fastmap ("(a+?*|b)c", "abc", 0, 0);
166 test_match ("(a+?*|b)c", "bc");
167 TEST_REGISTERS ("(a+?*|b)c", "bc", 0, 2, 0, 1, -1, -1);
169 test_fastmap ("(a+?*|b)*c", "abc", 0, 0);
170 test_match ("(a+?*|b)*c", "bbc");
171 TEST_REGISTERS ("(a+?*|b)*c", "bbc", 0, 3, 1, 2, -1, -1);
173 test_fastmap ("(a*|b)*c", "abc", 0, 0);
174 test_match ("(a*|b)*c", "bbc");
175 TEST_REGISTERS ("(a*|b)*c", "bbc", 0, 3, 1, 2, -1, -1);
177 test_fastmap ("((a*)|b)*c", "abc", 0, 0);
178 test_match ("((a*)|b)*c", "bbc");
179 TEST_REGISTERS ("((a*)|b)*c", "bbc", 0, 3, 1, 2, 1, 1);
181 test_fastmap ("(a{0,}|b)*c", "abc", 0, 0);
182 test_match ("(a{0,}|b)*c", "bbc");
183 TEST_REGISTERS ("(a{0,}|b)*c", "bbc", 0, 3, 1, 2, -1, -1);
185 test_fastmap ("((a{0,})|b)*c", "abc", 0, 0);
186 test_match ("((a{0,})|b)*c", "bbc");
187 TEST_REGISTERS ("((a{0,})|b)*c", "bbc", 0, 3, 1, 2, 1, 1);
190 test_fastmap ("((a{0,}\\b\\<)|b)", "ab", 0, 0);
191 test_match ("((a{0,}\\b\\<)|b)", "b");
192 TEST_REGISTERS ("((a{0,}\\b\\<)|b)", "b",
195 test_fastmap ("((a{0,}\\b\\<)|b)*", "ab", 0, 0);
196 test_match ("((a{0,}\\b\\<)|b)*", "b");
197 TEST_REGISTERS ("((a{0,}\\b\\<)|b)*", "b",
200 test_fastmap ("((a+?*{0,1}\\b\\<)|b)", "ab", 0, 0);
201 test_match ("((a+?*{0,1}\\b\\<)|b)", "b");
202 TEST_REGISTERS ("((a+?*{0,1}\\b\\<)|b)", "b",
205 test_fastmap ("((a+?*{0,2}\\b\\<)|b)", "ab", 0, 0);
206 test_match ("((a+?*{0,2}\\b\\<)|b)", "b");
207 TEST_REGISTERS ("((a+?*{0,2}\\b\\<)|b)", "b",
211 test_fastmap ("((a+?*{0,4095}\\b\\<)|b)", "ab", 0, 0);
212 test_match ("((a+?*{0,4095}\\b\\<)|b)", "b");
213 TEST_REGISTERS ("((a+?*{0,4095}\\b\\<)|b)", "b",
216 test_fastmap ("((a+?*{0,5119}\\b\\<)|b)", "ab", 0, 0);
217 test_match ("((a+?*{0,5119}\\b\\<)|b)", "b");
218 TEST_REGISTERS ("((a+?*{0,5119}\\b\\<)|b)", "b",
221 test_fastmap ("((a+?*{0,6143}\\b\\<)|b)", "ab", 0, 0);
222 test_match ("((a+?*{0,6143}\\b\\<)|b)", "b");
223 TEST_REGISTERS ("((a+?*{0,6143}\\b\\<)|b)", "b",
226 test_fastmap ("((a+?*{0,8191}\\b\\<)|b)", "ab", 0, 0);
227 test_match ("((a+?*{0,8191}\\b\\<)|b)", "b");
228 TEST_REGISTERS ("((a+?*{0,8191}\\b\\<)|b)", "b",
231 test_fastmap ("((a+?*{0,16383}\\b\\<)|b)", "ab", 0, 0);
232 test_match ("((a+?*{0,16383}\\b\\<)|b)", "b");
233 TEST_REGISTERS ("((a+?*{0,16383}\\b\\<)|b)", "b",
237 test_fastmap ("((a+?*{0,}\\b\\<)|b)", "ab", 0, 0);
238 test_match ("((a+?*{0,}\\b\\<)|b)", "b");
239 TEST_REGISTERS ("((a+?*{0,}\\b\\<)|b)", "b",
242 test_fastmap ("((a+?*{0,}\\b\\<)|b)*", "ab", 0, 0);
243 test_match ("((a+?*{0,}\\b\\<)|b)*", "b");
244 TEST_REGISTERS ("((a+?*{0,}\\b\\<)|b)*", "b",
247 test_fastmap ("((a+?*{0,}\\b\\<)|b)*", "ab", 0, 0);
248 test_match ("((a+?*{0,}\\b\\<)|b)*", "bb");
249 TEST_REGISTERS ("((a+?*{0,}\\b\\<)|b)*", "bb",
253 /* `*' after group. */
254 test_match ("(a*|b*)*c", "c");
255 TEST_REGISTERS ("(a*|b*)*c", "c", 0, 1, 0, 0, -1, -1);
257 test_match ("(a*|b*)*c", "ac");
258 TEST_REGISTERS ("(a*|b*)*c", "ac", 0, 2, 0, 1, -1, -1);
260 test_match ("(a*|b*)*c", "aac");
261 TEST_REGISTERS ("(a*|b*)*c", "aac", 0, 3, 0, 2, -1, -1);
263 test_match ("(a*|b*)*c", "bbc");
264 TEST_REGISTERS ("(a*|b*)*c", "bbc", 0, 3, 0, 2, -1, -1);
266 test_match ("(a*|b*)*c", "abc");
267 TEST_REGISTERS ("(a*|b*)*c", "abc", 0, 3, 1, 2, -1, -1);
269 /* No `*' after group. */
270 test_match ("(a*|b*)c", "c");
271 TEST_REGISTERS ("(a*|b*)c", "c", 0, 1, 0, 0, -1, -1);
273 test_match ("(a*|b*)c", "ac");
274 TEST_REGISTERS ("(a*|b*)c", "ac", 0, 2, 0, 1, -1, -1);
276 test_match ("(a*|b*)c", "bc");
277 TEST_REGISTERS ("(a*|b*)c", "bc", 0, 2, 0, 1, -1, -1);
279 test_match ("(a*|b*)c", "aac");
280 TEST_REGISTERS ("(a*|b*)c", "aac", 0, 3, 0, 2, -1, -1);
282 /* Same as above, but with no `*'s in alternatives.
284 test_match ("(a|b)*c", "c"); /* `*' after group. */
285 TEST_REGISTERS ("(a|b)*c", "c", 0, 1, -1, -1, -1, -1);
287 test_match ("(a|b)*c", "ac");
288 TEST_REGISTERS ("(a|b)*c", "ac", 0, 2, 0, 1, -1, -1);
290 test_match ("(a|b)*c", "bc");
291 TEST_REGISTERS ("(a|b)*c", "bc", 0, 2, 0, 1, -1, -1);
293 test_match ("(a|b)*c", "abc");
294 TEST_REGISTERS ("(a|b)*c", "abc", 0, 3, 1, 2, -1, -1);
297 test_match ("(a*|b*)c", "bbc");
298 TEST_REGISTERS ("(a*|b*)c", "bbc", 0, 3, 0, 2, -1, -1);
300 /* Complicated second alternative. */
302 test_match ("(a*|(b*)*)*c", "bc");
303 TEST_REGISTERS ("(a*|(b*)*)*c", "bc", 0, 2, 0, 1, 0, 1);
305 test_match ("(a*|(b*|c*)*)*d", "bd");
306 TEST_REGISTERS ("(a*|(b*|c*)*)*d", "bd", 0, 2, 0, 1, 0, 1);
308 test_match ("(a*|(b*|c*)*)*d", "bbd");
309 TEST_REGISTERS ("(a*|(b*|c*)*)*d", "bbd", 0, 3, 0, 2, 0, 2);
311 test_match ("(a*|(b*|c*)*)*d", "cd");
312 TEST_REGISTERS ("(a*|(b*|c*)*)*d", "cd", 0, 2, 0, 1, 0, 1);
314 test_match ("(a*|(b*|c*)*)*d", "ccd");
315 TEST_REGISTERS ("(a*|(b*|c*)*)*d", "ccd", 0, 3, 0, 2, 0, 2);
317 test_match ("(a*|b*|c*)*d", "aad");
318 TEST_REGISTERS ("(a*|b*|c*)*d", "aad", 0, 3, 0, 2, 0, 2);
320 test_match ("(a*|b*|c*)*d", "bbd");
321 TEST_REGISTERS ("(a*|b*|c*)*d", "bbd", 0, 3, 0, 2, 0, 2);
323 test_match ("(a*|b*|c*)*d", "ccd");
324 TEST_REGISTERS ("(a*|b*|c*)*d", "ccd", 0, 3, 0, 2, 0, 2);
326 /* Valid anchoring. */
327 valid_pattern ("a^");
328 valid_pattern ("a^b");
329 valid_pattern ("$a");
330 valid_pattern ("a$b");
331 valid_pattern ("foo^bar");
332 valid_pattern ("foo$bar");
333 valid_pattern ("(^)");
334 valid_pattern ("($)");
335 valid_pattern ("(^$)");
337 /* These are the same (but valid) as those (invalid) in other_test.c. */
339 ("(((((((((((((((((((((((((((((((((a^)))))))))))))))))))))))))))))))))");
341 ("((((((((((((((((((((((((((((((((($a)))))))))))))))))))))))))))))))))");
342 valid_pattern ("\\(^a\\)");
343 valid_pattern ("a\\|^b");
344 valid_pattern ("\\w^a");
345 valid_pattern ("\\W^a");
346 valid_pattern ("(a^)");
347 valid_pattern ("($a)");
348 valid_pattern ("a(^b)");
349 valid_pattern ("a$(b)");
350 valid_pattern ("(a)^b");
351 valid_pattern ("(a)$b");
352 valid_pattern ("(a)(^b)");
353 valid_pattern ("(a$)(b)");
354 valid_pattern ("(a|b)^c");
355 valid_pattern ("(a|b)$c");
356 valid_pattern ("(a$|b)c");
357 valid_pattern ("(a|b$)c");
358 valid_pattern ("a(b|^c)");
359 valid_pattern ("a(^b|c)");
360 valid_pattern ("a$(b|c)");
361 valid_pattern ("(a)(^b|c)");
362 valid_pattern ("(a)(b|^c)");
363 valid_pattern ("(b$|c)(a)");
364 valid_pattern ("(b|c$)(a)");
365 valid_pattern ("(a(^b|c))");
366 valid_pattern ("(a(b|^c))");
367 valid_pattern ("((b$|c)a)");
368 valid_pattern ("((b|c$)a)");
369 valid_pattern ("((^a|^b)^c)");
370 valid_pattern ("(c$(a$|b$))");
371 valid_pattern ("((^a|^b)^c)");
372 valid_pattern ("((a$|b$)c)");
373 valid_pattern ("(c$(a$|b$))");
374 valid_pattern ("((^a|^b)|^c)^d");
375 valid_pattern ("((a$|b$)|c$)d$");
376 valid_pattern ("d$(c$|(a$|b$))");
377 valid_pattern ("((^a|^b)|^c)(^d)");
378 valid_pattern ("((a$|b$)|c$)(d$)");
379 valid_pattern ("(d$)((a$|b$)|c$)");
380 valid_pattern ("((^a|^b)|^c)((^d))");
381 valid_pattern ("((a$|b$)|c$)((d$))");
382 valid_pattern ("((d$))((a$|b$)|c$)");
383 valid_pattern ("(((^a|^b))c|^d)^e");
384 valid_pattern ("(((a$|b$))c|d$)$e$");
385 valid_pattern ("e$(d$|c((a$|b$)))");
386 valid_pattern ("(^a)((^b))");
387 valid_pattern ("(a$)((b$))");
388 valid_pattern ("((^a))(^b)");
389 valid_pattern ("((a$))(b$)");
390 valid_pattern ("((^a))((^b))");
391 valid_pattern ("((a$))((b$))");
392 valid_pattern ("((^a)^b)");
393 valid_pattern ("((a$)b$)");
394 valid_pattern ("(b$(a$))");
395 valid_pattern ("(((^a)b)^c)");
396 valid_pattern ("(((a$)b)c$)");
397 valid_pattern ("(c$(b(a$)))");
398 valid_pattern ("(((^a)b)c)^d");
399 valid_pattern ("(((a$)b)c)d$");
400 valid_pattern ("d$(c(b(a$)))");
401 valid_pattern (".^a");
402 valid_pattern ("a$.");
403 valid_pattern ("[a]^b");
404 valid_pattern ("b$[a]");
405 valid_pattern ("\\(a$\\)");
406 valid_pattern ("a$\\|b");
407 valid_pattern ("(^a|^b)^c");
408 valid_pattern ("c$(a$|b$)");
409 valid_pattern ("(^a|^b)^|^c");
410 valid_pattern ("(a$|b$)$|$c$");
411 valid_pattern ("(a$|$b$)$|c$");
412 valid_pattern ("($a$|b$)$|c$");
413 valid_pattern ("$(a$|b$)$|c$");
414 valid_pattern ("^c|d(^a|^b)");
415 valid_pattern ("(^a|^b)|d^c");
416 valid_pattern ("c$|(a$|b$)d");
417 valid_pattern ("c$d|(a$|b$)");
418 valid_pattern ("c(^a|^b)|^d");
419 valid_pattern ("(a$|b$)c|d$");
420 valid_pattern ("c(((^a|^b))|^d)e");
421 valid_pattern ("(c((^a|^b))|^d)e");
422 valid_pattern ("((c(^a|^b))|^d)e");
423 valid_pattern ("(((^a|^b))|c^d)e");
424 valid_pattern ("(((^a|^b))|^d)^e");
425 valid_pattern ("(c$((a|b))|d)e$");
426 valid_pattern ("(c((a$|b$))|d)e$");
427 valid_pattern ("(c((a|b)$)|d)e$");
428 valid_pattern ("(c((a|b))|d$)e$");
429 valid_pattern ("^d(^c|e((a|b)))");
430 valid_pattern ("^d(c|^e((a|b)))");
431 valid_pattern ("^d(c|e(^(a|b)))");
432 valid_pattern ("^d(c|e((^a|b)))");
433 valid_pattern ("^d(c|e((a|^b)))");
434 valid_pattern ("^d(c|e((a|b^)))");
435 valid_pattern ("^d(c|e((a|b)^))");
436 valid_pattern ("^d(c|e((a|b))^)");
437 valid_pattern ("^d(c|e((a|b)))^");
438 valid_pattern ("d$(c$|e((a$|b$)))");
439 valid_pattern ("d(c$|e$((a$|b$)))");
440 valid_pattern ("(((^a|^b))^c)|^de");
441 valid_pattern ("(((^a|^b))c)|^d^e");
442 valid_pattern ("(((a$|b))c$)|de$");
443 valid_pattern ("(((a|b$))c$)|de$");
444 valid_pattern ("(((a|b))c$)|d$e$");
445 valid_pattern ("^d^e|^(c((a|b)))");
446 valid_pattern ("^de|^(c^((a|b)))");
447 valid_pattern ("^de|^(c(^(a|b)))");
448 valid_pattern ("^de|^(c((^a|b)))");
449 valid_pattern ("^de|^(c((a|^b)))");
450 valid_pattern ("^de|(^c(^(a|b)))");
451 valid_pattern ("^de|(^c((^a|b)))");
452 valid_pattern ("^de|(^c((a|^b)))");
453 valid_pattern ("de$|(c($(a|b)$))");
454 valid_pattern ("de$|(c$((a|b)$))");
455 valid_pattern ("de$|($c((a|b)$))");
456 valid_pattern ("de$|$(c((a|b)$))");
457 valid_pattern ("de$|(c($(a|b))$)");
458 valid_pattern ("de$|(c$((a|b))$)");
459 valid_pattern ("de$|$(c((a|b))$)");
460 valid_pattern ("de$|(c($(a|b)))$");
461 valid_pattern ("de$|(c$((a|b)))$");
462 valid_pattern ("de$|($c((a|b)))$");
463 valid_pattern ("de$|$(c((a|b)))$");
464 valid_pattern ("^a(^b|c)|^d");
465 valid_pattern ("^a(b|^c)|^d");
466 valid_pattern ("^a(b|c^)|^d");
467 valid_pattern ("^a(b|c)^|^d");
468 valid_pattern ("a$(b$|c$)|d$");
469 valid_pattern ("^d|^a(^b|c)");
470 valid_pattern ("^d|^a(b|^c)");
471 valid_pattern ("d$|a$(b$|c$)");
472 valid_pattern ("^d|^(b|c)^a");
473 valid_pattern ("d$|(b|c$)a$");
474 valid_pattern ("d$|(b$|c)a$");
475 valid_pattern ("^(a)^(b|c)|^d");
476 valid_pattern ("^(a)(^b|c)|^d");
477 valid_pattern ("^(a)(b|^c)|^d");
478 valid_pattern ("(a)$(b|c)$|d$");
479 valid_pattern ("(a$)(b|c)$|d$");
480 valid_pattern ("(^a)(^b|c)|^d");
481 valid_pattern ("(^a)(b|^c)|^d");
482 valid_pattern ("(a)$(b$|c$)|d$");
483 valid_pattern ("(a$)(b$|c$)|d$");
484 valid_pattern ("^d|^(b|c)^(a)");
485 valid_pattern ("^d|^(b|c)(^a)");
486 valid_pattern ("d$|(b|c$)(a)$");
487 valid_pattern ("d$|(b$|c)(a)$");
488 valid_pattern ("^d|(^b|^c)^(a)");
489 valid_pattern ("^d|(^b|^c)(^a)");
490 valid_pattern ("d$|(b|c)$(a$)");
491 valid_pattern ("d$|(b|c$)(a$)");
492 valid_pattern ("d$|(b$|c)(a$)");
493 valid_pattern ("^d|^(a)^(b|c)");
494 valid_pattern ("^d|^(a)(^b|c)");
495 valid_pattern ("^d|^(a)(b|^c)");
496 valid_pattern ("^d|(^a)^(b|c)");
497 valid_pattern ("^d|(^a)(^b|c)");
498 valid_pattern ("^d|(^a)(b|^c)");
499 valid_pattern ("d$|(a)$(b$|c$)");
500 valid_pattern ("d$|(a$)(b$|c$)");
501 valid_pattern ("((e^a|^b)|^c)|^d");
502 valid_pattern ("((^a|e^b)|^c)|^d");
503 valid_pattern ("((^a|^b)|e^c)|^d");
504 valid_pattern ("((^a|^b)|^c)|e^d");
505 valid_pattern ("d$e|(c$|(a$|b$))");
506 valid_pattern ("d$|(c$e|(a$|b$))");
507 valid_pattern ("d$|(c$|(a$e|b$))");
508 valid_pattern ("d$|(c$|(a$|b$e))");
509 valid_pattern ("d$|(c$|(a$|b$)e)");
510 valid_pattern ("d$|(c$|(a$|b$))e");
511 valid_pattern ("(a|b)^|c");
512 valid_pattern ("(a|b)|c^");
513 valid_pattern ("$(a|b)|c");
514 valid_pattern ("(a|b)|$c");
515 valid_pattern ("(a^|^b)|^c");
516 valid_pattern ("(^a|b^)|^c");
517 valid_pattern ("(^a|^b)|c^");
518 valid_pattern ("($a|b$)|c$");
519 valid_pattern ("(a$|$b)|c$");
520 valid_pattern ("(a$|b$)|$c");
521 valid_pattern ("c^|(^a|^b)");
522 valid_pattern ("^c|(a^|^b)");
523 valid_pattern ("^c|(^a|b^)");
524 valid_pattern ("$c|(a$|b$)");
525 valid_pattern ("c$|($a|b$)");
526 valid_pattern ("c$|(a$|$b)");
527 valid_pattern ("c^|^(a|b)");
528 valid_pattern ("^c|(a|b)^");
529 valid_pattern ("$c|(a|b)$");
530 valid_pattern ("c$|$(a|b)");
531 valid_pattern ("(a^|^b)c|^d");
532 valid_pattern ("(^a|b^)c|^d");
533 valid_pattern ("(^a|^b)c|d^");
534 valid_pattern ("(^a|^b)^c|^d");
535 valid_pattern ("(a|b)c$|$d");
536 valid_pattern ("(a|b)$c$|d$");
537 valid_pattern ("(a|b)$c$|d$");
538 valid_pattern ("(a|b$)c$|d$");
539 valid_pattern ("(a$|b)c$|d$");
540 valid_pattern ("($a|b)c$|d$");
541 valid_pattern ("$(a|b)c$|d$");
542 valid_pattern ("^d|^c^(a|b)");
543 valid_pattern ("^d|^c(^a|b)");
544 valid_pattern ("^d|^c(a|^b)");
545 valid_pattern ("^d|^c(a|b^)");
546 valid_pattern ("^d|^c(a|b)^");
547 valid_pattern ("$d|c(a$|b$)");
548 valid_pattern ("d$|c($a$|b$)");
549 valid_pattern ("d$|c$(a$|b$)");
550 valid_pattern ("d$|$c(a$|b$)");
552 valid_pattern ("(((a^|^b))c|^d)e");
553 valid_pattern ("(((^a|b^))c|^d)e");
554 valid_pattern ("(((^a|^b))^c|^d)e");
555 valid_pattern ("((^(a|b))c|d^)e");
556 valid_pattern ("(^((a|b))c|^d)^e");
557 valid_pattern ("(^((a|b)^)c|^d)e");
558 valid_pattern ("(^((a^|b))c|^d)e");
559 valid_pattern ("(^((a|b^))c|^d)e");
560 valid_pattern ("(^((a|b)^)c|^d)e");
561 valid_pattern ("(^((a|b))^c|^d)e");
562 valid_pattern ("(^((a|b))c^|^d)e");
563 valid_pattern ("(^((a|b))c|^d^)e");
564 valid_pattern ("(^((a|b))c|^d)^e");
565 valid_pattern ("(((a|b))c|d)$e$");
566 valid_pattern ("(((a|b))c|d$)e$");
567 valid_pattern ("(((a|b))c|$d)e$");
568 valid_pattern ("(((a|b))c$|d)e$");
569 valid_pattern ("(((a|b))$c|d)e$");
570 valid_pattern ("(((a|b)$)c|d)e$");
571 valid_pattern ("(((a|b$))c|d)e$");
572 valid_pattern ("(((a$|b))c|d)e$");
573 valid_pattern ("((($a|b))c|d)e$");
574 valid_pattern ("(($(a|b))c|d)e$");
575 valid_pattern ("($((a|b))c|d)e$");
576 valid_pattern ("$(((a|b))c|d)e$");
577 valid_pattern ("(^((a|b)^)c|^d)e");
578 valid_pattern ("(^((a|b))^c|^d)e");
579 valid_pattern ("(^((a|b))c|^d^)e");
580 valid_pattern ("(^((a|b))c|^d)^e");
582 valid_pattern ("^e(^d|c((a|b)))");
583 valid_pattern ("^e(d|^c((a|b)))");
584 valid_pattern ("^e(d|c^((a|b)))");
585 valid_pattern ("^e(d|c(^(a|b)))");
586 valid_pattern ("^e(d|c((^a|b)))");
587 valid_pattern ("^e(d|c((a|^b)))");
588 valid_pattern ("^e(d|c((a|b^)))");
589 valid_pattern ("^e(d|c((a|b)^))");
590 valid_pattern ("^e(d|c((a|b))^)");
591 valid_pattern ("^e(d|c((a|b)))^");
592 valid_pattern ("e$(d$|c((a$|b$)))");
593 valid_pattern ("e(d$|c$((a$|b$)))");
594 valid_pattern ("e(d$|c($(a$|b$)))");
595 valid_pattern ("e(d$|c(($a$|b$)))");
596 valid_pattern ("e$(d$|c((a|b)$))");
597 valid_pattern ("e($d$|c((a|b)$))");
598 valid_pattern ("e(d$|$c((a|b)$))");
599 valid_pattern ("e(d$|c$((a|b)$))");
600 valid_pattern ("e(d$|c($(a|b)$))");
601 valid_pattern ("e(d$|c(($a|b)$))");
602 valid_pattern ("e(d$|c((a|$b)$))");
603 valid_pattern ("e(d$|c((a$|$b$)))");
605 valid_pattern ("e$(d$|c((a|b))$)");
606 valid_pattern ("e($d$|c((a|b))$)");
607 valid_pattern ("e(d$|$c((a|b))$)");
608 valid_pattern ("e(d$|c$((a|b))$)");
609 valid_pattern ("e(d$|c($(a|b))$)");
610 valid_pattern ("e(d$|c(($a|b))$)");
611 valid_pattern ("e(d$|c((a|$b))$)");
612 valid_pattern ("e$(d$|c((a|b)))$");
613 valid_pattern ("e($d$|c((a|b)))$");
614 valid_pattern ("e(d$|$c((a|b)))$");
615 valid_pattern ("e(d$|c$((a|b)))$");
616 valid_pattern ("e(d$|c($(a|b)))$");
617 valid_pattern ("e(d$|c(($a|b)))$");
618 valid_pattern ("e(d$|c((a|$b)))$");
619 valid_pattern ("(((^a|^b)^)c)|^de");
620 valid_pattern ("(((^a|^b))^c)|^de");
621 valid_pattern ("(((^a|^b))c)^|^de");
622 valid_pattern ("$(((a|b))c$)|de$");
623 valid_pattern ("($((a|b))c$)|de$");
624 valid_pattern ("(($(a|b))c$)|de$");
625 valid_pattern ("((($a|b))c$)|de$");
626 valid_pattern ("(((a|$b))c$)|de$");
627 valid_pattern ("(((a|b)$)c$)|de$");
628 valid_pattern ("(((a|b))$c$)|de$");
629 valid_pattern ("$(((a|b))c)$|de$");
630 valid_pattern ("($((a|b))c)$|de$");
631 valid_pattern ("(($(a|b))c)$|de$");
632 valid_pattern ("((($a|b))c)$|de$");
633 valid_pattern ("(((a|$b))c)$|de$");
634 valid_pattern ("(((a|b)$)c)$|de$");
635 valid_pattern ("(((a|b))$c)$|de$");
636 valid_pattern ("^ed|^(c((a|b)))^");
637 valid_pattern ("^ed|^(c((a|b))^)");
638 valid_pattern ("^ed|^(c((a|b)^))");
639 valid_pattern ("^ed|^(c((a|b^)))");
640 valid_pattern ("^ed|^(c((a^|b)))");
641 valid_pattern ("^ed|^(c((^a|b)))");
642 valid_pattern ("^ed|^(c(^(a|b)))");
643 valid_pattern ("^ed|^(c^((a|b)))");
644 valid_pattern ("^ed|(^c((a|b)))^");
645 valid_pattern ("^ed|(^c((a|b))^)");
646 valid_pattern ("^ed|(^c((a|b)^))");
647 valid_pattern ("^ed|(^c((a|b^)))");
648 valid_pattern ("^ed|(^c((a|^b)))");
649 valid_pattern ("^ed|(^c((a^|b)))");
650 valid_pattern ("^ed|(^c((^a|b)))");
651 valid_pattern ("^ed|(^c(^(a|b)))");
652 valid_pattern ("^ed|(^c(^(a|b)))");
653 valid_pattern ("^ed|(^c^((a|b)))");
654 valid_pattern ("ed$|$(c((a|b)))$");
655 valid_pattern ("ed$|($c((a|b)))$");
656 valid_pattern ("ed$|(c$((a|b)))$");
657 valid_pattern ("ed$|(c($(a|b)))$");
658 valid_pattern ("ed$|(c(($a|b)))$");
659 valid_pattern ("ed$|(c((a|$b)))$");
660 valid_pattern ("ed$|$(c((a|b))$)");
661 valid_pattern ("ed$|($c((a|b))$)");
662 valid_pattern ("ed$|(c$((a|b))$)");
663 valid_pattern ("ed$|(c($(a|b))$)");
664 valid_pattern ("ed$|(c(($a|b))$)");
665 valid_pattern ("ed$|(c((a|$b))$)");
666 valid_pattern ("ed$|$(c((a|b)$))");
667 valid_pattern ("ed$|($c((a|b)$))");
668 valid_pattern ("ed$|(c$((a|b)$))");
669 valid_pattern ("ed$|(c($(a|b)$))");
670 valid_pattern ("ed$|(c(($a|b)$))");
671 valid_pattern ("ed$|(c((a|$b)$))");
672 valid_pattern ("ed$|$(c((a|b)$))");
673 valid_pattern ("ed$|($c((a|b)$))");
674 valid_pattern ("ed$|(c$((a|b)$))");
675 valid_pattern ("ed$|(c($(a|b)$))");
676 valid_pattern ("ed$|(c(($a|b)$))");
677 valid_pattern ("ed$|(c((a|$b)$))");
678 valid_pattern ("ed$|$(c((a|b)$))");
679 valid_pattern ("ed$|($c((a|b)$))");
680 valid_pattern ("ed$|(c$((a|b)$))");
681 valid_pattern ("ed$|(c($(a|b)$))");
682 valid_pattern ("ed$|(c(($a|b)$))");
683 valid_pattern ("ed$|(c((a|$b)$))");
684 valid_pattern ("ed$|$(c((a|b)$))");
685 valid_pattern ("ed$|($c((a|b)$))");
686 valid_pattern ("ed$|(c$((a|b)$))");
687 valid_pattern ("ed$|(c($(a|b)$))");
688 valid_pattern ("ed$|(c(($a|b)$))");
689 valid_pattern ("ed$|(c((a|$b)$))");
690 valid_pattern ("ed$|$(c((a|b)$))");
691 valid_pattern ("ed$|($c((a|b)$))");
692 valid_pattern ("ed$|(c$((a|b)$))");
693 valid_pattern ("ed$|(c($(a|b)$))");
694 valid_pattern ("ed$|(c(($a|b)$))");
695 valid_pattern ("ed$|(c((a|$b)$))");
696 valid_pattern ("ed$|$(c((a$|b$)))");
697 valid_pattern ("ed$|($c((a$|b$)))");
698 valid_pattern ("ed$|(c$((a$|b$)))");
699 valid_pattern ("ed$|(c($(a$|b$)))");
700 valid_pattern ("ed$|(c(($a$|b$)))");
701 valid_pattern ("ed$|(c((a$|$b$)))");
702 valid_pattern ("^a(b|c)^|^d");
703 valid_pattern ("^a(b|c^)|^d");
704 valid_pattern ("^a(b|^c)|^d");
705 valid_pattern ("^a(b^|c)|^d");
706 valid_pattern ("^a(^b|c)|^d");
707 valid_pattern ("^a^(b|c)|^d");
708 valid_pattern ("$a(b$|c$)|d$");
709 valid_pattern ("a$(b$|c$)|d$");
710 valid_pattern ("a($b$|c$)|d$");
711 valid_pattern ("a(b$|$c$)|d$");
712 valid_pattern ("a(b$|c$)|$d$");
713 valid_pattern ("^(a^)(b|c)|^d");
714 valid_pattern ("^(a)^(b|c)|^d");
715 valid_pattern ("^(a)(^b|c)|^d");
716 valid_pattern ("^(a)(b^|c)|^d");
717 valid_pattern ("^(a)(b|^c)|^d");
718 valid_pattern ("^(a)(b|c^)|^d");
719 valid_pattern ("^(a)(b|c)^|^d");
720 valid_pattern ("(^a^)(b|c)|^d");
721 valid_pattern ("(^a)^(b|c)|^d");
722 valid_pattern ("(^a)(^b|c)|^d");
723 valid_pattern ("(^a)(b^|c)|^d");
724 valid_pattern ("(^a)(b|^c)|^d");
725 valid_pattern ("(^a)(b|c^)|^d");
726 valid_pattern ("(^a)(b|c)^|^d");
728 valid_pattern ("(a)(b$|c$)d$");
729 valid_pattern ("(a)(b|$c)$|d$");
730 valid_pattern ("(a)($b|c)$|d$");
731 valid_pattern ("(a)$(b|c)$|d$");
732 valid_pattern ("(a$)(b|c)$|d$");
733 valid_pattern ("($a)(b|c)$|d$");
734 valid_pattern ("$(a)(b|c)$|d$");
735 valid_pattern ("(b|c)($a)$|d$");
736 valid_pattern ("(b|c)$(a)$|d$");
737 valid_pattern ("(b|c$)(a)$|d$");
738 valid_pattern ("(b|$c)(a)$|d$");
739 valid_pattern ("(b$|c)(a)$|d$");
740 valid_pattern ("($b|c)(a)$|d$");
741 valid_pattern ("$(b|c)(a)$|d$");
742 valid_pattern ("(b|c)($a$)|d$");
743 valid_pattern ("(b|c)$(a$)|d$");
744 valid_pattern ("(b|c$)(a$)|d$");
745 valid_pattern ("(b|$c)(a$)|d$");
746 valid_pattern ("(b$|c)(a$)|d$");
747 valid_pattern ("($b|c)(a$)|d$");
748 valid_pattern ("$(b|c)(a$)|d$");
749 valid_pattern ("(a)$(b$|c$)|d$");
750 valid_pattern ("(a$)(b$|c$)|d$");
751 valid_pattern ("($a)(b$|c$)|d$");
752 valid_pattern ("$(a)(b$|c$)|d$");
753 valid_pattern ("^d|^(b^|c)(a)");
754 valid_pattern ("^d|^(b|c^)(a)");
755 valid_pattern ("^d|^(b|c)^(a)");
756 valid_pattern ("^d|^(b|c)(^a)");
757 valid_pattern ("^d|^(b|c)(a^)");
758 valid_pattern ("^d|^(b|c)(a)^");
759 valid_pattern ("^d|(^b|^c^)(a)");
760 valid_pattern ("^d|(^b|^c)^(a)");
761 valid_pattern ("^d|(^b|^c)(^a)");
762 valid_pattern ("^d|(^b|^c)(a^)");
763 valid_pattern ("^d|(^b|^c)(a)^");
764 valid_pattern ("d$|(b|c)($a$)");
765 valid_pattern ("d$|(b|c)$(a$)");
766 valid_pattern ("d$|(b|c$)(a$)");
767 valid_pattern ("d$|(b$|c)(a$)");
768 valid_pattern ("d$|($b|c)(a$)");
769 valid_pattern ("d$|$(b|c)(a$)");
770 valid_pattern ("d$|(b|c)($a)$");
771 valid_pattern ("d$|(b|c)$(a)$");
772 valid_pattern ("d$|(b|c$)(a)$");
773 valid_pattern ("d$|(b$|c)(a)$");
774 valid_pattern ("d$|($b|c)(a)$");
775 valid_pattern ("d$|$(b|c)(a)$");
776 valid_pattern ("^d|^(a^)(b|c)");
777 valid_pattern ("^d|^(a)^(b|c)");
778 valid_pattern ("^d|^(a)(^b|c)");
779 valid_pattern ("^d|^(a)(b^|c)");
780 valid_pattern ("^d|^(a)(b|^c)");
781 valid_pattern ("^d|^(a)(b|c^)");
782 valid_pattern ("^d|^(a)(b|c)^");
783 valid_pattern ("^d|(^a^)(b|c)");
784 valid_pattern ("^d|(^a)^(b|c)");
785 valid_pattern ("^d|(^a)(^b|c)");
786 valid_pattern ("^d|(^a)(b^|c)");
787 valid_pattern ("^d|(^a)(b|^c)");
788 valid_pattern ("^d|(^a)(b|c^)");
789 valid_pattern ("^d|(^a)(b|c)^");
790 valid_pattern ("d$|(a)$(b$|c$)");
791 valid_pattern ("d$|(a$)(b$|c$)");
792 valid_pattern ("d$|($a)(b$|c$)");
793 valid_pattern ("d$|$(a)(b$|c$)");
794 valid_pattern ("d$|(a)(b|$c)$");
795 valid_pattern ("d$|(a)($b|c)$");
796 valid_pattern ("d$|(a)$(b|c)$");
797 valid_pattern ("d$|(a$)(b|c)$");
798 valid_pattern ("d$|($a)(b|c)$");
799 valid_pattern ("d$|$(a)(b|c)$");
800 valid_pattern ("((^a|^b)|^c)|^d^");
801 valid_pattern ("((^a|^b)|^c)^|^d");
802 valid_pattern ("((^a|^b)|^c^)|^d");
803 valid_pattern ("((^a|^b)^|^c)|^d");
804 valid_pattern ("((^a|^b^)|^c)|^d");
805 valid_pattern ("((^a^|^b)|^c)|^d");
806 valid_pattern ("((a|b)|c)|$d$");
807 valid_pattern ("((a|b)|$c)|d$");
808 valid_pattern ("((a|$b)|c)|d$");
809 valid_pattern ("(($a|b)|c)|d$");
810 valid_pattern ("($(a|b)|c)|d$");
811 valid_pattern ("$((a|b)|c)|d$");
812 valid_pattern ("^d^|(c|(a|b))");
813 valid_pattern ("^d|(c^|(a|b))");
814 valid_pattern ("^d|(c|(a^|b))");
815 valid_pattern ("^d|(c|(a|b^))");
816 valid_pattern ("^d|(c|(a|b)^)");
817 valid_pattern ("^d|(c|(a|b))^");
818 valid_pattern ("d$|(c$|(a$|$b$))");
819 valid_pattern ("d$|(c$|($a$|b$))");
820 valid_pattern ("d$|($c$|(a$|b$))");
821 valid_pattern ("d$|$(c$|(a$|b$))");
822 valid_pattern ("$d$|(c$|(a$|b$))");
823 valid_pattern ("d$|(c$|(a|$b)$)");
824 valid_pattern ("d$|(c$|($a|b)$)");
825 valid_pattern ("d$|($c$|(a|b)$)");
826 valid_pattern ("d$|$(c$|(a|b)$)");
827 valid_pattern ("$d$|(c$|(a|b)$)");
828 valid_pattern ("d$|(c$|(a|$b))$");
829 valid_pattern ("d$|(c$|($a|b))$");
830 valid_pattern ("d$|($c$|(a|b))$");
831 valid_pattern ("d$|$(c$|(a|b))$");
832 valid_pattern ("$d$|(c$|(a|b))$");
833 valid_pattern ("^c^|(^a|^b)");
834 valid_pattern ("^c|(^a^|^b)");
835 valid_pattern ("^c|(^a|^b^)");
836 valid_pattern ("^c|(^a|^b)^");
837 valid_pattern ("c$|(a$|$b$)");
838 valid_pattern ("c$|($a$|b$)");
839 valid_pattern ("c$|$(a$|b$)");
840 valid_pattern ("$c$|(a$|b$)");
841 valid_pattern ("^d^(c|e((a|b)))");
842 valid_pattern ("^d(^c|e((a|b)))");
843 valid_pattern ("^d(c^|e((a|b)))");
844 valid_pattern ("^d(c|^e((a|b)))");
845 valid_pattern ("^d(c|e^((a|b)))");
846 valid_pattern ("^d(c|e(^(a|b)))");
847 valid_pattern ("^d(c|e((^a|b)))");
848 valid_pattern ("^d(c|e((a|^b)))");
849 valid_pattern ("^d(c|e((a|b^)))");
850 valid_pattern ("^d(c|e((a|b)^))");
851 valid_pattern ("^d(c|e((a|b))^)");
852 valid_pattern ("^d(c|e((a|b)))^");
853 valid_pattern ("d(c$|e($(a$|b$)))");
854 valid_pattern ("d(c$|e$((a$|b$)))");
855 valid_pattern ("d(c$|$e((a$|b$)))");
856 valid_pattern ("d($c$|e((a$|b$)))");
857 valid_pattern ("d$(c$|e((a$|b$)))");
858 valid_pattern ("$d(c$|e((a$|b$)))");
859 valid_pattern ("^d|^a^(b|c)");
860 valid_pattern ("^d|^a(^b|c)");
861 valid_pattern ("^d|^a(b^|c)");
862 valid_pattern ("^d|^a(b|^c)");
863 valid_pattern ("^d|^a(b|c^)");
864 valid_pattern ("^d|^a(b|c)^");
865 valid_pattern ("d$|a($b$|c$)");
866 valid_pattern ("d$|a$(b$|c$)");
867 valid_pattern ("d$|$a(b$|c$)");
868 valid_pattern ("$d$|a(b$|c$)");
869 valid_pattern ("^d|^(b^|c)a");
870 valid_pattern ("^d|^(b|c^)a");
871 valid_pattern ("^d|^(b|c)^a");
872 valid_pattern ("^d|^(b|c)a^");
873 valid_pattern ("d$|(b|c)$a$");
874 valid_pattern ("d$|(b|c$)a$");
875 valid_pattern ("d$|(b|$c)a$");
876 valid_pattern ("d$|(b$|c)a$");
877 valid_pattern ("d$|($b|c)a$");
878 valid_pattern ("d$|$(b|c)a$");
879 valid_pattern ("$d$|(b|c)a$");
881 /* xx Do these use all the valid_nonposix_pattern ones in other_test.c? */
883 TEST_SEARCH ("(^a|^b)c", "ac", 0, 2);
884 TEST_SEARCH ("(^a|^b)c", "bc", 0, 2);
885 TEST_SEARCH ("c(a$|b$)", "ca", 0, 2);
886 TEST_SEARCH ("c(a$|b$)", "cb", 0, 2);
887 TEST_SEARCH ("^(a|b)|^c", "ad", 0, 2);
888 TEST_SEARCH ("^(a|b)|^c", "bd", 0, 2);
889 TEST_SEARCH ("(a|b)$|c$", "da", 0, 2);
890 TEST_SEARCH ("(a|b)$|c$", "db", 0, 2);
891 TEST_SEARCH ("(a|b)$|c$", "dc", 0, 2);
892 TEST_SEARCH ("(^a|^b)|^c", "ad", 0, 2);
893 TEST_SEARCH ("(^a|^b)|^c", "bd", 0, 2);
894 TEST_SEARCH ("(^a|^b)|^c", "cd", 0, 2);
895 TEST_SEARCH ("(a$|b$)|c$", "da", 0, 2);
896 TEST_SEARCH ("(a$|b$)|c$", "db", 0, 2);
897 TEST_SEARCH ("(a$|b$)|c$", "dc", 0, 2);
898 TEST_SEARCH ("^c|(^a|^b)", "ad", 0, 2);
899 TEST_SEARCH ("^c|(^a|^b)", "bd", 0, 2);
900 TEST_SEARCH ("^c|(^a|^b)", "cd", 0, 2);
901 TEST_SEARCH ("c$|(a$|b$)", "da", 0, 2);
902 TEST_SEARCH ("c$|(a$|b$)", "db", 0, 2);
903 TEST_SEARCH ("c$|(a$|b$)", "dc", 0, 2);
904 TEST_SEARCH ("^c|^(a|b)", "ad", 0, 2);
905 TEST_SEARCH ("^c|^(a|b)", "bd", 0, 2);
906 TEST_SEARCH ("^c|^(a|b)", "cd", 0, 2);
907 TEST_SEARCH ("c$|(a|b)$", "da", 0, 2);
908 TEST_SEARCH ("c$|(a|b)$", "db", 0, 2);
909 TEST_SEARCH ("c$|(a|b)$", "dc", 0, 2);
910 TEST_SEARCH ("(^a|^b)c|^d", "ace", 0, 3);
911 TEST_SEARCH ("(^a|^b)c|^d", "bce", 0, 3);
912 TEST_SEARCH ("(^a|^b)c|^d", "de", 0, 2);
913 TEST_SEARCH ("(a|b)c$|d$", "eac", 0, 3);
914 TEST_SEARCH ("(a|b)c$|d$", "ebc", 0, 3);
915 TEST_SEARCH ("(a|b)c$|d$", "ed", 0, 3);
916 TEST_SEARCH ("^d|^c(a|b)", "cae", 0, 3);
917 TEST_SEARCH ("^d|^c(a|b)", "cbe", 0, 3);
918 TEST_SEARCH ("^d|^c(a|b)", "de", 0, 3);
919 TEST_SEARCH ("d$|c(a$|b$)", "eca", 0, 3);
920 TEST_SEARCH ("d$|c(a$|b$)", "ecb", 0, 3);
921 TEST_SEARCH ("d$|c(a$|b$)", "ed", 0, 3);
923 TEST_SEARCH ("(((^a|^b))c|^d)e", "acef", 0, 4);
924 TEST_SEARCH ("(((^a|^b))c|^d)e", "bcef", 0, 4);
925 TEST_SEARCH ("(((^a|^b))c|^d)e", "def", 0, 3);
927 TEST_SEARCH ("((^(a|b))c|^d)e", "acef", 0, 4);
928 TEST_SEARCH ("((^(a|b))c|^d)e", "bcef", 0, 4);
929 TEST_SEARCH ("((^(a|b))c|^d)e", "def", 0, 3);
931 TEST_SEARCH ("(^((a|b))c|^d)e", "acef", 0, 4);
932 TEST_SEARCH ("(^((a|b))c|^d)e", "bcef", 0, 4);
933 TEST_SEARCH ("(^((a|b))c|^d)e", "def", 0, 3);
935 TEST_SEARCH ("(((a|b))c|d)e$", "face", 0, 4);
936 TEST_SEARCH ("(((a|b))c|d)e$", "fbce", 0, 4);
937 TEST_SEARCH ("(((a|b))c|d)e$", "fde", 0, 3);
939 TEST_SEARCH ("^e(d|c((a|b)))", "edf", 0, 3);
940 TEST_SEARCH ("^e(d|c((a|b)))", "ecaf", 0, 4);
941 TEST_SEARCH ("^e(d|c((a|b)))", "ecbf", 0, 4);
943 TEST_SEARCH ("e(d$|c((a$|b$)))", "fed", 0, 3);
944 TEST_SEARCH ("e(d$|c((a$|b$)))", "feca", 0, 4);
945 TEST_SEARCH ("e(d$|c((a$|b$)))", "fecb", 0, 4);
947 TEST_SEARCH ("e(d$|c((a|b)$))", "fed", 0, 3);
948 TEST_SEARCH ("e(d$|c((a|b)$))", "feca", 0, 4);
949 TEST_SEARCH ("e(d$|c((a|b)$))", "fecb", 0, 4);
951 TEST_SEARCH ("e(d$|c((a|b))$)", "fed", 0, 3);
952 TEST_SEARCH ("e(d$|c((a|b))$)", "feca", 0, 3);
953 TEST_SEARCH ("e(d$|c((a|b))$)", "fecb", 0, 3);
955 TEST_SEARCH ("e(d$|c((a|b)))$", "fed", 0, 3);
956 TEST_SEARCH ("e(d$|c((a|b)))$", "feca", 0, 3);
957 TEST_SEARCH ("e(d$|c((a|b)))$", "fecb", 0, 3);
959 TEST_SEARCH ("(((^a|^b))c)|^de", "acf", 0, 3);
960 TEST_SEARCH ("(((^a|^b))c)|^de", "bcf", 0, 3);
961 TEST_SEARCH ("(((^a|^b))c)|^de", "def", 0, 3);
963 TEST_SEARCH ("(((a|b))c$)|de$", "fac", 0, 3);
964 TEST_SEARCH ("(((a|b))c$)|de$", "fbc", 0, 3);
965 TEST_SEARCH ("(((a|b))c$)|de$", "fde", 0, 3);
967 TEST_SEARCH ("(((a|b))c)$|de$", "fac", 0, 3);
968 TEST_SEARCH ("(((a|b))c)$|de$", "fbc", 0, 3);
969 TEST_SEARCH ("(((a|b))c)$|de$", "fde", 0, 3);
971 TEST_SEARCH ("^ed|^(c((a|b)))", "edf", 0, 3);
972 TEST_SEARCH ("^ed|^(c((a|b)))", "caf", 0, 3);
973 TEST_SEARCH ("^ed|^(c((a|b)))", "cbf", 0, 3);
975 TEST_SEARCH ("^ed|(^c((a|b)))", "edf", 0, 3);
976 TEST_SEARCH ("^ed|(^c((a|b)))", "caf", 0, 3);
977 TEST_SEARCH ("^ed|(^c((a|b)))", "cbf", 0, 3);
979 TEST_SEARCH ("ed$|(c((a|b)))$", "fed", 0, 3);
980 TEST_SEARCH ("ed$|(c((a|b)))$", "fca", 0, 3);
981 TEST_SEARCH ("ed$|(c((a|b)))$", "fcb", 0, 3);
983 TEST_SEARCH ("ed$|(c((a|b))$)", "fed", 0, 3);
984 TEST_SEARCH ("ed$|(c((a|b))$)", "fca", 0, 3);
985 TEST_SEARCH ("ed$|(c((a|b))$)", "fcb", 0, 3);
987 TEST_SEARCH ("ed$|(c((a|b)$))", "fed", 0, 3);
988 TEST_SEARCH ("ed$|(c((a|b)$))", "fca", 0, 3);
989 TEST_SEARCH ("ed$|(c((a|b)$))", "fcb", 0, 3);
991 TEST_SEARCH ("ed$|(c((a$|b$)))", "fed", 0, 3);
992 TEST_SEARCH ("ed$|(c((a$|b$)))", "fca", 0, 3);
993 TEST_SEARCH ("ed$|(c((a$|b$)))", "fcb", 0, 3);
995 TEST_SEARCH ("^a(b|c)|^d", "abe", 0, 3);
996 TEST_SEARCH ("^a(b|c)|^d", "ace", 0, 3);
997 TEST_SEARCH ("^a(b|c)|^d", "df", 0, 2);
999 TEST_SEARCH ("a(b$|c$)|d$", "fab", 0, 3);
1000 TEST_SEARCH ("a(b$|c$)|d$", "fac", 0, 3);
1001 TEST_SEARCH ("a(b$|c$)|d$", "fd", 0, 2);
1003 TEST_SEARCH ("^(a)(b|c)|^d", "abe", 0, 3);
1004 TEST_SEARCH ("^(a)(b|c)|^d", "ace", 0, 3);
1005 TEST_SEARCH ("^(a)(b|c)|^d", "df", 0, 2);
1007 TEST_SEARCH ("(^a)(b|c)|^d", "abe", 0, 3);
1008 TEST_SEARCH ("(^a)(b|c)|^d", "ace", 0, 3);
1009 TEST_SEARCH ("(^a)(b|c)|^d", "df", 0, 2);
1011 TEST_SEARCH ("(a)(b|c)$|d$", "fab", 0, 3);
1012 TEST_SEARCH ("(a)(b|c)$|d$", "fac", 0, 3);
1013 TEST_SEARCH ("(a)(b|c)$|d$", "fd", 0, 2);
1015 TEST_SEARCH ("(b|c)(a)$|d$", "fba", 0, 3);
1016 TEST_SEARCH ("(b|c)(a)$|d$", "fca", 0, 3);
1017 TEST_SEARCH ("(b|c)(a)$|d$", "fd", 0, 2);
1019 TEST_SEARCH ("(b|c)(a$)|d$", "fba", 0, 3);
1020 TEST_SEARCH ("(b|c)(a$)|d$", "fca", 0, 3);
1021 TEST_SEARCH ("(b|c)(a$)|d$", "fd", 0, 2);
1023 TEST_SEARCH ("(a)(b$|c$)|d$", "fab", 0, 3);
1024 TEST_SEARCH ("(a)(b$|c$)|d$", "fac", 0, 3);
1025 TEST_SEARCH ("(a)(b$|c$)|d$", "fd", 0, 2);
1027 TEST_SEARCH ("^d|^(b|c)(a)", "df", 0, 2);
1028 TEST_SEARCH ("^d|^(b|c)(a)", "baf", 0, 3);
1029 TEST_SEARCH ("^d|^(b|c)(a)", "caf", 0, 3);
1031 TEST_SEARCH ("^d|(^b|^c)(a)", "df", 0, 2);
1032 TEST_SEARCH ("^d|(^b|^c)(a)", "baf", 0, 3);
1033 TEST_SEARCH ("^d|(^b|^c)(a)", "caf", 0, 3);
1035 TEST_SEARCH ("d$|(b|c)(a$)", "fd", 0, 2);
1036 TEST_SEARCH ("d$|(b|c)(a$)", "fba", 0, 3);
1037 TEST_SEARCH ("d$|(b|c)(a$)", "fca", 0, 3);
1039 TEST_SEARCH ("d$|(b|c)(a)$", "fd", 0, 2);
1040 TEST_SEARCH ("d$|(b|c)(a)$", "fba", 0, 3);
1041 TEST_SEARCH ("d$|(b|c)(a)$", "fca", 0, 3);
1043 TEST_SEARCH ("d$|(b|c)(a$)", "fd", 0, 2);
1044 TEST_SEARCH ("d$|(b|c)(a$)", "fba", 0, 3);
1045 TEST_SEARCH ("d$|(b|c)(a$)", "fca", 0, 3);
1047 TEST_SEARCH ("^d|^(a)(b|c)", "df", 0, 2);
1048 TEST_SEARCH ("^d|^(a)(b|c)", "abf", 0, 3);
1049 TEST_SEARCH ("^d|^(a)(b|c)", "acf", 0, 3);
1051 TEST_SEARCH ("^d|(^a)(b|c)", "df", 0, 2);
1052 TEST_SEARCH ("^d|(^a)(b|c)", "abf", 0, 3);
1053 TEST_SEARCH ("^d|(^a)(b|c)", "acf", 0, 3);
1055 TEST_SEARCH ("d$|(a)(b$|c$)", "fd", 0, 2);
1056 TEST_SEARCH ("d$|(a)(b$|c$)", "fab", 0, 3);
1057 TEST_SEARCH ("d$|(a)(b$|c$)", "fac", 0, 3);
1059 TEST_SEARCH ("d$|(a)(b|c)$", "fd", 0, 2);
1060 TEST_SEARCH ("d$|(a)(b|c)$", "fab", 0, 3);
1061 TEST_SEARCH ("d$|(a)(b|c)$", "fac", 0, 3);
1063 TEST_SEARCH ("((^a|^b)|^c)|^d", "ae", 0, 2);
1064 TEST_SEARCH ("((^a|^b)|^c)|^d", "be", 0, 2);
1065 TEST_SEARCH ("((^a|^b)|^c)|^d", "ce", 0, 2);
1066 TEST_SEARCH ("((^a|^b)|^c)|^d", "de", 0, 2);
1068 TEST_SEARCH ("((a|b)|c)|d$", "ed", 0, 2);
1069 TEST_SEARCH ("((a|b)|c)|d$", "ea", 0, 2);
1070 TEST_SEARCH ("((a|b)|c)|d$", "eb", 0, 2);
1071 TEST_SEARCH ("((a|b)|c)|d$", "ec", 0, 2);
1073 TEST_SEARCH ("^d|(c|(a|b))", "de", 0, 2);
1075 TEST_SEARCH ("d$|(c$|(a$|b$))", "ed", 0, 2);
1076 TEST_SEARCH ("d$|(c$|(a$|b$))", "ec", 0, 2);
1077 TEST_SEARCH ("d$|(c$|(a$|b$))", "ea", 0, 2);
1078 TEST_SEARCH ("d$|(c$|(a$|b$))", "eb", 0, 2);
1080 TEST_SEARCH ("d$|(c$|(a|b)$)", "ed", 0, 2);
1081 TEST_SEARCH ("d$|(c$|(a|b)$)", "ec", 0, 2);
1082 TEST_SEARCH ("d$|(c$|(a|b)$)", "ea", 0, 2);
1083 TEST_SEARCH ("d$|(c$|(a|b)$)", "eb", 0, 2);
1085 TEST_SEARCH ("d$|(c$|(a|b))$", "ed", 0, 2);
1086 TEST_SEARCH ("d$|(c$|(a|b))$", "ec", 0, 2);
1087 TEST_SEARCH ("d$|(c$|(a|b))$", "ea", 0, 2);
1088 TEST_SEARCH ("d$|(c$|(a|b))$", "eb", 0, 2);
1090 test_match ("a|^b", "b");
1091 test_match ("a|b$", "b");
1092 test_match ("^b|a", "b");
1093 test_match ("b$|a", "b");
1094 test_match ("(^a)", "a");
1095 test_match ("(a$)", "a");
1096 TEST_SEARCH ("c|^ab", "aba", 0, 3);
1097 TEST_SEARCH ("c|ba$", "aba", 0, 3);
1098 TEST_SEARCH ("^ab|c", "aba", 0, 3);
1099 TEST_SEARCH ("ba$|c", "aba", 0, 3);
1100 TEST_SEARCH ("(^a)", "ab", 0, 2);
1101 TEST_SEARCH ("(a$)", "ba", 0, 2);
1103 TEST_SEARCH ("(^a$)", "a", 0, 1);
1104 TEST_SEARCH ("(^a)", "ab", 0, 2);
1105 TEST_SEARCH ("(b$)", "ab", 0, 2);
1108 /* Per POSIX D11.1 p. 108, leftmost longest match. */
1109 test_match ("(wee|week)(knights|night)", "weeknights");
1111 test_match ("(fooq|foo)qbar", "fooqbar");
1112 test_match ("(fooq|foo)(qbarx|bar)", "fooqbarx");
1114 /* Take first alternative that does the longest match. */
1115 test_all_registers ("(fooq|(foo)|(fo))((qbarx)|(oqbarx)|bar)", "fooqbarx",
1116 "", 0, 8, 0, 3, 0, 3, -1, -1, 3, 8, 3, 8, -1, -1, -1, -1, -1, -1,
1119 test_match ("(fooq|foo)*qbar", "fooqbar");
1120 test_match ("(fooq|foo)*(qbar)", "fooqbar");
1121 test_match ("(fooq|foo)*(qbar)*", "fooqbar");
1123 test_match ("(fooq|fo|o)*qbar", "fooqbar");
1124 test_match ("(fooq|fo|o)*(qbar)", "fooqbar");
1125 test_match ("(fooq|fo|o)*(qbar)*", "fooqbar");
1127 test_match ("(fooq|fo|o)*(qbar|q)*", "fooqbar");
1128 test_match ("(fooq|foo)*(qbarx|bar)", "fooqbarx");
1129 test_match ("(fooq|foo)*(qbarx|bar)*", "fooqbarx");
1131 test_match ("(fooq|fo|o)+(qbar|q)+", "fooqbar");
1132 test_match ("(fooq|foo)+(qbarx|bar)", "fooqbarx");
1133 test_match ("(fooq|foo)+(qbarx|bar)+", "fooqbarx");
1135 /* Per Mike Haertel. */
1136 test_match ("(foo|foobarfoo)(bar)*", "foobarfoo");
1139 test_match ("[ab]?c", "ac");
1140 test_match ("[ab]*c", "ac");
1141 test_match ("[ab]+c", "ac");
1142 test_match ("(a|b)?c", "ac");
1143 test_match ("(a|b)*c", "ac");
1144 test_match ("(a|b)+c", "ac");
1145 test_match ("(a*c)?b", "b");
1146 test_match ("(a*c)+b", "aacb");
1148 /* Per David A. Willcox. */
1149 test_match ("a((b)|(c))d", "acd");
1150 test_all_registers ("a((b)|(c))d", "acd", "", 0, 3, 1, 2, -1, -1, 1, 2,
1151 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1);
1154 /* Extended regular expressions, continued; these don't match their strings. */
1155 test_should_match = false;
1158 /* Invalid use of special characters. */
1159 /* These are not invalid anymore, since POSIX says the behavior is
1160 undefined, and we prefer context-independent to context-invalid. */
1161 invalid_pattern (REG_BADRPT, "*");
1162 invalid_pattern (REG_BADRPT, "a|*");
1163 invalid_pattern (REG_BADRPT, "(*)");
1164 invalid_pattern (REG_BADRPT, "^*");
1165 invalid_pattern (REG_BADRPT, "+");
1166 invalid_pattern (REG_BADRPT, "a|+");
1167 invalid_pattern (REG_BADRPT, "(+)");
1168 invalid_pattern (REG_BADRPT, "^+");
1170 invalid_pattern (REG_BADRPT, "?");
1171 invalid_pattern (REG_BADRPT, "a|?");
1172 invalid_pattern (REG_BADRPT, "(?)");
1173 invalid_pattern (REG_BADRPT, "^?");
1175 invalid_pattern (REG_BADPAT, "|");
1176 invalid_pattern (REG_BADPAT, "a|");
1177 invalid_pattern (REG_BADPAT, "a||");
1178 invalid_pattern (REG_BADPAT, "(|a)");
1179 invalid_pattern (REG_BADPAT, "(a|)");
1181 invalid_pattern (REG_BADPAT, PARENS_TO_OPS ("(|)"));
1183 invalid_pattern (REG_BADRPT, "{1}");
1184 invalid_pattern (REG_BADRPT, "a|{1}");
1185 invalid_pattern (REG_BADRPT, "^{1}");
1186 invalid_pattern (REG_BADRPT, "({1})");
1188 invalid_pattern (REG_BADPAT, "|b");
1190 invalid_pattern (REG_BADRPT, "^{0,}*");
1191 invalid_pattern (REG_BADRPT, "$*");
1192 invalid_pattern (REG_BADRPT, "${0,}*");
1195 invalid_pattern (REG_EESCAPE, "\\");
1197 test_match ("a?b", "a");
1200 test_match ("a+", "");
1201 test_match ("a+b", "a");
1202 test_match ("a?", "b");
1205 /* We make empty groups valid now, since they are undefined in POSIX.
1207 /* Subexpressions. */
1208 invalid_pattern (REG_BADPAT, "()");
1209 invalid_pattern (REG_BADPAT, "a()");
1210 invalid_pattern (REG_BADPAT, "()b");
1211 invalid_pattern (REG_BADPAT, "a()b");
1212 invalid_pattern (REG_BADPAT, "()*");
1213 invalid_pattern (REG_BADPAT, "(()*");
1215 /* Invalid intervals. */
1216 test_match ("a{2}*", "aaa");
1217 test_match ("a{2}?", "aaa");
1218 test_match ("a{2}+", "aaa");
1219 test_match ("a{2}{2}", "aaa");
1220 test_match ("a{1}{1}{2}", "aaa");
1221 test_match ("a{1}{1}{2}", "a");
1222 /* Invalid alternation. */
1223 test_match ("a|b", "c");
1225 TEST_SEARCH ("c|^ba", "aba", 0, 3);
1226 TEST_SEARCH ("c|ab$", "aba", 0, 3);
1227 TEST_SEARCH ("^ba|c", "aba", 0, 3);
1228 TEST_SEARCH ("ab$|c", "aba", 0, 3);
1229 /* Invalid anchoring. */
1230 TEST_SEARCH ("(^a)", "ba", 0, 2);
1231 TEST_SEARCH ("(b$)", "ba", 0, 2);
1233 printf ("\nFinished POSIX extended tests.\n");
1240 make-backup-files: t
1242 trim-versions-without-asking: nil