def testLambda(self): eq_(eval(lambda_([x], 1)(2)), 1) eq_(eval(lambda_([x], x)(2)), 2) eq_(eval(lambda_((x, y), add(x, y))(1, 3)), 4)
def testletdouble(self): f = Var('f') eq_(eval(let([(f, lambda_([x], add(x, x)))], f(1))), 2)
def testcallcc(self): from dao.solve import done eq_(eval(callcc(lambda_([k], k(2)))), 2)
def testblock(self): f = Var('f') eq_(eval(block('foo', let([(f, lambda_((), exit_block('foo',1)))], mul(2,block('foo', f()))))), 1)
def testletroddeven(self): eq_(eval(letr([(odd, lambda_([n], if_(eq(n,0), 0, even(sub(n,1))))), (even, lambda_([n], if_(eq(n,0), 1, odd(sub(n, 1)))))], odd(3))), 1)
def testletrfac(self): eq_(eval(letr([(fac, lambda_([n], if_(eq(n,1), 1, mul(n, fac(sub(n, 1))))))], fac(3))), 6)
def testletr(self): eq_(eval(letr([(f, lambda_([n], if_(eq(n, 1), 1, f(sub(n, 1)))))], f(2))), 1)