[[tests]]
name = "1"
regex = "a"
input = "aaa"
matches = [[0, 1], [1, 2], [2, 3]]

[[tests]]
name = "2"
regex = "a"
input = "aba"
matches = [[0, 1], [2, 3]]

[[tests]]
name = "empty1"
regex = ''
input = ''
matches = [[0, 0]]

[[tests]]
name = "empty2"
regex = ''
input = 'abc'
matches = [[0, 0], [1, 1], [2, 2], [3, 3]]

[[tests]]
name = "empty3"
regex = '()'
input = 'abc'
matches = [[0, 0], [1, 1], [2, 2], [3, 3]]

[[tests]]
name = "empty4"
regex = '()*'
input = 'abc'
matches = [[0, 0], [1, 1], [2, 2], [3, 3]]

[[tests]]
name = "empty5"
regex = '()+'
input = 'abc'
matches = [[0, 0], [1, 1], [2, 2], [3, 3]]

[[tests]]
name = "empty6"
regex = '()?'
input = 'abc'
matches = [[0, 0], [1, 1], [2, 2], [3, 3]]

[[tests]]
name = "empty7"
regex = '()()'
input = 'abc'
matches = [[0, 0], [1, 1], [2, 2], [3, 3]]

[[tests]]
name = "empty8"
regex = '()+|z'
input = 'abc'
matches = [[0, 0], [1, 1], [2, 2], [3, 3]]

[[tests]]
name = "empty9"
regex = 'z|()+'
input = 'abc'
matches = [[0, 0], [1, 1], [2, 2], [3, 3]]

[[tests]]
name = "empty10"
regex = '()+|b'
input = 'abc'
matches = [[0, 0], [1, 1], [2, 2], [3, 3]]

[[tests]]
name = "empty11"
regex = 'b|()+'
input = 'abc'
matches = [[0, 0], [1, 2], [3, 3]]

[[tests]]
name = "start1"
regex = "^a"
input = "a"
matches = [[0, 1]]

[[tests]]
name = "start2"
regex = "^a"
input = "aa"
matches = [[0, 1]]

[[tests]]
name = "anchored1"
regex = "a"
input = "a"
matches = [[0, 1]]
anchored = true

# This test is pretty subtle. It demonstrates the crucial difference between
# '^a' and 'a' compiled in 'anchored' mode. The former regex exclusively
# matches at the start of a haystack and nowhere else. The latter regex has
# no such restriction, but its automaton is constructed such that it lacks a
# `.*?` prefix. So it can actually produce matches at multiple locations.
# The anchored3 test drives this point home.
[[tests]]
name = "anchored2"
regex = "a"
input = "aa"
matches = [[0, 1], [1, 2]]
anchored = true

# Unlikely anchored2, this test stops matching anything after it sees `b`
# since it lacks a `.*?` prefix. Since it is looking for 'a' but sees 'b', it
# determines that there are no remaining matches.
[[tests]]
name = "anchored3"
regex = "a"
input = "aaba"
matches = [[0, 1], [1, 2]]
anchored = true
