summaryrefslogtreecommitdiffstats
path: root/gnu/lib/libregex/test/psx-interv.c
blob: fcdf488cd85a47c511bc0565641ca427b2c8f453 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/* psx-interv.c: test POSIX intervals, both basic and extended.  */

#include "test.h"

void
test_intervals ()
{
  printf ("\nStarting POSIX interval tests.\n");

  test_should_match = true;
                                                /* Valid intervals.  */
  test_match (BRACES_TO_OPS (PARENS_TO_OPS ("(a{1,2}b)*")), "abaab");
  test_fastmap (BRACES_TO_OPS (PARENS_TO_OPS ("(a{1,2}b)*")), "a", 0, 0);
  TEST_REGISTERS (BRACES_TO_OPS (PARENS_TO_OPS ("(a{1,2}b)*")),
                  "abaab", 0, 5, 2, 5, -1, -1);

  test_match (BRACES_TO_OPS ("a{0}"), "");
  test_fastmap (BRACES_TO_OPS ("a{0}"), "", 0, 0);
  TEST_REGISTERS (BRACES_TO_OPS ("a{0}"), "", 0, 0, -1, -1, -1, -1);
  TEST_REGISTERS (BRACES_TO_OPS ("a{0}"), "x", 0, 0, -1, -1, -1, -1);

  test_match (BRACES_TO_OPS ("a{0,}"), "");
  test_match (BRACES_TO_OPS ("a{0,}"), "a");
  test_fastmap (BRACES_TO_OPS ("a{0,}"), "a", 0, 0);
  TEST_REGISTERS (BRACES_TO_OPS ("a{0,}"), "a", 0, 1, -1, -1, -1, -1);
  TEST_REGISTERS (BRACES_TO_OPS ("a{0,}"), "xax", 0, 0, -1, -1, -1, -1);

  test_match (BRACES_TO_OPS ("a{1}"), "a");
  test_match (BRACES_TO_OPS ("a{1,}"), "a");
  test_match (BRACES_TO_OPS ("a{1,}"), "aa");
  test_match (BRACES_TO_OPS ("a{0,0}"), "");
  test_match (BRACES_TO_OPS ("a{0,1}"), "");
  test_match (BRACES_TO_OPS ("a{0,1}"), "a");
  test_match (BRACES_TO_OPS ("a{1,3}"), "a");
  test_match (BRACES_TO_OPS ("a{1,3}"), "aa");
  test_match (BRACES_TO_OPS ("a{1,3}"), "aaa");
  TEST_REGISTERS (BRACES_TO_OPS ("a{1,3}"), "aaa", 0, 3, -1, -1, -1, -1);
  TEST_REGISTERS (BRACES_TO_OPS ("a{1,3}"), "xaaax", 1, 4, -1, -1, -1, -1);

  test_match (BRACES_TO_OPS ("a{0,3}b"), "b");
  test_match (BRACES_TO_OPS ("a{0,3}b"), "aaab");
  test_fastmap (BRACES_TO_OPS ("a{0,3}b"), "ab", 0, 0);
  TEST_REGISTERS (BRACES_TO_OPS ("a{0,3}b"), "b", 0, 1, -1, -1, -1, -1);
  TEST_REGISTERS (BRACES_TO_OPS ("a{0,3}b"), "xbx", 1, 2, -1, -1, -1, -1);

  test_match (BRACES_TO_OPS ("a{1,3}b"), "ab");
  test_match (BRACES_TO_OPS ("a{1,3}b"), "aaab");
  test_match (BRACES_TO_OPS ("ab{1,3}c"), "abbbc");

  test_match (BRACES_TO_OPS (PARENS_TO_OPS ("(a){0,3}b")), "b");
  test_fastmap (BRACES_TO_OPS (PARENS_TO_OPS ("(a){0,3}b")), "ab", 0, 0);
  TEST_REGISTERS (BRACES_TO_OPS (PARENS_TO_OPS ("(a){0,3}b")), "b", 0, 1, -1, -1, -1, -1);
  TEST_REGISTERS (BRACES_TO_OPS (PARENS_TO_OPS ("(a){0,3}b")), "ab", 0, 2, 0, 1, -1, -1);
  TEST_REGISTERS (BRACES_TO_OPS (PARENS_TO_OPS ("(a){0,3}b")), "xabx", 1, 3, 1, 2, -1, -1);

  test_match (BRACES_TO_OPS (PARENS_TO_OPS ("(a){1,3}b")), "ab");
  test_match (BRACES_TO_OPS (PARENS_TO_OPS ("(a){1,3}b")), "aaab");
  TEST_REGISTERS (BRACES_TO_OPS (PARENS_TO_OPS ("(a){1,3}b")), "aaab", 0, 4, 2, 3, -1, -1);
  TEST_REGISTERS (BRACES_TO_OPS (PARENS_TO_OPS ("(a){1,3}b")), "xaaabx", 1, 5, 3, 4, -1, -1);

  test_match (BRACES_TO_OPS (PARENS_TO_OPS ("(a*){0,3}b")), "aaaab");
  test_fastmap (BRACES_TO_OPS (PARENS_TO_OPS ("(a*){0,3}b")), "ab", 0, 0);
  TEST_REGISTERS (BRACES_TO_OPS (PARENS_TO_OPS ("(a*){0,3}b")), "aaaab", 0, 5, 4, 4, -1, -1);

  test_match (BRACES_TO_OPS (PARENS_TO_OPS ("(a*){1,3}b")), "b");
  test_match (BRACES_TO_OPS (PARENS_TO_OPS ("(a*){1,3}b")), "aaab");
  test_fastmap (BRACES_TO_OPS (PARENS_TO_OPS ("(a*){1,3}b")), "ab", 0, 0);

  test_match (BRACES_TO_OPS (PARENS_TO_OPS ("(a*){1,1}ab")), "aaaab");
  TEST_REGISTERS (BRACES_TO_OPS (PARENS_TO_OPS ("(a*){1,1}ab")), "aaaab", 0, 5, 0, 3, -1, -1);

  test_match (BRACES_TO_OPS (".{0,3}b"), "b");
  test_match (BRACES_TO_OPS (".{0,3}b"), "ab");

  test_match (BRACES_TO_OPS ("[a]{0,3}b"), "b");
  test_match (BRACES_TO_OPS ("[a]{0,3}b"), "aaab");
  test_fastmap (BRACES_TO_OPS ("[a]{0,3}b"), "ab", 0, 0);
  test_match (BRACES_TO_OPS ("[^a]{0,3}b"), "bcdb");
  test_match (BRACES_TO_OPS ("ab{0,3}c"), "abbbc");
  test_match (BRACES_TO_OPS ("[[:digit:]]{0,3}d"), "123d");
  test_fastmap (BRACES_TO_OPS ("[[:digit:]]{0,3}d"), "0123456789d", 0, 0);

  test_match (BRACES_TO_OPS ("\\*{0,3}a"), "***a");
  test_match (BRACES_TO_OPS (".{0,3}b"), "aaab");
  test_match (BRACES_TO_OPS ("a{0,3}a"), "aaa");
						/* Backtracking.  */
  test_fastmap (BRACES_TO_OPS (PARENS_TO_OPS ("(a{1,})*a")), "a", 0, 0);
  test_match (BRACES_TO_OPS (PARENS_TO_OPS ("(a{1,})*a")), "a");
  TEST_REGISTERS (BRACES_TO_OPS (PARENS_TO_OPS ("(a{1,})*a")), "a", 0, 1, -1, -1, -1, -1);

  test_fastmap (BRACES_TO_OPS (PARENS_TO_OPS ("(a{2,})*aa")), "aa", 0, 0);
  test_match (BRACES_TO_OPS (PARENS_TO_OPS ("(a{2,})*aa")), "aa");
  TEST_REGISTERS (BRACES_TO_OPS (PARENS_TO_OPS ("(a{2,})*aa")), "aa", 0, 2, -1, -1, -1, -1);

  test_match (BRACES_TO_OPS ("a{2}*"), "");
  test_match (BRACES_TO_OPS ("a{2}*"), "aa");

  test_match (BRACES_TO_OPS ("a{1}*"), "");
  test_match (BRACES_TO_OPS ("a{1}*"), "a");
  test_match (BRACES_TO_OPS ("a{1}*"), "aa");

  test_match (BRACES_TO_OPS ("a{1}{1}"), "a");

  test_match (BRACES_TO_OPS ("a{1}{1}{1}"), "a");
  test_match (BRACES_TO_OPS ("a{1}{1}{2}"), "aa");

  test_match (BRACES_TO_OPS ("a{1}{1}*"), "");
  test_match (BRACES_TO_OPS ("a{1}{1}*"), "a");
  test_match (BRACES_TO_OPS ("a{1}{1}*"), "aa");
  test_match (BRACES_TO_OPS ("a{1}{1}*"), "aaa");

  test_match (BRACES_TO_OPS ("a{1}{2}"), "aa");
  test_match (BRACES_TO_OPS ("a{2}{1}"), "aa");


  test_should_match = false;

  test_match (BRACES_TO_OPS ("a{0}"), "a");
  test_match (BRACES_TO_OPS ("a{0,}"), "b");
  test_match (BRACES_TO_OPS ("a{1}"), "");
  test_match (BRACES_TO_OPS ("a{1}"), "aa");
  test_match (BRACES_TO_OPS ("a{1,}"), "");
  test_match (BRACES_TO_OPS ("a{1,}"), "b");
  test_match (BRACES_TO_OPS ("a{0,0}"), "a");
  test_match (BRACES_TO_OPS ("a{0,1}"), "aa");
  test_match (BRACES_TO_OPS ("a{0,1}"), "b");
  test_match (BRACES_TO_OPS ("a{1,3}"), "");
  test_match (BRACES_TO_OPS ("a{1,3}"), "aaaa");
  test_match (BRACES_TO_OPS ("a{1,3}"), "b");
  test_match (BRACES_TO_OPS (PARENS_TO_OPS ("(a){1,3}b")), "aaaab");
  test_match (BRACES_TO_OPS (PARENS_TO_OPS ("(a*){1,3}b")), "bb");
  test_match (BRACES_TO_OPS ("[a]{0,3}"), "aaaa");
  test_match (BRACES_TO_OPS ("[^a]{0,3}b"), "ab");
  test_match (BRACES_TO_OPS ("ab{0,3}c"), "abababc");
  test_match (BRACES_TO_OPS ("[:alpha:]{0,3}d"), "123d");
  test_match (BRACES_TO_OPS ("\\^{1,3}a"), "a");
  test_match (BRACES_TO_OPS (".{0,3}b"), "aaaab");

  printf ("\nFinished POSIX interval tests.\n");
}
OpenPOWER on IntegriCloud