| # NOTE: We define a number of tests where the *match* kind is 'leftmost-first' |
| # but the *search* kind is 'overlapping'. This is a somewhat nonsensical |
| # combination and can produce odd results. Nevertheless, those results should |
| # be consistent so we test them here. (At the time of writing this note, I |
| # hadn't yet decided whether to make 'leftmost-first' with 'overlapping' result |
| # in unspecified behavior.) |
| |
| # This demonstrates how a full overlapping search is obvious quadratic. This |
| # regex reports a match for every substring in the haystack. |
| [[test]] |
| name = "ungreedy-dotstar-matches-everything-100" |
| regex = [".*?"] |
| 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 = "greedy-dotstar-matches-everything-100" |
| regex = [".*"] |
| 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 = "repetition-plus-leftmost-first-100" |
| regex = 'a+' |
| haystack = "aaa" |
| matches = [[0, 1], [1, 2], [0, 2], [2, 3], [1, 3], [0, 3]] |
| match-kind = "leftmost-first" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "repetition-plus-leftmost-first-110" |
| regex = '☃+' |
| haystack = "☃☃☃" |
| matches = [[0, 3], [3, 6], [0, 6], [6, 9], [3, 9], [0, 9]] |
| match-kind = "leftmost-first" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "repetition-plus-all-100" |
| regex = 'a+' |
| haystack = "aaa" |
| matches = [[0, 1], [1, 2], [0, 2], [2, 3], [1, 3], [0, 3]] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "repetition-plus-all-110" |
| regex = '☃+' |
| haystack = "☃☃☃" |
| matches = [[0, 3], [3, 6], [0, 6], [6, 9], [3, 9], [0, 9]] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "repetition-plus-leftmost-first-200" |
| regex = '(abc)+' |
| haystack = "zzabcabczzabc" |
| matches = [ |
| [[2, 5], [2, 5]], |
| [[5, 8], [5, 8]], |
| [[2, 8], [5, 8]], |
| ] |
| match-kind = "leftmost-first" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "repetition-plus-all-200" |
| regex = '(abc)+' |
| haystack = "zzabcabczzabc" |
| matches = [ |
| [[2, 5], [2, 5]], |
| [[5, 8], [5, 8]], |
| [[2, 8], [5, 8]], |
| [[10, 13], [10, 13]], |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "repetition-star-leftmost-first-100" |
| regex = 'a*' |
| haystack = "aaa" |
| matches = [ |
| [0, 0], |
| [1, 1], |
| [0, 1], |
| [2, 2], |
| [1, 2], |
| [0, 2], |
| [3, 3], |
| [2, 3], |
| [1, 3], |
| [0, 3], |
| ] |
| match-kind = "leftmost-first" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "repetition-star-all-100" |
| regex = 'a*' |
| haystack = "aaa" |
| matches = [ |
| [0, 0], |
| [1, 1], |
| [0, 1], |
| [2, 2], |
| [1, 2], |
| [0, 2], |
| [3, 3], |
| [2, 3], |
| [1, 3], |
| [0, 3], |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "repetition-star-leftmost-first-200" |
| regex = '(abc)*' |
| haystack = "zzabcabczzabc" |
| matches = [ |
| [[0, 0], []], |
| ] |
| match-kind = "leftmost-first" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "repetition-star-all-200" |
| regex = '(abc)*' |
| haystack = "zzabcabczzabc" |
| matches = [ |
| [[0, 0], []], |
| [[1, 1], []], |
| [[2, 2], []], |
| [[3, 3], []], |
| [[4, 4], []], |
| [[5, 5], []], |
| [[2, 5], [2, 5]], |
| [[6, 6], []], |
| [[7, 7], []], |
| [[8, 8], []], |
| [[5, 8], [5, 8]], |
| [[2, 8], [5, 8]], |
| [[9, 9], []], |
| [[10, 10], []], |
| [[11, 11], []], |
| [[12, 12], []], |
| [[13, 13], []], |
| [[10, 13], [10, 13]], |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "start-end-rep-leftmost-first" |
| regex = '(^$)*' |
| haystack = "abc" |
| matches = [ |
| [[0, 0], []], |
| ] |
| match-kind = "leftmost-first" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "start-end-rep-all" |
| regex = '(^$)*' |
| haystack = "abc" |
| matches = [ |
| [[0, 0], []], |
| [[1, 1], []], |
| [[2, 2], []], |
| [[3, 3], []], |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "alt-leftmost-first-100" |
| regex = 'abc|a' |
| haystack = "zzabcazzaabc" |
| matches = [[2, 3], [2, 5]] |
| match-kind = "leftmost-first" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "alt-all-100" |
| regex = 'abc|a' |
| haystack = "zzabcazzaabc" |
| matches = [[2, 3], [2, 5], [5, 6], [8, 9], [9, 10], [9, 12]] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "empty-000" |
| regex = "" |
| haystack = "abc" |
| matches = [[0, 0], [1, 1], [2, 2], [3, 3]] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "empty-alt-000" |
| regex = "|b" |
| haystack = "abc" |
| matches = [[0, 0], [1, 1], [2, 2], [1, 2], [3, 3]] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "empty-alt-010" |
| regex = "b|" |
| haystack = "abc" |
| matches = [[0, 0], [1, 1], [2, 2], [1, 2], [3, 3]] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| # See: https://github.com/rust-lang/regex/issues/484 |
| name = "iter1-bytes" |
| regex = '' |
| haystack = "☃" |
| matches = [[0, 0], [1, 1], [2, 2], [3, 3]] |
| utf8 = false |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| # See: https://github.com/rust-lang/regex/issues/484 |
| name = "iter1-utf8" |
| regex = '' |
| haystack = "☃" |
| matches = [[0, 0], [3, 3]] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "iter1-incomplete-utf8" |
| regex = '' |
| haystack = '\xE2\x98' # incomplete snowman |
| matches = [[0, 0], [1, 1], [2, 2]] |
| match-kind = "all" |
| search-kind = "overlapping" |
| unescape = true |
| utf8 = false |
| |
| [[test]] |
| name = "scratch" |
| regex = ['sam', 'samwise'] |
| haystack = "samwise" |
| matches = [ |
| { id = 0, span = [0, 3] }, |
| ] |
| match-kind = "leftmost-first" |
| search-kind = "overlapping" |