1 /* psx-interv.c: test POSIX intervals, both basic and extended. */
8 printf ("\nStarting POSIX interval tests.\n");
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);
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);
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);
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);
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);
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");
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);
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);
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);
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);
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);
72 test_match (BRACES_TO_OPS (".{0,3}b"), "b");
73 test_match (BRACES_TO_OPS (".{0,3}b"), "ab");
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);
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");
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);
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);
95 test_match (BRACES_TO_OPS ("a{2}*"), "");
96 test_match (BRACES_TO_OPS ("a{2}*"), "aa");
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");
102 test_match (BRACES_TO_OPS ("a{1}{1}"), "a");
104 test_match (BRACES_TO_OPS ("a{1}{1}{1}"), "a");
105 test_match (BRACES_TO_OPS ("a{1}{1}{2}"), "aa");
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");
112 test_match (BRACES_TO_OPS ("a{1}{2}"), "aa");
113 test_match (BRACES_TO_OPS ("a{2}{1}"), "aa");
116 test_should_match = false;
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");
139 printf ("\nFinished POSIX interval tests.\n");