def test_kleene1(self): f, item, kleene = Var('f'), Var('item'), Var('kleene') fun = macro(((item, ), letr([(f, macro(((), eval_(item), f()), ((), nullword)))], f()))) eq_(eval(let([(kleene, fun)], set_text('aa'), kleene(char('a')))), True)
def test_kleene2(self): f, pred, kleene = Var('f'), Var('pred'), Var('kleene') fun = macro(((pred,), letr([(f,macro( ((x,), pred(x), f(x)), ((x,), nullword)))], f(x)))) eq_(eval(let([(kleene,fun)], set_text('ab'), kleene(char))), True)
def test_kleene1(self): f, item, kleene = Var('f'), Var('item'), Var('kleene') fun = macro(((item,), letr([(f,macro(((), eval_(item), f()), ((), nullword)))], f()))) eq_(eval(let([(kleene,fun)], set_text('aa'), kleene(char('a')))), True)
def make_expression(text): code = begin( sexpression_defines, classic_defines, set_text(text), from_(classic, program)(exp), eoi, eval_(pycall(cons2tuple, exp))) return to_sexpression(code)
def test_next(self): eq_(eval(begin(set_text('ab'), next_char(), next_char())), 'a')
def test_step(self): eq_(eval(begin(set_text('ab'), step(), step())), 'b') eq_(eval(begin(set_text('ab'), step(), left())), 'b')
def test_repeat2(self): return # the code below loops for ever. eq_(eval(and_p(set_text('123'), repeat, char(x), unify(x, '4'))), True)
def test_subtext(self): eq_(eval(begin(set_text('abcde'), subtext(0,3))), 'abc')
def test_goto(self): eq_(eval(begin(set_text('abcde'), goto(1))), 'bcde')
def test_skip(self): eq_(eval(begin(set_text('abcde'), goto(2), next_char())), 'c')
def test_skip(self): eq_(eval(begin(set_text('abcde'), skip(3), next())), 'd') eq_(eval(begin(set_text('abcde'), skip(4), skip(-2), next())), 'c')
def test_subtext(self): eq_(eval(begin(set_text('abcde'), subtext(0, 3))), 'abc')
def test_position(self): eq_(eval(begin(set_text('ab'), position())), 0)
def test_left(self): eq_(eval(begin(set_text('ab'), left())), 'ab')
def test_kleene2(self): f, pred, kleene = Var('f'), Var('pred'), Var('kleene') fun = macro(((pred, ), letr([(f, macro(((x, ), pred(x), f(x)), ((x, ), nullword)))], f(x)))) eq_(eval(let([(kleene, fun)], set_text('ab'), kleene(char))), True)
def test_repeat(self): return # the code below loops for ever, after modifie the behaviour of solver.parse_state and terminals. eq_(eval(and_p(set_text('123'), repeat, char(x), unify(x, '3'))), True)