Пример #1
0
 def tag_loop_label(self, tagger):
   label = tagger.make_label(self.label)
   tagger.push_label('times', label)
   body = tagger.tag_loop_label(self.body)
   tagger.pop_label('times')
   i = Var('loop_i')
   start_condition = (if_(eq(i,0), exit_block(label)), set(i, i-1))
   body = start_condition+tuple(body)+(continue_block(label),)
   return begin(set(i, self.times), block(label, *body), None)
Пример #2
0
 def test_eq_le_ne(self):
   from dao.builtins.arith import eq, le, ne
   eq_(eval(le(1, 1)&ne(1, 2)), True)
   eq_(eval(eq(1, 1)), True)
   eq_(eval(le(1, 1)), True)
Пример #3
0
 def test_unwind_protect_loop(self):
   eq_(eval(let([(i,3)], 
                block(a, set(i, sub(i, 1)), 
                           if_(eq(i, 0), exit_block(a, 1)),
                           unwind_protect(continue_block(a), prin(2))), i)), 0)
Пример #4
0
 def testLoopUntil(self):
   eq_(eval(tag_loop_label(let([(i,3)], LoopUntilForm((set(i, sub(i, 1)), prin(i)), 
                                    eq(i,0))))), None)
Пример #5
0
 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)
Пример #6
0
 def testloop(self):
   eq_(eval(let([(i,3)], 
                block(a, set(i, sub(i, 1)), 
                           if_(eq(i, 0), exit_block(a, 1)),
                           continue_block(a)), i)), 0)
Пример #7
0
 def testletr(self):
   eq_(eval(letr([(f, lambda_([n], if_(eq(n, 1), 1, f(sub(n, 1)))))],
                 f(2))), 1)
Пример #8
0
 def testletrfac(self):
   eq_(eval(letr([(fac, lambda_([n], if_(eq(n,1), 1, mul(n, fac(sub(n, 1))))))],
                 fac(3))), 6)
Пример #9
0
 def test_iff1(self):
     assert_raises(DinpySyntaxError, preparse, iff(v.i == 1)[2])
     eq_(preparse(iff(v.i == 1).do[2]), special.iff([(arith.eq(i, 1), 2)]))
Пример #10
0
 def test_loop_until(self):
     eq_(preparse(loop[prin(1)].until(v.i == 1)),
         special.LoopUntilForm((prin(1), ), arith.eq(i, 1)))
Пример #11
0
 def test_eq_le_ne(self):
     from dao.builtins.arith import eq, le, ne
     eq_(eval(le(1, 1) & ne(1, 2)), True)
     eq_(eval(eq(1, 1)), True)
     eq_(eval(le(1, 1)), True)
Пример #12
0
 def test_iff1(self):
   assert_raises(DinpySyntaxError, preparse, iff(v.i==1)[2])
   eq_(preparse(iff(v.i==1).do[2]), special.iff([(arith.eq(i,1), 2)]))
Пример #13
0
 def test_loop_until(self):
   eq_(preparse(loop[prin(1)].until(v.i==1)), 
       special.LoopUntilForm((prin(1),), arith.eq(i, 1)))