def fn(pair): # we use an empty pair to 'capture' the nodes # produced by the grouped exprs. p2 = prepare(pair.tail) p2 = expr(p2) node = Node(fn, p2.nodes) return Pair(pair.nodes + [node], p2.tail)
def test_prepare(): given = ["k"] after = Pair(Vec(), Vec(*given)) assert prepare(given) == after
def test_term_no_match(): given = prepare([B]) with pytest.raises(ValueError): K(given)
def test_term_empty_seq(): given = prepare([]) with pytest.raises(ValueError): K(given)
def test_term(): given = prepare([N]) after = Pair([N], []) assert K(given) == after
def test_term_multiple(): given = prepare([N,B]) after = Pair([N], [B]) assert K(given) == after
def test_maybe(): m = maybe(Ta) assert m(prepare([Nb])) == Pair([], [Nb]) assert m(prepare([Na])) == Pair([Na], [])
def test_null(): given = prepare([N]) after = given assert null(given) == after
def test_option_empty(): with pytest.raises(ValueError): assert option(Ta, Tb)(prepare([Nc]))
def test_option(): opt = option(Ta, Tb, Tc) for node in [Na, Nb]: assert opt(prepare([node])) == Pair([node], [])
def test_repeat(): r = repeat(Ta) given = prepare([Na]*10) after = Pair([Na]*10, []) assert r(given) == after
def test_group(): g = group(Ta) given = prepare([Na]) after = Pair([Node(g, [Na])], []) assert g(given) == after
def test_sequence(): s = sequence(Ta, Tb) given = prepare([Na, Nb]) after = Pair([Na, Nb], []) assert s(given) == after