Started adding tests from Python's RE test suite

master
Aadhavan Srinivasan 2 days ago
parent 099612ae7f
commit 9dc4fd4595

@ -110,6 +110,9 @@ var reTests = []struct {
{`\d{3,4}`, "ababab555", []Group{{6, 9}}},
{`\bpaint\b`, "paints", []Group{}},
{`\b\w{5}\b`, "paint", []Group{{0, 5}}},
{`[^\w]`, "abcdef1230[]qq';;'", []Group{{10, 11}, {11, 12}, {14, 15}, {15, 16}, {16, 17}, {17, 18}}},
{`[^\W]`, "abcdef1230[]qq';;'", []Group{{0, 1}, {1, 2}, {2, 3}, {3, 4}, {4, 5}, {5, 6}, {6, 7}, {7, 8}, {8, 9}, {9, 10}, {12, 13}, {13, 14}}},
{`[\[\]]`, "a[b[l]]", []Group{{1, 2}, {3, 4}, {5, 6}, {6, 7}}},
// Unicode tests
{`.+`, "úïäö´«åæïëòöê»éãçâï«úïòíñ", []Group{{0, 25}}},
@ -156,6 +159,24 @@ var reTests = []struct {
{"(?<=f)f+(?=f)", "fffff", []Group{{1, 4}}},
{"(?<=f)f+(?=f)", "fffffa", []Group{{1, 4}}},
// Test cases from Python's RE test suite
{`[\1]`, "\x01", []Group{{0, 1}}},
{`\0`, "\x00", []Group{{0, 1}}},
{`[\0a]`, "\x00", []Group{{0, 1}}},
{`[\0a]`, "\x00", []Group{{0, 1}}},
{`[a\0]`, "\x00", []Group{{0, 1}}},
{`[^a\0]`, "\x00", []Group{}},
{`\a[\b]\f\n\r\t\v`, "\a\b\f\n\r\t\v", []Group{{0, 7}}},
{`[\a][\b][\f][\n][\r][\t][\v]`, "\a\b\f\n\r\t\v", []Group{{0, 7}}},
{`\u`, "", nil},
{`\xff`, "ÿ", []Group{{0, 1}}},
{`\x00ffffffffffffff`, "\xff", []Group{}},
{`\x00f`, "\x0f", []Group{}},
{`\x00fe`, "\xfe", []Group{}},
{`^\w+=(\\[\000-\277]|[^\n\\])*`, "SRC=eval.c g.c blah blah blah \\\\\n\tapes.c", []Group{{0, 32}}},
// Todo - add numeric range tests
}
@ -183,6 +204,7 @@ var groupTests = []struct {
{"(a?)a?", "ab", []Match{[]Group{{0, 1}, {0, 1}}, []Group{{1, 1}, {1, 1}}, []Group{{2, 2}, {2, 2}}}},
{"(a?)a?", "aa", []Match{[]Group{{0, 2}, {0, 1}}, []Group{{2, 2}, {2, 2}}}},
{"a((b.d){3})", "abfdbhdbid", []Match{[]Group{{0, 10}, {1, 10}, {7, 10}}}},
{`(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\071`, `abcdefghijkl9`, []Match{[]Group{{0, 13}, {0, 1}, {1, 2}, {2, 3}, {3, 4}, {4, 5}, {5, 6}, {6, 7}, {7, 8}, {8, 9}, {9, 10}, {10, 11}, {11, 12}}}},
}
func TestFindAllMatches(t *testing.T) {
@ -190,15 +212,18 @@ func TestFindAllMatches(t *testing.T) {
t.Run(test.re+" "+test.str, func(t *testing.T) {
regComp, err := Compile(test.re)
if err != nil {
panic(err)
}
matchIndices := FindAllMatches(regComp, test.str)
zeroGroups := make([]Group, len(matchIndices))
for i, m := range matchIndices {
zeroGroups[i] = m[0]
}
if !slices.Equal(test.result, zeroGroups) {
t.Errorf("Wanted %v Got %v\n", test.result, zeroGroups)
if test.result != nil {
panic(err)
}
} else {
matchIndices := FindAllMatches(regComp, test.str)
zeroGroups := make([]Group, len(matchIndices))
for i, m := range matchIndices {
zeroGroups[i] = m[0]
}
if !slices.Equal(test.result, zeroGroups) {
t.Errorf("Wanted %v Got %v\n", test.result, zeroGroups)
}
}
})
}
@ -209,17 +234,20 @@ func TestFindString(t *testing.T) {
t.Run(test.re+" "+test.str, func(t *testing.T) {
regComp, err := Compile(test.re)
if err != nil {
panic(err)
}
foundString := FindString(regComp, test.str)
if len(test.result) == 0 {
if foundString != "" {
t.Errorf("Expected no match got %v\n", foundString)
if test.result != nil {
panic(err)
}
} else {
expectedString := test.str[test.result[0].startIdx:test.result[0].endIdx]
if foundString != foundString {
t.Errorf("Wanted %v Got %v\n", expectedString, foundString)
foundString := FindString(regComp, test.str)
if len(test.result) == 0 {
if foundString != "" {
t.Errorf("Expected no match got %v\n", foundString)
}
} else {
expectedString := test.str[test.result[0].startIdx:test.result[0].endIdx]
if foundString != expectedString {
t.Errorf("Wanted %v Got %v\n", expectedString, foundString)
}
}
}
})
@ -231,7 +259,9 @@ func TestFindAllGroups(t *testing.T) {
t.Run(test.re+" "+test.str, func(t *testing.T) {
regComp, err := Compile(test.re)
if err != nil {
panic(err)
if test.result != nil {
panic(err)
}
}
matchIndices := FindAllMatches(regComp, test.str)
for i := range matchIndices {

Loading…
Cancel
Save