641 lines
12 KiB
TOML
641 lines
12 KiB
TOML
# Basic multi-regex tests.
|
|
|
|
[[test]]
|
|
name = "basic10"
|
|
regex = ["a", "a"]
|
|
haystack = "a"
|
|
matches = [
|
|
{ id = 0, span = [0, 1] },
|
|
{ id = 1, span = [0, 1] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "basic10-leftmost-first"
|
|
regex = ["a", "a"]
|
|
haystack = "a"
|
|
matches = [
|
|
{ id = 0, span = [0, 1] },
|
|
]
|
|
match-kind = "leftmost-first"
|
|
search-kind = "leftmost"
|
|
|
|
[[test]]
|
|
name = "basic20"
|
|
regex = ["a", "a"]
|
|
haystack = "ba"
|
|
matches = [
|
|
{ id = 0, span = [1, 2] },
|
|
{ id = 1, span = [1, 2] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "basic30"
|
|
regex = ["a", "b"]
|
|
haystack = "a"
|
|
matches = [
|
|
{ id = 0, span = [0, 1] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "basic40"
|
|
regex = ["a", "b"]
|
|
haystack = "b"
|
|
matches = [
|
|
{ id = 1, span = [0, 1] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "basic50"
|
|
regex = ["a|b", "b|a"]
|
|
haystack = "b"
|
|
matches = [
|
|
{ id = 0, span = [0, 1] },
|
|
{ id = 1, span = [0, 1] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "basic60"
|
|
regex = ["foo", "oo"]
|
|
haystack = "foo"
|
|
matches = [
|
|
{ id = 0, span = [0, 3] },
|
|
{ id = 1, span = [1, 3] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "basic60-leftmost-first"
|
|
regex = ["foo", "oo"]
|
|
haystack = "foo"
|
|
matches = [
|
|
{ id = 0, span = [0, 3] },
|
|
]
|
|
match-kind = "leftmost-first"
|
|
search-kind = "leftmost"
|
|
|
|
[[test]]
|
|
name = "basic61"
|
|
regex = ["oo", "foo"]
|
|
haystack = "foo"
|
|
matches = [
|
|
{ id = 1, span = [0, 3] },
|
|
{ id = 0, span = [1, 3] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "basic61-leftmost-first"
|
|
regex = ["oo", "foo"]
|
|
haystack = "foo"
|
|
matches = [
|
|
{ id = 1, span = [0, 3] },
|
|
]
|
|
match-kind = "leftmost-first"
|
|
search-kind = "leftmost"
|
|
|
|
[[test]]
|
|
name = "basic70"
|
|
regex = ["abcd", "bcd", "cd", "d"]
|
|
haystack = "abcd"
|
|
matches = [
|
|
{ id = 0, span = [0, 4] },
|
|
{ id = 1, span = [1, 4] },
|
|
{ id = 2, span = [2, 4] },
|
|
{ id = 3, span = [3, 4] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "basic71"
|
|
regex = ["bcd", "cd", "d", "abcd"]
|
|
haystack = "abcd"
|
|
matches = [
|
|
{ id = 3, span = [0, 4] },
|
|
]
|
|
match-kind = "leftmost-first"
|
|
search-kind = "leftmost"
|
|
|
|
[[test]]
|
|
name = "basic80"
|
|
regex = ["^foo", "bar$"]
|
|
haystack = "foo"
|
|
matches = [
|
|
{ id = 0, span = [0, 3] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "basic81"
|
|
regex = ["^foo", "bar$"]
|
|
haystack = "foo bar"
|
|
matches = [
|
|
{ id = 0, span = [0, 3] },
|
|
{ id = 1, span = [4, 7] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "basic82"
|
|
regex = ["^foo", "bar$"]
|
|
haystack = "bar"
|
|
matches = [
|
|
{ id = 1, span = [0, 3] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "basic90"
|
|
regex = ["[a-z]+$", "foo"]
|
|
haystack = "01234 foo"
|
|
matches = [
|
|
{ id = 0, span = [8, 9] },
|
|
{ id = 0, span = [7, 9] },
|
|
{ id = 0, span = [6, 9] },
|
|
{ id = 1, span = [6, 9] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "basic91"
|
|
regex = ["[a-z]+$", "foo"]
|
|
haystack = "foo 01234"
|
|
matches = [
|
|
{ id = 1, span = [0, 3] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "basic100"
|
|
regex = [".*?", "a"]
|
|
haystack = "zzza"
|
|
matches = [
|
|
{ id = 0, span = [0, 0] },
|
|
{ id = 0, span = [1, 1] },
|
|
{ id = 0, span = [0, 1] },
|
|
{ id = 0, span = [2, 2] },
|
|
{ id = 0, span = [1, 2] },
|
|
{ id = 0, span = [0, 2] },
|
|
{ id = 0, span = [3, 3] },
|
|
{ id = 0, span = [2, 3] },
|
|
{ id = 0, span = [1, 3] },
|
|
{ id = 0, span = [0, 3] },
|
|
{ id = 0, span = [4, 4] },
|
|
{ id = 0, span = [3, 4] },
|
|
{ id = 0, span = [2, 4] },
|
|
{ id = 0, span = [1, 4] },
|
|
{ id = 0, span = [0, 4] },
|
|
{ id = 1, span = [3, 4] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "basic101"
|
|
regex = [".*", "a"]
|
|
haystack = "zzza"
|
|
matches = [
|
|
{ id = 0, span = [0, 0] },
|
|
{ id = 0, span = [1, 1] },
|
|
{ id = 0, span = [0, 1] },
|
|
{ id = 0, span = [2, 2] },
|
|
{ id = 0, span = [1, 2] },
|
|
{ id = 0, span = [0, 2] },
|
|
{ id = 0, span = [3, 3] },
|
|
{ id = 0, span = [2, 3] },
|
|
{ id = 0, span = [1, 3] },
|
|
{ id = 0, span = [0, 3] },
|
|
{ id = 0, span = [4, 4] },
|
|
{ id = 0, span = [3, 4] },
|
|
{ id = 0, span = [2, 4] },
|
|
{ id = 0, span = [1, 4] },
|
|
{ id = 0, span = [0, 4] },
|
|
{ id = 1, span = [3, 4] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "basic102"
|
|
regex = [".*", "a"]
|
|
haystack = "zzz"
|
|
matches = [
|
|
{ id = 0, span = [0, 0] },
|
|
{ id = 0, span = [1, 1] },
|
|
{ id = 0, span = [0, 1] },
|
|
{ id = 0, span = [2, 2] },
|
|
{ id = 0, span = [1, 2] },
|
|
{ id = 0, span = [0, 2] },
|
|
{ id = 0, span = [3, 3] },
|
|
{ id = 0, span = [2, 3] },
|
|
{ id = 0, span = [1, 3] },
|
|
{ id = 0, span = [0, 3] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "basic110"
|
|
regex = ['\ba\b']
|
|
haystack = "hello a bye"
|
|
matches = [
|
|
{ id = 0, span = [6, 7] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "basic111"
|
|
regex = ['\ba\b', '\be\b']
|
|
haystack = "hello a bye e"
|
|
matches = [
|
|
{ id = 0, span = [6, 7] },
|
|
{ id = 1, span = [12, 13] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "basic120"
|
|
regex = ["a"]
|
|
haystack = "a"
|
|
matches = [
|
|
{ id = 0, span = [0, 1] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "basic121"
|
|
regex = [".*a"]
|
|
haystack = "a"
|
|
matches = [
|
|
{ id = 0, span = [0, 1] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "basic122"
|
|
regex = [".*a", "β"]
|
|
haystack = "β"
|
|
matches = [
|
|
{ id = 1, span = [0, 2] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "basic130"
|
|
regex = ["ab", "b"]
|
|
haystack = "ba"
|
|
matches = [
|
|
{ id = 1, span = [0, 1] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
# These test cases where one of the regexes matches the empty string.
|
|
|
|
[[test]]
|
|
name = "empty10"
|
|
regex = ["", "a"]
|
|
haystack = "abc"
|
|
matches = [
|
|
{ id = 0, span = [0, 0] },
|
|
{ id = 1, span = [0, 1] },
|
|
{ id = 0, span = [1, 1] },
|
|
{ id = 0, span = [2, 2] },
|
|
{ id = 0, span = [3, 3] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "empty10-leftmost-first"
|
|
regex = ["", "a"]
|
|
haystack = "abc"
|
|
matches = [
|
|
{ id = 0, span = [0, 0] },
|
|
{ id = 0, span = [1, 1] },
|
|
{ id = 0, span = [2, 2] },
|
|
{ id = 0, span = [3, 3] },
|
|
]
|
|
match-kind = "leftmost-first"
|
|
search-kind = "leftmost"
|
|
|
|
[[test]]
|
|
name = "empty11"
|
|
regex = ["a", ""]
|
|
haystack = "abc"
|
|
matches = [
|
|
{ id = 1, span = [0, 0] },
|
|
{ id = 0, span = [0, 1] },
|
|
{ id = 1, span = [1, 1] },
|
|
{ id = 1, span = [2, 2] },
|
|
{ id = 1, span = [3, 3] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "empty11-leftmost-first"
|
|
regex = ["a", ""]
|
|
haystack = "abc"
|
|
matches = [
|
|
{ id = 0, span = [0, 1] },
|
|
{ id = 1, span = [2, 2] },
|
|
{ id = 1, span = [3, 3] },
|
|
]
|
|
match-kind = "leftmost-first"
|
|
search-kind = "leftmost"
|
|
|
|
[[test]]
|
|
name = "empty20"
|
|
regex = ["", "b"]
|
|
haystack = "abc"
|
|
matches = [
|
|
{ id = 0, span = [0, 0] },
|
|
{ id = 0, span = [1, 1] },
|
|
{ id = 1, span = [1, 2] },
|
|
{ id = 0, span = [2, 2] },
|
|
{ id = 0, span = [3, 3] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "empty20-leftmost-first"
|
|
regex = ["", "b"]
|
|
haystack = "abc"
|
|
matches = [
|
|
{ id = 0, span = [0, 0] },
|
|
{ id = 0, span = [1, 1] },
|
|
{ id = 0, span = [2, 2] },
|
|
{ id = 0, span = [3, 3] },
|
|
]
|
|
match-kind = "leftmost-first"
|
|
search-kind = "leftmost"
|
|
|
|
[[test]]
|
|
name = "empty21"
|
|
regex = ["b", ""]
|
|
haystack = "abc"
|
|
matches = [
|
|
{ id = 1, span = [0, 0] },
|
|
{ id = 1, span = [1, 1] },
|
|
{ id = 0, span = [1, 2] },
|
|
{ id = 1, span = [2, 2] },
|
|
{ id = 1, span = [3, 3] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "empty21-leftmost-first"
|
|
regex = ["b", ""]
|
|
haystack = "abc"
|
|
matches = [
|
|
{ id = 1, span = [0, 0] },
|
|
{ id = 0, span = [1, 2] },
|
|
{ id = 1, span = [3, 3] },
|
|
]
|
|
match-kind = "leftmost-first"
|
|
search-kind = "leftmost"
|
|
|
|
[[test]]
|
|
name = "empty22"
|
|
regex = ["(?:)", "b"]
|
|
haystack = "abc"
|
|
matches = [
|
|
{ id = 0, span = [0, 0] },
|
|
{ id = 0, span = [1, 1] },
|
|
{ id = 1, span = [1, 2] },
|
|
{ id = 0, span = [2, 2] },
|
|
{ id = 0, span = [3, 3] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "empty23"
|
|
regex = ["b", "(?:)"]
|
|
haystack = "abc"
|
|
matches = [
|
|
{ id = 1, span = [0, 0] },
|
|
{ id = 1, span = [1, 1] },
|
|
{ id = 0, span = [1, 2] },
|
|
{ id = 1, span = [2, 2] },
|
|
{ id = 1, span = [3, 3] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "empty30"
|
|
regex = ["", "z"]
|
|
haystack = "abc"
|
|
matches = [
|
|
{ id = 0, span = [0, 0] },
|
|
{ id = 0, span = [1, 1] },
|
|
{ id = 0, span = [2, 2] },
|
|
{ id = 0, span = [3, 3] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "empty30-leftmost-first"
|
|
regex = ["", "z"]
|
|
haystack = "abc"
|
|
matches = [
|
|
{ id = 0, span = [0, 0] },
|
|
{ id = 0, span = [1, 1] },
|
|
{ id = 0, span = [2, 2] },
|
|
{ id = 0, span = [3, 3] },
|
|
]
|
|
match-kind = "leftmost-first"
|
|
search-kind = "leftmost"
|
|
|
|
[[test]]
|
|
name = "empty31"
|
|
regex = ["z", ""]
|
|
haystack = "abc"
|
|
matches = [
|
|
{ id = 1, span = [0, 0] },
|
|
{ id = 1, span = [1, 1] },
|
|
{ id = 1, span = [2, 2] },
|
|
{ id = 1, span = [3, 3] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "empty31-leftmost-first"
|
|
regex = ["z", ""]
|
|
haystack = "abc"
|
|
matches = [
|
|
{ id = 1, span = [0, 0] },
|
|
{ id = 1, span = [1, 1] },
|
|
{ id = 1, span = [2, 2] },
|
|
{ id = 1, span = [3, 3] },
|
|
]
|
|
match-kind = "leftmost-first"
|
|
search-kind = "leftmost"
|
|
|
|
[[test]]
|
|
name = "empty40"
|
|
regex = ["c(?:)", "b"]
|
|
haystack = "abc"
|
|
matches = [
|
|
{ id = 1, span = [1, 2] },
|
|
{ id = 0, span = [2, 3] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "empty40-leftmost-first"
|
|
regex = ["c(?:)", "b"]
|
|
haystack = "abc"
|
|
matches = [
|
|
{ id = 1, span = [1, 2] },
|
|
{ id = 0, span = [2, 3] },
|
|
]
|
|
match-kind = "leftmost-first"
|
|
search-kind = "leftmost"
|
|
|
|
# These test cases where there are no matches.
|
|
|
|
[[test]]
|
|
name = "nomatch10"
|
|
regex = ["a", "a"]
|
|
haystack = "b"
|
|
matches = []
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "nomatch20"
|
|
regex = ["^foo", "bar$"]
|
|
haystack = "bar foo"
|
|
matches = []
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "nomatch30"
|
|
regex = []
|
|
haystack = "a"
|
|
matches = []
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
[[test]]
|
|
name = "nomatch40"
|
|
regex = ["^rooted$", '\.log$']
|
|
haystack = "notrooted"
|
|
matches = []
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
|
|
# These test multi-regex searches with capture groups.
|
|
#
|
|
# NOTE: I wrote these tests in the course of developing a first class API for
|
|
# overlapping capturing group matches, but ultimately removed that API because
|
|
# the semantics for overlapping matches aren't totally clear. However, I've
|
|
# left the tests because I believe the semantics for these patterns are clear
|
|
# and because we can still test our "which patterns matched" APIs with them.
|
|
|
|
[[test]]
|
|
name = "caps-010"
|
|
regex = ['^(\w+) (\w+)$', '^(\S+) (\S+)$']
|
|
haystack = "Bruce Springsteen"
|
|
matches = [
|
|
{ id = 0, spans = [[0, 17], [0, 5], [6, 17]] },
|
|
{ id = 1, spans = [[0, 17], [0, 5], [6, 17]] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
unicode = false
|
|
utf8 = false
|
|
|
|
[[test]]
|
|
name = "caps-020"
|
|
regex = ['^(\w+) (\w+)$', '^[A-Z](\S+) [A-Z](\S+)$']
|
|
haystack = "Bruce Springsteen"
|
|
matches = [
|
|
{ id = 0, spans = [[0, 17], [0, 5], [6, 17]] },
|
|
{ id = 1, spans = [[0, 17], [1, 5], [7, 17]] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
unicode = false
|
|
utf8 = false
|
|
|
|
[[test]]
|
|
name = "caps-030"
|
|
regex = ['^(\w+) (\w+)$', '^([A-Z])(\S+) ([A-Z])(\S+)$']
|
|
haystack = "Bruce Springsteen"
|
|
matches = [
|
|
{ id = 0, spans = [[0, 17], [0, 5], [6, 17]] },
|
|
{ id = 1, spans = [[0, 17], [0, 1], [1, 5], [6, 7], [7, 17]] },
|
|
]
|
|
match-kind = "all"
|
|
search-kind = "overlapping"
|
|
unicode = false
|
|
utf8 = false
|
|
|
|
[[test]]
|
|
name = "caps-110"
|
|
regex = ['(\w+) (\w+)', '(\S+) (\S+)']
|
|
haystack = "Bruce Springsteen"
|
|
matches = [
|
|
{ id = 0, spans = [[0, 17], [0, 5], [6, 17]] },
|
|
]
|
|
match-kind = "leftmost-first"
|
|
search-kind = "leftmost"
|
|
unicode = false
|
|
utf8 = false
|
|
|
|
[[test]]
|
|
name = "caps-120"
|
|
regex = ['(\w+) (\w+)', '(\S+) (\S+)']
|
|
haystack = "&ruce $pringsteen"
|
|
matches = [
|
|
{ id = 1, spans = [[0, 17], [0, 5], [6, 17]] },
|
|
]
|
|
match-kind = "leftmost-first"
|
|
search-kind = "leftmost"
|
|
unicode = false
|
|
utf8 = false
|
|
|
|
[[test]]
|
|
name = "caps-121"
|
|
regex = ['(\w+) (\w+)', '(\S+) (\S+)']
|
|
haystack = "&ruce $pringsteen Foo Bar"
|
|
matches = [
|
|
{ id = 1, spans = [[0, 17], [0, 5], [6, 17]] },
|
|
{ id = 0, spans = [[18, 25], [18, 21], [22, 25]] },
|
|
]
|
|
match-kind = "leftmost-first"
|
|
search-kind = "leftmost"
|
|
unicode = false
|
|
utf8 = false
|