def testIndentUndent(self): _, n, s, line = DummyVar('_'), Var('n'), Var('s'), Var('line') space = char(' ') ruleList = [(s,function( ((n,), some(line(n)),s(add(n,1))), ((n,), some(line(n))))), (line,function( ((n,), times(space, n),some(letter(_)),any(space),char('\n')))) ] eq_(eval(letr(ruleList, parse_text(s(0), 'a\n b\n c\n'))), True) eq_(eval(letr(ruleList, parse_text(s(0), 'asd\n bdf\n cdfh\n'))), True)
def testIndentUndent(self): _, n, s, line = DummyVar('_'), Var('n'), Var('s'), Var('line') space = char(' ') ruleList = [(s, function(((n, ), some(line(n)), s(add(n, 1))), ((n, ), some(line(n))))), (line, function(((n, ), times(space, n), some(letter(_)), any(space), char('\n'))))] eq_(eval(letr(ruleList, parse_text(s(0), 'a\n b\n c\n'))), True) eq_(eval(letr(ruleList, parse_text(s(0), 'asd\n bdf\n cdfh\n'))), True)
def test_let3(self): x, y = Const('x'), Const('y') eq_(eval(let([(x, 1), (y, 2)], add(x, y))), 3)
def test_tuple1(self): eq_(eval(qq((1, ))), (1, )) eq_(eval(qq((1, 2))), (1, 2)) eq_(eval(qq((add(1, 1), 2))), (add(1, 1), 2))
def test_add(self): result = compile(add(1, 2)) #expect ='(lambda a0: (lambda a1: (lambda v: v)(a0+a1))(2))(1)' expect = '3' eq_(result, expect)
def test_closure1(self): x, f = Const('x'), Const('f') eq_(eval(let([(f, macrorules([[x], prin(x)])), (x, 1)], f(add(x, x)))), None)
def testeval4(self): x = Const('x') eq_(eval(let([(x, quote(add(1, 1)))], eval_(x))), 2)
def test_arithmetic(self): eq_(eval(add(1, 2)), 3) eq_(eval(sub(1, 1)), 0) eq_(eval(mul(2, 2)), 4) eq_(eval(div(2, 2)), 1)
def testdouble5(self): f = Var('f') x = Var('x') assert_raises(TypeError, eval, let([(f, rules([[x], add(x, x)]))], f(1, 2))) # passed
def test_let3(self): x, y = Const('x'), Const('y') eq_(eval(let([(x,1), (y,2)], add(x, y))), 3)
def test_letrec(self): x, y = Const('x'), Const('y') eq_(eval(letrec([(x, 1), (y, x)], y)), 1) eq_(eval(letrec([(x, 1), (y, add(x, 1))], y)), 2)
def test_add(self): result = compile_optimize(add(1, 2)) expect = il.Integer(3) eq_(result, expect)
def test_lamda2(self): x, y = Const('x'), Const('y') eq_(eval(lamda((x, y), add(x, y))(1, 3)), 4)
def test_too_many_unquote(self): assert_raises(DaoSyntaxError, eval, qq(uq(uq(add(1, 1)))))
def test_unquote_slice(self): eq_(eval(qq(add(uqs(quote((3, 4)))))), add(3, 4))
def test_unquote_add(self): eq_(eval(qq(uq(add(1, 1)))), 2)
def testletdouble(self): x, f = Const('x'), Const('f') eq_(eval(let([(f, lamda([x], add(x, x)))], f(1))), 2)
def testletdouble1(self): x, f = Var('x'), MacroVar('f') eq_(eval(let([(f, macro([x], add(x, x)))], f(1))), 2)
def test_macro2(self): x, y = Var('x'), Var('y') eq_(eval(macro((x, y), add(x, y))(1, 3)), 4)
def testdouble2(self): x = Var('x') eq_(eval(rules([[x], x])(add(2, 2))), 4)
def test4(self): x = Var('x') eq_(eval(macrorules([[x], prin(x)])(add(1, 1))), None)
def testletdouble2(self): x, f = Const('x'), ConstMacroVar('f') eq_(eval(let([(f, macro([x], add(x, x)))], f(1))), 2)
def test_closure3(self): x, y, f = Const('x'), Const('y'), Const('f') eq_( eval( let([(f, macrorules([[x, y], begin(x, y)])), (x, 1)], f(prin(x), prin(add(x, x))))), None)
def test_callcc(self): k = Var('k') eq_(eval(add(callcc(lamda((k, ), k(1))), 2)), 3)
def testdouble1(self): x = Var('x') eq_(eval(rules([[x], add(x, x)])(2)), 4)
def test_unquote_slice(self): eq_(eval(qq(add(uqs(quote((3,4)))))), add(3, 4))
def testdouble4(self): f = Var('f') x = Var('x') eq_(eval(let([(f, rules([[x], add(x, x)]))], f(f(1)))), 4)
def test3(self): x = Var('x') eq_(eval(macrorules([[x], add(x, x)])(1)), 2)
def test5(self): x = Var('x') y = Var('y') eq_(eval(let([(y, 1)], macrorules([[x], prin(x)])(add(y, 1)))), None)
def test_closure1(self): x, f = Const('x'), Const('f') eq_(eval(let([(f, macrorules([[x], prin(x)])), (x, 1)], f(add(x,x)))), None)
def test_closure2(self): x, f = Const('x'), Const('f') eq_(eval(let([(f, macrorules([[x], x])), (x, 1)], f(add(x,x)))), 2)
def test_closure3(self): x, y, f = Const('x'), Const('y'), Const('f') eq_(eval(let([(f, macrorules([[x, y], begin(x, y)])), (x, 1)], f(prin(x), prin(add(x,x))))), None)
def test_closure2(self): x, f = Const('x'), Const('f') eq_(eval(let([(f, macrorules([[x], x])), (x, 1)], f(add(x, x)))), 2)
def testeval5(self): eq_(eval(eval_(quote(begin(1, 2)))), 2) eq_(eval(eval_(quote(begin(1, add(1, 2))))), 3)
def test_add(self): result = cps(add(1, 2)) expect = il.Clamda(a0, il.Clamda(a1, done()(il.add((a0, a1))))(2))(1) eq_(result, expect)
def testeval1(self): eq_(eval(eval_(quote(add(1, 1)))), (2))
def test_tuple1(self): eq_(eval(qq((1,))), (1,)) eq_(eval(qq((1,2))), (1,2)) eq_(eval(qq((add(1,1),2))), (add(1,1),2))
def testeval4(self): x = Const('x') eq_(eval(let([(x, quote(add(1,1)))], eval_(x))), 2)
def test_unquote_add(self): eq_(eval(qq(uq(add(1,1)))), 2)
def test_callcc(self): k = Var('k') eq_(eval(add(callcc(lamda((k,), k(1))),2)), 3)
def test_too_many_unquote(self): assert_raises(DaoSyntaxError, eval, qq(uq(uq(add(1,1)))))