예제 #1
0
파일: testeval.py 프로젝트: hermetique/dao
 def test_letrec_odd_even(self):
     from util import n, odd, even
     eq_(
         eval(
             letrec([(odd, lamda([n], if_(eq(n, 0), 0, even(sub(n, 1))))),
                     (even, lamda([n], if_(eq(n, 0), 1, odd(sub(n, 1)))))],
                    odd(3))), 1)
예제 #2
0
파일: testeval.py 프로젝트: hermetique/dao
 def test_letrec_odd_even(self):
     from util import n
     odd, even = MacroVar('odd'), MacroVar('even')
     eq_(
         eval(
             letrec([(odd, macro([n], if_(eq(n, 0), 0, even(sub(n, 1))))),
                     (even, macro([n], if_(eq(n, 0), 1, odd(sub(n, 1)))))],
                    odd(3))), 1)
예제 #3
0
파일: testeval.py 프로젝트: hermetique/dao
 def test_letrec_fac(self):
     from util import m, n, fac
     eq_(
         eval(
             letrec([
                 (fac, lamda([n], if_(eq(n, 1), 1, mul(n, fac(sub(n, 1))))))
             ], fac(3))), 6)
예제 #4
0
파일: testeval.py 프로젝트: hermetique/dao
 def testblock3(self):
     a = Var('a')
     eq_(
         eval(
             block(a, 1,
                   if_(0, continue_block(a), begin(exit_block(a, 2), 3)))),
         2)
예제 #5
0
파일: testeval.py 프로젝트: chaosim/dao
 def test_unwind_protect_loop(self):
   from util import a, i
   eq_(eval(let([(i,3)], 
                block(a, assign(i, sub(i, 1)), 
                         if_(eq(i, 0), 
                           exit_block(a, 1),
                           unwind_protect(continue_block(a), prin(i)))), i)), 0)
예제 #6
0
파일: testeval.py 프로젝트: hermetique/dao
 def testloop(self):
     from util import a, i
     eq_(
         eval(
             let([(i, 3)],
                 block(a, assign(i, sub(i, 1)),
                       if_(eq(i, 0), exit_block(a, 1), continue_block(a))),
                 i)), 0)
예제 #7
0
파일: testeval.py 프로젝트: chaosim/dao
 def testloop(self):
   from util import a, i
   eq_(eval(let([(i,3)], 
                block(a, assign(i, sub(i, 1)), 
                         if_(eq(i, 0), 
                             exit_block(a, 1), 
                             continue_block(a))), 
                i)), 0)
예제 #8
0
파일: testeval.py 프로젝트: hermetique/dao
 def test_letrec_fac(self):
     from util import m, n
     fac = MacroVar('fac')
     eq_(
         eval(
             letrec([
                 (fac, macro([n], if_(eq(n, 1), 1, mul(n, fac(sub(n, 1))))))
             ], fac(3))), 6)
예제 #9
0
파일: testeval.py 프로젝트: hermetique/dao
 def test_macro6(self):
     n, act, ntimes = Var('n'), Var('act'), MacroVar('ntimes')
     eq_(
         eval(
             letrec([(ntimes,
                      macro((n, act),
                            if_(eq(n, 0), 1,
                                begin(act, ntimes(sub(n, 1), act)))))],
                    ntimes(3, println(1)))), 1)
예제 #10
0
파일: testeval.py 프로젝트: hermetique/dao
 def test_unwind_protect_loop(self):
     from util import a, i
     eq_(
         eval(
             let([(i, 3)],
                 block(
                     a, assign(i, sub(i, 1)),
                     if_(eq(i, 0), exit_block(a, 1),
                         unwind_protect(continue_block(a), prin(i)))), i)),
         0)
예제 #11
0
파일: testoptimize.py 프로젝트: chaosim/dao
 def test_if(self):
   result = compile_optimize(if_(0, 1, 2))
   expect = il.Integer(2)
   eq_(result, expect)
예제 #12
0
 def test_if(self):
     result = compile_optimize(if_(0, 1, 2))
     expect = il.Integer(2)
     eq_(result, expect)
예제 #13
0
파일: testeval.py 프로젝트: hermetique/dao
 def test_letrec3(self):
     x, f = Var('x'), MacroVar('f')
     eq_(
         eval(
             letrec([(f, macro((x, ), if_(eq(x, 1), 1, f(sub(x, 1)))))],
                    f(2))), 1)
예제 #14
0
파일: testeval.py 프로젝트: chaosim/dao
 def test_letrec_fac(self):
   from util import m, n, fac
   eq_(eval(letrec([(fac, lamda([n], if_(eq(n,1), 1, mul(n, fac(sub(n, 1))))))],
                 fac(3))), 6)
예제 #15
0
파일: testeval.py 프로젝트: chaosim/dao
 def test_letrec_odd_even(self):
   from util import n, odd, even  
   eq_(eval(letrec([(odd, lamda([n], if_(eq(n,0), 0, even(sub(n,1))))),
                   (even, lamda([n], if_(eq(n,0), 1, odd(sub(n, 1)))))],
                 odd(3))), 1)
예제 #16
0
파일: testgencode.py 프로젝트: chaosim/dao
 def test_if(self):
   result = compile(if_(0, 1, 2))
   expect = '2'
   eq_(result, expect)
예제 #17
0
 def test_if(self):
   result = cps(if_(0, 1, 2))
   expect = il.Clamda(v, il.If(v, done()(1), done()(2)))(0)
   eq_(result, expect)
예제 #18
0
파일: testeval.py 프로젝트: chaosim/dao
 def testblock3(self):
   a = Var('a')
   eq_(eval(block(a, 1, if_(0, continue_block(a), 
                            begin(exit_block(a, 2), 3)))), 2)
예제 #19
0
파일: testeval.py 프로젝트: chaosim/dao
 def test_letrec_odd_even(self):
   from util import n
   odd, even  = MacroVar('odd'), MacroVar('even')  
   eq_(eval(letrec([(odd, macro([n], if_(eq(n,0), 0, even(sub(n,1))))),
                   (even, macro([n], if_(eq(n,0), 1, odd(sub(n, 1)))))],
                 odd(3))), 1)
예제 #20
0
파일: testeval.py 프로젝트: chaosim/dao
 def test_letrec_fac(self):
   from util import m, n
   fac = MacroVar('fac')
   eq_(eval(letrec([(fac, macro([n], if_(eq(n,1), 1, mul(n, fac(sub(n, 1))))))],
                 fac(3))), 6)
예제 #21
0
파일: testeval.py 프로젝트: chaosim/dao
 def test_letrec3(self):
   x, f = Var('x'), MacroVar('f')
   eq_(eval(letrec([(f, macro((x,), if_(eq(x,1), 1, f(sub(x,1)))))], f(2))), 1)
예제 #22
0
파일: testeval.py 프로젝트: chaosim/dao
 def test_macro6(self):
   n, act, ntimes = Var('n'), Var('act'), MacroVar('ntimes')
   eq_(eval(letrec([(ntimes, macro((n, act), 
                   if_(eq(n, 0), 1, 
                       begin(act, ntimes(sub(n, 1), act)))))], 
                   ntimes(3, println(1)))), 1)
예제 #23
0
파일: testeval.py 프로젝트: hermetique/dao
 def testif_(self):
     eq_(eval(if_(0, 1, 2)), 2)
예제 #24
0
파일: testeval.py 프로젝트: chaosim/dao
 def testif_(self):
   eq_(eval(if_(0, 1, 2)), 2)
예제 #25
0
 def test_if(self):
     result = cps(if_(0, 1, 2))
     expect = il.Clamda(v, il.If(v, done()(1), done()(2)))(0)
     eq_(result, expect)
예제 #26
0
 def test_if(self):
     result = compile(if_(0, 1, 2))
     expect = '2'
     eq_(result, expect)