def test_we_can_chain_many_with_something_else(runner): p = many( literal('a') ) p = bind( p, lambda _: literal('b'), ) assert runner(p, 'aaaab').value == 'b'
def test_stack_performance_with_many_choices( benchmark, input_string, runner, ): parser = many( choices( literal('a'), literal('b'), literal('c'), literal('d'), )) benchmark( runner, parser, input_string, )
def test_many1_behaves_like_many_for_1_occurence(runner): p = literal('a') assert runner(many1(p), 'a').value == runner(many(p), 'a').value
def test_many_parses_5_occurences(runner): p = many( literal('a') ) assert runner(p, 'aaaaa').value == ['a'] * 5
def test_many_parses_empty_strings(runner): p = many( literal('a') ) assert runner(p, '').value == []