1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21: #include <sys/types.h>
22: #include <mcheck.h>
23: #include <regex.h>
24: #include <stdio.h>
25: #include <stdlib.h>
26: #include <string.h>
27:
28: static struct
29: {
30: int syntax;
31: const char *pattern;
32: const char *string;
33: int start;
34: } tests[] = {
35: {RE_BACKSLASH_ESCAPE_IN_LISTS, "[0\\-9]", "1", -1},
36: {RE_BACKSLASH_ESCAPE_IN_LISTS, "[0\\-9]", "-", 0},
37: {RE_SYNTAX_POSIX_BASIC, "s1\n.*\ns3", "s1\ns2\ns3", 0},
38: {RE_SYNTAX_POSIX_EXTENDED, "ab{0}c", "ac", 0},
39: {RE_SYNTAX_POSIX_EXTENDED, "ab{0}c", "abc", -1},
40: {RE_SYNTAX_POSIX_EXTENDED, "ab{0}c", "abbc", -1},
41:
42: {RE_SYNTAX_POSIX_EXTENDED, "ab{1}{1}c", "ac", -1},
43: {RE_SYNTAX_POSIX_EXTENDED, "ab{1}{1}c", "abc", 0},
44: {RE_SYNTAX_POSIX_EXTENDED, "ab{1}{1}c", "abbc", -1},
45: {RE_SYNTAX_POSIX_EXTENDED, "ab{2}{2}c", "ac", -1},
46: {RE_SYNTAX_POSIX_EXTENDED, "ab{2}{2}c", "abbc", -1},
47: {RE_SYNTAX_POSIX_EXTENDED, "ab{2}{2}c", "abbbbc", 0},
48: {RE_SYNTAX_POSIX_EXTENDED, "ab{2}{2}c", "abbbbbc", -1},
49: {RE_SYNTAX_POSIX_EXTENDED, "ab{0}{1}c", "ac", 0},
50: {RE_SYNTAX_POSIX_EXTENDED, "ab{0}{1}c", "abc", -1},
51: {RE_SYNTAX_POSIX_EXTENDED, "ab{0}{1}c", "abbc", -1},
52: {RE_SYNTAX_POSIX_EXTENDED, "ab{1}{0}c", "ac", 0},
53: {RE_SYNTAX_POSIX_EXTENDED, "ab{1}{0}c", "abc", -1},
54: {RE_SYNTAX_POSIX_EXTENDED, "ab{1}{0}c", "abbc", -1},
55: {RE_SYNTAX_POSIX_EXTENDED, "ab{0}*c", "ac", 0},
56: {RE_SYNTAX_POSIX_EXTENDED, "ab{0}*c", "abc", -1},
57: {RE_SYNTAX_POSIX_EXTENDED, "ab{0}*c", "abbc", -1},
58: {RE_SYNTAX_POSIX_EXTENDED, "ab{0}?c", "ac", 0},
59: {RE_SYNTAX_POSIX_EXTENDED, "ab{0}?c", "abc", -1},
60: {RE_SYNTAX_POSIX_EXTENDED, "ab{0}?c", "abbc", -1},
61: {RE_SYNTAX_POSIX_EXTENDED, "ab{0}+c", "ac", 0},
62: {RE_SYNTAX_POSIX_EXTENDED, "ab{0}+c", "abc", -1},
63: {RE_SYNTAX_POSIX_EXTENDED, "ab{0}+c", "abbc", -1},
64: };
65:
66: int
67: main (void)
68: {
69: struct re_pattern_buffer regbuf;
70: const char *err;
71: size_t i;
72: int ret = 0;
73:
74: mtrace ();
75:
76: for (i = 0; i < sizeof (tests) / sizeof (tests[0]); ++i)
77: {
78: int start;
79: re_set_syntax (tests[i].syntax);
80: memset (®buf, '\0', sizeof (regbuf));
81: err = re_compile_pattern (tests[i].pattern, strlen (tests[i].pattern),
82: ®buf);
83: if (err != NULL)
84: {
85: printf ("re_compile_pattern failed: %s\n", err);
86: ret = 1;
87: continue;
88: }
89:
90: start = re_search (®buf, tests[i].string, strlen (tests[i].string),
91: 0, strlen (tests[i].string), NULL);
92: if (start != tests[i].start)
93: {
94: printf ("re_search failed %d\n", start);
95: ret = 1;
96: regfree (®buf);
97: continue;
98: }
99: regfree (®buf);
100: }
101:
102: return ret;
103: }