|
|
@ -212,12 +212,19 @@ var reTests = []struct {
|
|
|
|
{`ab*bc`, nil, `abc`, []Group{{0, 3}}},
|
|
|
|
{`ab*bc`, nil, `abc`, []Group{{0, 3}}},
|
|
|
|
{`ab*bc`, nil, `abbc`, []Group{{0, 4}}},
|
|
|
|
{`ab*bc`, nil, `abbc`, []Group{{0, 4}}},
|
|
|
|
{`ab*bc`, nil, `abbbbc`, []Group{{0, 6}}},
|
|
|
|
{`ab*bc`, nil, `abbbbc`, []Group{{0, 6}}},
|
|
|
|
|
|
|
|
{`ab{0,}c`, nil, `abbbbc`, []Group{{0, 6}}},
|
|
|
|
{`ab+bc`, nil, `abbc`, []Group{{0, 4}}},
|
|
|
|
{`ab+bc`, nil, `abbc`, []Group{{0, 4}}},
|
|
|
|
{`ab+bc`, nil, `abc`, []Group{}},
|
|
|
|
{`ab+bc`, nil, `abc`, []Group{}},
|
|
|
|
{`ab+bc`, nil, `abq`, []Group{}},
|
|
|
|
{`ab+bc`, nil, `abq`, []Group{}},
|
|
|
|
|
|
|
|
{`ab{1,}bc`, nil, `abq`, []Group{}},
|
|
|
|
{`ab+bc`, nil, `abbbbc`, []Group{{0, 6}}},
|
|
|
|
{`ab+bc`, nil, `abbbbc`, []Group{{0, 6}}},
|
|
|
|
|
|
|
|
{`ab{1,}bc`, nil, `abbbbc`, []Group{{0, 6}}},
|
|
|
|
|
|
|
|
{`ab{1,3}bc`, nil, `abbbbc`, []Group{{0, 6}}},
|
|
|
|
|
|
|
|
{`ab{3,4}bc`, nil, `abbbbc`, []Group{{0, 6}}},
|
|
|
|
|
|
|
|
{`ab{4,5}bc`, nil, `abbbbc`, []Group{}},
|
|
|
|
{`ab?bc`, nil, `abbc`, []Group{{0, 4}}},
|
|
|
|
{`ab?bc`, nil, `abbc`, []Group{{0, 4}}},
|
|
|
|
{`ab?bc`, nil, `abc`, []Group{{0, 3}}},
|
|
|
|
{`ab?bc`, nil, `abc`, []Group{{0, 3}}},
|
|
|
|
|
|
|
|
{`ab{0,1}bc`, nil, `abc`, []Group{{0, 3}}},
|
|
|
|
{`ab?bc`, nil, `abbbbc`, []Group{}},
|
|
|
|
{`ab?bc`, nil, `abbbbc`, []Group{}},
|
|
|
|
{`ab?c`, nil, `abc`, []Group{{0, 3}}},
|
|
|
|
{`ab?c`, nil, `abc`, []Group{{0, 3}}},
|
|
|
|
{`^abc$`, nil, `abc`, []Group{{0, 3}}},
|
|
|
|
{`^abc$`, nil, `abc`, []Group{{0, 3}}},
|
|
|
@ -281,6 +288,7 @@ var reTests = []struct {
|
|
|
|
{`a\(*b`, nil, `a((b`, []Group{{0, 4}}},
|
|
|
|
{`a\(*b`, nil, `a((b`, []Group{{0, 4}}},
|
|
|
|
{`a\\b`, nil, `a\b`, []Group{{0, 3}}},
|
|
|
|
{`a\\b`, nil, `a\b`, []Group{{0, 3}}},
|
|
|
|
{`a+b+c`, nil, `aabbabc`, []Group{{4, 7}}},
|
|
|
|
{`a+b+c`, nil, `aabbabc`, []Group{{4, 7}}},
|
|
|
|
|
|
|
|
{`a{1,}b{1,}c`, nil, `aabbabc`, []Group{{4, 7}}},
|
|
|
|
{`)(`, nil, `-`, nil},
|
|
|
|
{`)(`, nil, `-`, nil},
|
|
|
|
{`[^ab]*`, nil, `cde`, []Group{{0, 3}, {3, 3}}},
|
|
|
|
{`[^ab]*`, nil, `cde`, []Group{{0, 3}, {3, 3}}},
|
|
|
|
{`abc`, nil, ``, []Group{}},
|
|
|
|
{`abc`, nil, ``, []Group{}},
|
|
|
@ -298,6 +306,17 @@ var reTests = []struct {
|
|
|
|
{`[k]`, nil, `ab`, []Group{}},
|
|
|
|
{`[k]`, nil, `ab`, []Group{}},
|
|
|
|
{`a[-]?c`, nil, `ac`, []Group{{0, 2}}},
|
|
|
|
{`a[-]?c`, nil, `ac`, []Group{{0, 2}}},
|
|
|
|
{`^(.+)?B`, nil, `AB`, []Group{{0, 2}}},
|
|
|
|
{`^(.+)?B`, nil, `AB`, []Group{{0, 2}}},
|
|
|
|
|
|
|
|
{`\0009`, nil, "\x009", []Group{{0, 2}}},
|
|
|
|
|
|
|
|
{`\141`, nil, "a", []Group{{0, 1}}},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{`*a`, nil, ``, nil},
|
|
|
|
|
|
|
|
{`(*)b`, nil, ``, nil},
|
|
|
|
|
|
|
|
{`a**`, nil, ``, nil},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{`^`, nil, `abc`, []Group{{0, 0}}},
|
|
|
|
|
|
|
|
{`$`, nil, `abc`, []Group{{3, 3}}},
|
|
|
|
|
|
|
|
{`a[b-]`, nil, `a-`, []Group{{0, 2}}},
|
|
|
|
|
|
|
|
{`a[b-a]`, nil, `a-`, nil},
|
|
|
|
|
|
|
|
|
|
|
|
// At this point, the python test suite has a bunch
|
|
|
|
// At this point, the python test suite has a bunch
|
|
|
|
// of backreference tests. Since my engine doesn't
|
|
|
|
// of backreference tests. Since my engine doesn't
|
|
|
@ -340,8 +359,11 @@ var groupTests = []struct {
|
|
|
|
{`((a))`, nil, `abc`, []Match{[]Group{{0, 1}, {0, 1}, {0, 1}}}},
|
|
|
|
{`((a))`, nil, `abc`, []Match{[]Group{{0, 1}, {0, 1}, {0, 1}}}},
|
|
|
|
{`(a)b(c)`, nil, `abc`, []Match{[]Group{{0, 3}, {0, 1}, {2, 3}}}},
|
|
|
|
{`(a)b(c)`, nil, `abc`, []Match{[]Group{{0, 3}, {0, 1}, {2, 3}}}},
|
|
|
|
{`(a+|b)*`, nil, `ab`, []Match{[]Group{{0, 2}, {1, 2}}, []Group{{2, 2}}}},
|
|
|
|
{`(a+|b)*`, nil, `ab`, []Match{[]Group{{0, 2}, {1, 2}}, []Group{{2, 2}}}},
|
|
|
|
|
|
|
|
{`(a+|b){0,}`, nil, `ab`, []Match{[]Group{{0, 2}, {1, 2}}, []Group{{2, 2}}}},
|
|
|
|
{`(a+|b)+`, nil, `ab`, []Match{[]Group{{0, 2}, {1, 2}}}},
|
|
|
|
{`(a+|b)+`, nil, `ab`, []Match{[]Group{{0, 2}, {1, 2}}}},
|
|
|
|
|
|
|
|
{`(a+|b){1,}`, nil, `ab`, []Match{[]Group{{0, 2}, {1, 2}}}},
|
|
|
|
{`(a+|b)?`, nil, `ab`, []Match{[]Group{{0, 1}, {0, 1}}, []Group{{1, 2}, {1, 2}}, []Group{{2, 2}}}},
|
|
|
|
{`(a+|b)?`, nil, `ab`, []Match{[]Group{{0, 1}, {0, 1}}, []Group{{1, 2}, {1, 2}}, []Group{{2, 2}}}},
|
|
|
|
|
|
|
|
{`(a+|b){0,1}`, nil, `ab`, []Match{[]Group{{0, 1}, {0, 1}}, []Group{{1, 2}, {1, 2}}, []Group{{2, 2}}}},
|
|
|
|
{`(a|b|c|d|e)f`, nil, `ef`, []Match{[]Group{{0, 2}, {0, 1}}}},
|
|
|
|
{`(a|b|c|d|e)f`, nil, `ef`, []Match{[]Group{{0, 2}, {0, 1}}}},
|
|
|
|
{`(ab|cd)e`, nil, `abcde`, []Match{[]Group{{2, 5}, {2, 4}}}},
|
|
|
|
{`(ab|cd)e`, nil, `abcde`, []Match{[]Group{{2, 5}, {2, 4}}}},
|
|
|
|
{`^(ab|cd)e`, nil, `abcde`, []Match{}},
|
|
|
|
{`^(ab|cd)e`, nil, `abcde`, []Match{}},
|
|
|
@ -361,6 +383,7 @@ var groupTests = []struct {
|
|
|
|
{`(bc+d$|ef*g.|h?i(j|k))`, nil, `bcdd`, []Match{}},
|
|
|
|
{`(bc+d$|ef*g.|h?i(j|k))`, nil, `bcdd`, []Match{}},
|
|
|
|
{`(bc+d$|ef*g.|h?i(j|k))`, nil, `reffgz`, []Match{[]Group{{1, 6}, {1, 6}}}},
|
|
|
|
{`(bc+d$|ef*g.|h?i(j|k))`, nil, `reffgz`, []Match{[]Group{{1, 6}, {1, 6}}}},
|
|
|
|
{`(((((((((a)))))))))`, nil, `a`, []Match{[]Group{{0, 1}, {0, 1}, {0, 1}, {0, 1}, {0, 1}, {0, 1}, {0, 1}, {0, 1}, {0, 1}, {0, 1}}}},
|
|
|
|
{`(((((((((a)))))))))`, nil, `a`, []Match{[]Group{{0, 1}, {0, 1}, {0, 1}, {0, 1}, {0, 1}, {0, 1}, {0, 1}, {0, 1}, {0, 1}, {0, 1}}}},
|
|
|
|
|
|
|
|
{`(((((((((a)))))))))\41`, nil, `a`, []Match{[]Group{{0, 2}, {0, 1}, {0, 1}, {0, 1}, {0, 1}, {0, 1}, {0, 1}, {0, 1}, {0, 1}, {0, 1}}}},
|
|
|
|
{`(.*)c(.*)`, nil, `abcde`, []Match{[]Group{{0, 5}, {0, 2}, {3, 5}}}},
|
|
|
|
{`(.*)c(.*)`, nil, `abcde`, []Match{[]Group{{0, 5}, {0, 2}, {3, 5}}}},
|
|
|
|
{`\((.*), (.*)\)`, nil, `(a, b)`, []Match{[]Group{{0, 6}, {1, 2}, {4, 5}}}},
|
|
|
|
{`\((.*), (.*)\)`, nil, `(a, b)`, []Match{[]Group{{0, 6}, {1, 2}, {4, 5}}}},
|
|
|
|
|
|
|
|
|
|
|
@ -379,6 +402,9 @@ var groupTests = []struct {
|
|
|
|
{`([abc]*)x`, nil, `abc`, []Match{}},
|
|
|
|
{`([abc]*)x`, nil, `abc`, []Match{}},
|
|
|
|
{`([xyz]*)x`, nil, `abcx`, []Match{[]Group{{3, 4}, {3, 3}}}},
|
|
|
|
{`([xyz]*)x`, nil, `abcx`, []Match{[]Group{{3, 4}, {3, 3}}}},
|
|
|
|
{`(a)+b|aac`, nil, `aac`, []Match{[]Group{{0, 3}}}},
|
|
|
|
{`(a)+b|aac`, nil, `aac`, []Match{[]Group{{0, 3}}}},
|
|
|
|
|
|
|
|
{`([abc])*d`, nil, `abbbcd`, []Match{[]Group{{0, 6}, {4, 5}}}},
|
|
|
|
|
|
|
|
{`([abc])*bcd`, nil, `abcd`, []Match{[]Group{{0, 4}, {0, 1}}}},
|
|
|
|
|
|
|
|
{`^(ab|cd)e`, nil, `abcde`, []Match{}},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func TestFindAllMatches(t *testing.T) {
|
|
|
|
func TestFindAllMatches(t *testing.T) {
|
|
|
|