Merge branch 'vendor/TCPDUMP' (early part)
[dragonfly.git] / gnu / lib / libregex / test / psx-interv.c
1 /* psx-interv.c: test POSIX intervals, both basic and extended.  */
2
3 #include "test.h"
4
5 void
6 test_intervals ()
7 {
8   printf ("\nStarting POSIX interval tests.\n");
9
10   test_should_match = true;
11                                                 /* Valid intervals.  */
12   test_match (BRACES_TO_OPS (PARENS_TO_OPS ("(a{1,2}b)*")), "abaab");
13   test_fastmap (BRACES_TO_OPS (PARENS_TO_OPS ("(a{1,2}b)*")), "a", 0, 0);
14   TEST_REGISTERS (BRACES_TO_OPS (PARENS_TO_OPS ("(a{1,2}b)*")),
15                   "abaab", 0, 5, 2, 5, -1, -1);
16
17   test_match (BRACES_TO_OPS ("a{0}"), "");
18   test_fastmap (BRACES_TO_OPS ("a{0}"), "", 0, 0);
19   TEST_REGISTERS (BRACES_TO_OPS ("a{0}"), "", 0, 0, -1, -1, -1, -1);
20   TEST_REGISTERS (BRACES_TO_OPS ("a{0}"), "x", 0, 0, -1, -1, -1, -1);
21
22   test_match (BRACES_TO_OPS ("a{0,}"), "");
23   test_match (BRACES_TO_OPS ("a{0,}"), "a");
24   test_fastmap (BRACES_TO_OPS ("a{0,}"), "a", 0, 0);
25   TEST_REGISTERS (BRACES_TO_OPS ("a{0,}"), "a", 0, 1, -1, -1, -1, -1);
26   TEST_REGISTERS (BRACES_TO_OPS ("a{0,}"), "xax", 0, 0, -1, -1, -1, -1);
27
28   test_match (BRACES_TO_OPS ("a{1}"), "a");
29   test_match (BRACES_TO_OPS ("a{1,}"), "a");
30   test_match (BRACES_TO_OPS ("a{1,}"), "aa");
31   test_match (BRACES_TO_OPS ("a{0,0}"), "");
32   test_match (BRACES_TO_OPS ("a{0,1}"), "");
33   test_match (BRACES_TO_OPS ("a{0,1}"), "a");
34   test_match (BRACES_TO_OPS ("a{1,3}"), "a");
35   test_match (BRACES_TO_OPS ("a{1,3}"), "aa");
36   test_match (BRACES_TO_OPS ("a{1,3}"), "aaa");
37   TEST_REGISTERS (BRACES_TO_OPS ("a{1,3}"), "aaa", 0, 3, -1, -1, -1, -1);
38   TEST_REGISTERS (BRACES_TO_OPS ("a{1,3}"), "xaaax", 1, 4, -1, -1, -1, -1);
39
40   test_match (BRACES_TO_OPS ("a{0,3}b"), "b");
41   test_match (BRACES_TO_OPS ("a{0,3}b"), "aaab");
42   test_fastmap (BRACES_TO_OPS ("a{0,3}b"), "ab", 0, 0);
43   TEST_REGISTERS (BRACES_TO_OPS ("a{0,3}b"), "b", 0, 1, -1, -1, -1, -1);
44   TEST_REGISTERS (BRACES_TO_OPS ("a{0,3}b"), "xbx", 1, 2, -1, -1, -1, -1);
45
46   test_match (BRACES_TO_OPS ("a{1,3}b"), "ab");
47   test_match (BRACES_TO_OPS ("a{1,3}b"), "aaab");
48   test_match (BRACES_TO_OPS ("ab{1,3}c"), "abbbc");
49
50   test_match (BRACES_TO_OPS (PARENS_TO_OPS ("(a){0,3}b")), "b");
51   test_fastmap (BRACES_TO_OPS (PARENS_TO_OPS ("(a){0,3}b")), "ab", 0, 0);
52   TEST_REGISTERS (BRACES_TO_OPS (PARENS_TO_OPS ("(a){0,3}b")), "b", 0, 1, -1, -1, -1, -1);
53   TEST_REGISTERS (BRACES_TO_OPS (PARENS_TO_OPS ("(a){0,3}b")), "ab", 0, 2, 0, 1, -1, -1);
54   TEST_REGISTERS (BRACES_TO_OPS (PARENS_TO_OPS ("(a){0,3}b")), "xabx", 1, 3, 1, 2, -1, -1);
55
56   test_match (BRACES_TO_OPS (PARENS_TO_OPS ("(a){1,3}b")), "ab");
57   test_match (BRACES_TO_OPS (PARENS_TO_OPS ("(a){1,3}b")), "aaab");
58   TEST_REGISTERS (BRACES_TO_OPS (PARENS_TO_OPS ("(a){1,3}b")), "aaab", 0, 4, 2, 3, -1, -1);
59   TEST_REGISTERS (BRACES_TO_OPS (PARENS_TO_OPS ("(a){1,3}b")), "xaaabx", 1, 5, 3, 4, -1, -1);
60
61   test_match (BRACES_TO_OPS (PARENS_TO_OPS ("(a*){0,3}b")), "aaaab");
62   test_fastmap (BRACES_TO_OPS (PARENS_TO_OPS ("(a*){0,3}b")), "ab", 0, 0);
63   TEST_REGISTERS (BRACES_TO_OPS (PARENS_TO_OPS ("(a*){0,3}b")), "aaaab", 0, 5, 4, 4, -1, -1);
64
65   test_match (BRACES_TO_OPS (PARENS_TO_OPS ("(a*){1,3}b")), "b");
66   test_match (BRACES_TO_OPS (PARENS_TO_OPS ("(a*){1,3}b")), "aaab");
67   test_fastmap (BRACES_TO_OPS (PARENS_TO_OPS ("(a*){1,3}b")), "ab", 0, 0);
68
69   test_match (BRACES_TO_OPS (PARENS_TO_OPS ("(a*){1,1}ab")), "aaaab");
70   TEST_REGISTERS (BRACES_TO_OPS (PARENS_TO_OPS ("(a*){1,1}ab")), "aaaab", 0, 5, 0, 3, -1, -1);
71
72   test_match (BRACES_TO_OPS (".{0,3}b"), "b");
73   test_match (BRACES_TO_OPS (".{0,3}b"), "ab");
74
75   test_match (BRACES_TO_OPS ("[a]{0,3}b"), "b");
76   test_match (BRACES_TO_OPS ("[a]{0,3}b"), "aaab");
77   test_fastmap (BRACES_TO_OPS ("[a]{0,3}b"), "ab", 0, 0);
78   test_match (BRACES_TO_OPS ("[^a]{0,3}b"), "bcdb");
79   test_match (BRACES_TO_OPS ("ab{0,3}c"), "abbbc");
80   test_match (BRACES_TO_OPS ("[[:digit:]]{0,3}d"), "123d");
81   test_fastmap (BRACES_TO_OPS ("[[:digit:]]{0,3}d"), "0123456789d", 0, 0);
82
83   test_match (BRACES_TO_OPS ("\\*{0,3}a"), "***a");
84   test_match (BRACES_TO_OPS (".{0,3}b"), "aaab");
85   test_match (BRACES_TO_OPS ("a{0,3}a"), "aaa");
86                                                 /* Backtracking.  */
87   test_fastmap (BRACES_TO_OPS (PARENS_TO_OPS ("(a{1,})*a")), "a", 0, 0);
88   test_match (BRACES_TO_OPS (PARENS_TO_OPS ("(a{1,})*a")), "a");
89   TEST_REGISTERS (BRACES_TO_OPS (PARENS_TO_OPS ("(a{1,})*a")), "a", 0, 1, -1, -1, -1, -1);
90
91   test_fastmap (BRACES_TO_OPS (PARENS_TO_OPS ("(a{2,})*aa")), "aa", 0, 0);
92   test_match (BRACES_TO_OPS (PARENS_TO_OPS ("(a{2,})*aa")), "aa");
93   TEST_REGISTERS (BRACES_TO_OPS (PARENS_TO_OPS ("(a{2,})*aa")), "aa", 0, 2, -1, -1, -1, -1);
94
95   test_match (BRACES_TO_OPS ("a{2}*"), "");
96   test_match (BRACES_TO_OPS ("a{2}*"), "aa");
97
98   test_match (BRACES_TO_OPS ("a{1}*"), "");
99   test_match (BRACES_TO_OPS ("a{1}*"), "a");
100   test_match (BRACES_TO_OPS ("a{1}*"), "aa");
101
102   test_match (BRACES_TO_OPS ("a{1}{1}"), "a");
103
104   test_match (BRACES_TO_OPS ("a{1}{1}{1}"), "a");
105   test_match (BRACES_TO_OPS ("a{1}{1}{2}"), "aa");
106
107   test_match (BRACES_TO_OPS ("a{1}{1}*"), "");
108   test_match (BRACES_TO_OPS ("a{1}{1}*"), "a");
109   test_match (BRACES_TO_OPS ("a{1}{1}*"), "aa");
110   test_match (BRACES_TO_OPS ("a{1}{1}*"), "aaa");
111
112   test_match (BRACES_TO_OPS ("a{1}{2}"), "aa");
113   test_match (BRACES_TO_OPS ("a{2}{1}"), "aa");
114
115
116   test_should_match = false;
117
118   test_match (BRACES_TO_OPS ("a{0}"), "a");
119   test_match (BRACES_TO_OPS ("a{0,}"), "b");
120   test_match (BRACES_TO_OPS ("a{1}"), "");
121   test_match (BRACES_TO_OPS ("a{1}"), "aa");
122   test_match (BRACES_TO_OPS ("a{1,}"), "");
123   test_match (BRACES_TO_OPS ("a{1,}"), "b");
124   test_match (BRACES_TO_OPS ("a{0,0}"), "a");
125   test_match (BRACES_TO_OPS ("a{0,1}"), "aa");
126   test_match (BRACES_TO_OPS ("a{0,1}"), "b");
127   test_match (BRACES_TO_OPS ("a{1,3}"), "");
128   test_match (BRACES_TO_OPS ("a{1,3}"), "aaaa");
129   test_match (BRACES_TO_OPS ("a{1,3}"), "b");
130   test_match (BRACES_TO_OPS (PARENS_TO_OPS ("(a){1,3}b")), "aaaab");
131   test_match (BRACES_TO_OPS (PARENS_TO_OPS ("(a*){1,3}b")), "bb");
132   test_match (BRACES_TO_OPS ("[a]{0,3}"), "aaaa");
133   test_match (BRACES_TO_OPS ("[^a]{0,3}b"), "ab");
134   test_match (BRACES_TO_OPS ("ab{0,3}c"), "abababc");
135   test_match (BRACES_TO_OPS ("[:alpha:]{0,3}d"), "123d");
136   test_match (BRACES_TO_OPS ("\\^{1,3}a"), "a");
137   test_match (BRACES_TO_OPS (".{0,3}b"), "aaaab");
138
139   printf ("\nFinished POSIX interval tests.\n");
140 }