1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21: #include <regex.h>
22: #include <stdio.h>
23: #include <string.h>
24:
25: struct tests
26: {
27: const char *regex;
28: const char *string;
29: reg_syntax_t syntax;
30: int retval;
31: } tests[] = {
32: #define EGREP RE_SYNTAX_EGREP
33: #define EGREP_NL (RE_SYNTAX_EGREP | RE_DOT_NEWLINE) & ~RE_HAT_LISTS_NOT_NEWLINE
34: { "a.b", "a\nb", EGREP, -1 },
35: { "a.b", "a\nb", EGREP_NL, 0 },
36: { "a[^x]b", "a\nb", EGREP, -1 },
37: { "a[^x]b", "a\nb", EGREP_NL, 0 },
38:
39:
40:
41: { "a\\Sb", "a\nb", EGREP, -1 },
42: { "a\\Sb", "a\nb", EGREP_NL, -1 },
43: { "a\\Wb", "a\nb", EGREP, 0 },
44: { "a\\Wb", "a\nb", EGREP_NL, 0 }
45: };
46:
47: int
48: main (void)
49: {
50: struct re_pattern_buffer r;
51: size_t i;
52: int ret = 0;
53:
54: for (i = 0; i < sizeof (tests) / sizeof (tests[i]); ++i)
55: {
56: re_set_syntax (tests[i].syntax);
57: memset (&r, 0, sizeof (r));
58: if (re_compile_pattern (tests[i].regex, strlen (tests[i].regex), &r))
59: {
60: printf ("re_compile_pattern %zd failed\n", i);
61: ret = 1;
62: continue;
63: }
64: size_t len = strlen (tests[i].string);
65: int rv = re_search (&r, tests[i].string, len, 0, len, NULL);
66: if (rv != tests[i].retval)
67: {
68: printf ("re_search %zd unexpected value %d != %d\n",
69: i, rv, tests[i].retval);
70: ret = 1;
71: }
72: regfree (&r);
73: }
74: return ret;
75: }