11 #include "re2/regexp.h"
28 { { { 10, 20 }, {-1} }, -1,
29 { { 10, 20 }, {-1} } },
31 { { { 10, 20 }, { 20, 30 }, {-1} }, -1,
32 { { 10, 30 }, {-1} } },
34 { { { 10, 20 }, { 30, 40 }, { 20, 30 }, {-1} }, -1,
35 { { 10, 40 }, {-1} } },
37 { { { 0, 50 }, { 20, 30 }, {-1} }, -1,
38 { { 0, 50 }, {-1} } },
40 { { { 10, 11 }, { 13, 14 }, { 16, 17 }, { 19, 20 }, { 22, 23 }, {-1} }, -1,
41 { { 10, 11 }, { 13, 14 }, { 16, 17 }, { 19, 20 }, { 22, 23 }, {-1} } },
43 { { { 13, 14 }, { 10, 11 }, { 22, 23 }, { 19, 20 }, { 16, 17 }, {-1} }, -1,
44 { { 10, 11 }, { 13, 14 }, { 16, 17 }, { 19, 20 }, { 22, 23 }, {-1} } },
46 { { { 13, 14 }, { 10, 11 }, { 22, 23 }, { 19, 20 }, { 16, 17 }, {-1} }, -1,
47 { { 10, 11 }, { 13, 14 }, { 16, 17 }, { 19, 20 }, { 22, 23 }, {-1} } },
49 { { { 13, 14 }, { 10, 11 }, { 22, 23 }, { 19, 20 }, { 16, 17 }, { 5, 25 }, {-1} }, -1,
50 { { 5, 25 }, {-1} } },
52 { { { 13, 14 }, { 10, 11 }, { 22, 23 }, { 19, 20 }, { 16, 17 }, { 12, 21 }, {-1} }, -1,
53 { { 10, 23 }, {-1} } },
59 { { { 0, 50 }, {-1} }, -1,
60 { { 0, 50 }, {-1} } },
62 { { { 50,
Runemax }, {-1} }, -1,
66 { { { 50,
Runemax }, {-1} }, 255,
67 { { 50, 255 }, {-1} } },
69 { { { 50,
Runemax }, {-1} }, 65535,
70 { { 50, 65535 }, {-1} } },
75 { { { 50, 60 }, { 250, 260 }, { 350, 360 }, {-1} }, 255,
76 { { 50, 60 }, { 250, 255 }, {-1} } },
78 { { { 50, 60 }, {-1} }, 255,
79 { { 50, 60 }, {-1} } },
81 { { { 350, 360 }, {-1} }, 255,
88 template <
typename CharClass>
95 for (
int k = 0; t->add[
k].lo >= 0;
k++)
96 printf(
" %d-%d", t->add[
k].lo, t->add[
k].hi);
99 printf(
"Removed > %d\n", t->remove);
101 for (
int k = 0; t->final[
k].lo >= 0;
k++)
102 printf(
" %d-%d", t->final[
k].lo, t->final[
k].hi);
113 for (
int j = 0; t->final[j].lo >= 0; j++)
114 if (t->final[j].lo <= x && x <= t->
final[j].hi)
121 CharClass*
Negate(CharClass *cc) {
125 void Delete(CharClass* cc) {
129 CharClassBuilder*
Negate(CharClassBuilder* cc) {
130 CharClassBuilder* ncc = cc->Copy();
135 void Delete(CharClassBuilder* cc) {
139 template <
typename CharClass>
143 for (
int j = 0;
t->final[
j].lo >= 0;
j++, ++
it) {
144 if (
it == cc->end() ||
145 it->lo !=
t->final[j].lo ||
146 it->hi !=
t->final[j].hi) {
152 if (
it != cc->end()) {
156 if (cc->size() !=
size) {
158 printf(
"wrong size: want %d have %d\n",
size, cc->size());
162 for (
int j = 0;
j < 101;
j++) {
167 printf(
"want contains(%d)=%d, got %d\n",
173 CharClass* ncc =
Negate(cc);
174 for (
int j = 0;
j < 101;
j++) {
179 Broke(
"ncc", NULL, ncc);
180 printf(
"want ncc contains(%d)!=%d, got %d\n",
185 if (ncc->size() !=
Runemax+1 - cc->size()) {
187 Broke(
"ncc", NULL, ncc);
188 printf(
"ncc size should be %d is %d\n",
189 Runemax+1 - cc->size(), ncc->size());
198 TEST(TestCharClassBuilder, Adds) {
201 CharClassBuilder ccb;
203 for (
int j = 0;
t->add[
j].lo >= 0;
j++)
204 ccb.AddRange(
t->add[j].lo,
t->add[j].hi);
206 ccb.RemoveAbove(
t->remove);
207 if (!
CorrectCC(&ccb, t,
"before copy (CharClassBuilder)"))
209 CharClass* cc = ccb.GetCharClass();
210 if (!
CorrectCC(cc, t,
"before copy (CharClass)"))
214 CharClassBuilder *ccb1 = ccb.Copy();
215 if (!
CorrectCC(ccb1, t,
"after copy (CharClassBuilder)"))
217 cc = ccb.GetCharClass();
218 if (!
CorrectCC(cc, t,
"after copy (CharClass)"))