Initial
This commit is contained in:
commit
a355de5d8b
24 changed files with 1133 additions and 0 deletions
140
advent/parser/test_parser.py
Normal file
140
advent/parser/test_parser.py
Normal file
|
|
@ -0,0 +1,140 @@
|
|||
from .parser import P
|
||||
import pytest
|
||||
|
||||
|
||||
def test_one_letter():
|
||||
parser = P.is_char('!')
|
||||
input = '!'
|
||||
expected = '!'
|
||||
result = parser.parse(input).get()
|
||||
assert result == expected
|
||||
|
||||
|
||||
def test_one_letter_longer():
|
||||
parser = P.is_char('!')
|
||||
input = '!!'
|
||||
expected = '!'
|
||||
result = parser.parse(input).get()
|
||||
assert result == expected
|
||||
|
||||
|
||||
def test_one_string():
|
||||
parser = P.string('123')
|
||||
input = '12345'
|
||||
expected = '123'
|
||||
result = parser.parse(input).get()
|
||||
assert result == expected
|
||||
|
||||
|
||||
def test_eof():
|
||||
parser = P.eof()
|
||||
input = ''
|
||||
result = parser.parse(input).get()
|
||||
assert result == ()
|
||||
|
||||
input = '!'
|
||||
with pytest.raises(Exception):
|
||||
parser.parse(input).get()
|
||||
|
||||
|
||||
def test_integer():
|
||||
parser = P.signed()
|
||||
input = '123456'
|
||||
expected = 123456
|
||||
result = parser.parse(input).get()
|
||||
assert result == expected
|
||||
|
||||
|
||||
def test_signed_integer():
|
||||
parser = P.signed()
|
||||
input = '-123456'
|
||||
expected = -123456
|
||||
result = parser.parse(input).get()
|
||||
assert result == expected
|
||||
|
||||
|
||||
def test_starting_zero():
|
||||
parser = P.unsigned()
|
||||
input = '0a'
|
||||
expected = 0
|
||||
result = parser.parse(input).get()
|
||||
assert result == expected
|
||||
|
||||
input2 = '01'
|
||||
result2 = parser.parse(input2)
|
||||
assert result2.is_fail()
|
||||
|
||||
|
||||
def test_between():
|
||||
parser = P.signed().between(P.is_char('<'), P.is_char('>'))
|
||||
input = '<-123456>'
|
||||
expected = -123456
|
||||
result = parser.parse(input).get()
|
||||
assert result == expected
|
||||
|
||||
|
||||
def test_sep_by():
|
||||
parser = P.signed().sep_by(P.is_char(','))
|
||||
input = '1,1,2,3,5,8,13'
|
||||
expected = [1, 1, 2, 3, 5, 8, 13]
|
||||
result = parser.parse(input).get()
|
||||
assert result == expected
|
||||
|
||||
|
||||
def test_trim():
|
||||
parser = P.signed().trim()
|
||||
input = '1'
|
||||
expected = 1
|
||||
result = parser.parse(input).get()
|
||||
assert result == expected
|
||||
|
||||
|
||||
def test_sep_by_trim():
|
||||
parser = P.signed().sep_by(P.is_char(',').trim()).trim()
|
||||
input = ' 1 , 1 , 2 , 3 , 5 , 8 , 13!'
|
||||
expected = [1, 1, 2, 3, 5, 8, 13]
|
||||
result = parser.parse(input).get()
|
||||
assert result == expected
|
||||
|
||||
|
||||
def test_choice2():
|
||||
parser = P.choice(P.is_char('a'), P.unsigned(), P.string('hallo'))
|
||||
input = '1'
|
||||
expected = 1
|
||||
result = parser.parse(input).get()
|
||||
assert result == expected
|
||||
|
||||
input = 'hallo'
|
||||
expected = 'hallo'
|
||||
result = parser.parse(input).get()
|
||||
assert result == expected
|
||||
|
||||
|
||||
def test_seq():
|
||||
input = '1234'
|
||||
parser = P.seq(P.any_char(), P.any_char(), P.any_char(), P.any_char())
|
||||
expected = ('1', '2', '3', '4')
|
||||
result = parser.parse(input).get()
|
||||
assert result == expected
|
||||
|
||||
|
||||
def test_seq_seq():
|
||||
input = '1,2,3,4'
|
||||
digit = P.char_by_func(lambda c: c.isdigit(), "")
|
||||
parser = P.sep_seq(digit, digit, digit, digit, sep=P.is_char(','))
|
||||
|
||||
expected = ('1', '2', '3', '4')
|
||||
result = parser.parse(input).get()
|
||||
assert result == expected
|
||||
|
||||
|
||||
def test_not():
|
||||
input = 'a'
|
||||
parser = P.snd(P.no_match(P.is_char('!'), 'found !'), P.is_char('a'))
|
||||
expected = 'a'
|
||||
result = parser.parse(input).get()
|
||||
assert result == expected
|
||||
|
||||
input2 = '!'
|
||||
result2 = parser.parse(input2)
|
||||
assert result2.is_fail()
|
||||
Loading…
Add table
Add a link
Reference in a new issue