Ejemplo n.º 1
0
 def test_use_libc(self):
     e = AkilangEvaluator()
     self.assertIsNone(e.evaluate('extern ceil(x:f64):f64'))
     self.assertEqual(e.evaluate('ceil(4.5)', ret_u64), 5.0)
     self.assertIsNone(e.evaluate('extern floor(x:f64):f64'))
     self.assertIsNone(
         e.evaluate('def cfadder(x:f64):f64 ceil(x) + floor(x)'))
     self.assertEqual(e.evaluate('cfadder(3.14)', ret_u64), 7.0)
Ejemplo n.º 2
0
 def test_custom_unop(self):
     e = AkilangEvaluator()
     e.evaluate('def unary !(a) 0 - a')
     e.evaluate('def unary ^(a) a * a')
     self.assertEqual(e.evaluate('!10'), -10)
     self.assertEqual(e.evaluate('^10'), 100)
     self.assertEqual(e.evaluate('!^10'), -100)
     self.assertEqual(e.evaluate('^!10'), 100)
Ejemplo n.º 3
0
 def test_c_convert_int_float(self):
     e = AkilangEvaluator()
     e.evaluate('''
         def main(){
             var a=128, b = convert(a,f64)
             if b==128.0 then 0 else 1
         }            
     ''')
     self.assertEqual(e.evaluate('main()'), 0)
Ejemplo n.º 4
0
 def test_var_expr1(self):
     e = AkilangEvaluator()
     e.evaluate('''
         def foo(x, y, z){
             var s1 = x + y, s2 = z + y
             s1 * s2
         }
         ''')
     self.assertEqual(e.evaluate('foo(1, 2, 3)'), 15)
Ejemplo n.º 5
0
 def test_c_cast(self):
     e = AkilangEvaluator()
     e.evaluate('''
         def test_cast(){
             var a=128u, b = cast(a,i32)
             if b==128 then 0 else 1
         }            
     ''')
     self.assertEqual(e.evaluate('test_cast()'), 0)
Ejemplo n.º 6
0
 def test_for(self):
     e = AkilangEvaluator()
     e.evaluate('''
         def oddlessthan(n)
             loop (x = 1, x < n, x + 2) x
     ''')
     self.assertEqual(e.evaluate('oddlessthan(100)'), 101)
     self.assertEqual(e.evaluate('oddlessthan(1000)'), 1001)
     self.assertEqual(e.evaluate('oddlessthan(0)'), 1)
Ejemplo n.º 7
0
 def test_c_convert(self):
     e = AkilangEvaluator()
     e.evaluate('''
         def test_convert(){
             var a=128, b = convert(a,i64)
             if b==128I then 0 else 1
         }            
     ''')
     self.assertEqual(e.evaluate('test_convert()'), 0)
Ejemplo n.º 8
0
 def test_nested_if(self):
     e = AkilangEvaluator()
     e.evaluate('''
         def foo(a, b, c)
             if a < b then
                 if a < c then a * 2 else c * 2
                 else b * 2''')
     self.assertEqual(e.evaluate('foo(1, 20, 300)'), 2)
     self.assertEqual(e.evaluate('foo(10, 2, 300)'), 4)
     self.assertEqual(e.evaluate('foo(100, 2000, 30)'), 60)
Ejemplo n.º 9
0
 def test_triple_assignment(self):
     e = AkilangEvaluator()
     e.evaluate('def binary ; 1 (x, y) y')
     e.evaluate('''
         def foo(a) {
             var x, y, z
             x = y = z = a
             ; x + 2 * y + 3 * z
         }
         ''')
     self.assertEqual(e.evaluate('foo(5)'), 30)
Ejemplo n.º 10
0
 def test_c_ref(self):
     e = AkilangEvaluator()
     e.evaluate('''
         def ref(){
             var a=32,
                 b=c_ref(a),
                 c=c_deref(b)
             if a==c then 0 else 1
             }
         ''')
     self.assertEqual(e.evaluate('ref()'), 0)
Ejemplo n.º 11
0
 def test_var_expr2(self):
     e = AkilangEvaluator()
     e.evaluate('def binary ; 1 (x, y) y')
     e.evaluate('''
         def foo(step) {
             var accum=0
             loop (i = 0, i < 10, i + step)
                 accum = accum + i
             accum
         }
         ''')
     self.assertEqual(e.evaluate('foo(2)'), 20)
Ejemplo n.º 12
0
 def test_c_ptr_math(self):
     e = AkilangEvaluator()
     e.evaluate('''
         def main(){
             var x:i32[4]
             x[0]=32
             x[3]=64
             var y=c_ptr_math(c_ref(x[0]),12U)
             c_deref(y)
         }
     ''')
     self.assertEqual(e.evaluate('main()'), 64)
Ejemplo n.º 13
0
 def test_nested_var_exprs(self):
     e = AkilangEvaluator()
     e.evaluate('''
         def foo(x y z) {
             with var s1 = x + y, s2 = z + y {
                 with var s3 = s1 * s2 {
                     s3 * 100
                 }
             }
         }
         ''')
     self.assertEqual(e.evaluate('foo(1, 2, 3)'), 1500)
Ejemplo n.º 14
0
 def test_c_objref(self):
     e = AkilangEvaluator()
     e.evaluate('''
         def ref(){
                 var a="Hello world", 
                     c=c_obj_ref(a),
                     d=c_obj_deref(c)
                 if cast(c_data(a),u64) == cast(c_data(d),u64)
                     then 0 else 1
             }
         ''')
     self.assertEqual(e.evaluate('ref()'), 0)
Ejemplo n.º 15
0
 def test_array_assignment(self):
     e = AkilangEvaluator()
     e.evaluate('''
         def main(){
             var a:i32[3,32,32]
             a[0,8,16]=1
             a[1,31,16]=2
             a[2,0,0]=4
             return a[0,8,16]+a[1,31,16]+a[2,0,0]
         }
     ''')
     self.assertEqual(e.evaluate('main()'), 7)
Ejemplo n.º 16
0
 def test_c_ptr_mod(self):
     e = AkilangEvaluator()
     e.evaluate('''
         def main(){
             var x:i32[4]
             x[0]=32
             var y=c_ptr_math(c_ref(x[0]),12U)
             unsafe {
                 c_ptr_mod(y,128)
             }
             c_deref(y)
         }
     ''')
     self.assertEqual(e.evaluate('main()'), 128)
Ejemplo n.º 17
0
 def test_uni_assignment(self):
     e = AkilangEvaluator()
     e.evaluate('''
         uni {
             a:i32[3,32,32],
             b:i32
         }
     ''')
     e.evaluate('''
         def main(){
             b=32
             a[0,8,16]=1
             a[1,31,16]=2
             a[2,0,0]=4
             return a[0,8,16]+a[1,31,16]+a[2,0,0]+b
         }            
     ''')
     self.assertEqual(e.evaluate('main()'), 39)
Ejemplo n.º 18
0
 def test_mixed_ops(self):
     e = AkilangEvaluator()
     e.evaluate('def unary!(a) 0 - a')
     e.evaluate('def unary^(a) a * a')
     e.evaluate('def binary %(a, b) a - b')
     self.assertEqual(e.evaluate('!10 % !20'), 10)
     self.assertEqual(e.evaluate('^(!10 % !20)'), 100)
Ejemplo n.º 19
0
 def test_assignments(self):
     e = AkilangEvaluator()
     e.evaluate('def binary ; 1 (x, y) y')
     e.evaluate('''
         def foo(a b) {
             var s, p, r
             s = a + b ;
             p = a * b ;
             r = s + 100 * p
             r
         }
         ''')
     self.assertEqual(e.evaluate('foo(2, 3)'), 605)
     self.assertEqual(e.evaluate('foo(10, 20)'), 20030)
Ejemplo n.º 20
0
 def test_nested_if2(self):
     e = AkilangEvaluator()
     e.evaluate('''
         def min3(a, b, c)
             if a < b then
                 if a < c then
                     a 
                     else c
                 elif b < c then 
                     b 
                     else c
         ''')
     self.assertEqual(e.evaluate('min3(1, 2, 3)'), 1)
     self.assertEqual(e.evaluate('min3(1, 3, 2)'), 1)
     self.assertEqual(e.evaluate('min3(2, 1, 3)'), 1)
     self.assertEqual(e.evaluate('min3(2, 3, 1)'), 1)
     self.assertEqual(e.evaluate('min3(3, 1, 2)'), 1)
     self.assertEqual(e.evaluate('min3(3, 3, 2)'), 2)
     self.assertEqual(e.evaluate('min3(3, 3, 3)'), 3)
Ejemplo n.º 21
0
 def test_use_func(self):
     e = AkilangEvaluator()
     self.assertIsNone(e.evaluate('def adder(x, y) x+y'))
     self.assertEqual(e.evaluate('adder(5, 4) + adder(3, 2)'), 14)
Ejemplo n.º 22
0
 def test_strlen_inline(self):
     e = AkilangEvaluator(True)
     opts = {'return_type': c_longlong, 'anon_vartype': VarTypes.u64}
     self.assertEqual(e.evaluate('len("Hello there")', opts), 12)
Ejemplo n.º 23
0
 def test_type_value_trapping(self):
     e = AkilangEvaluator()
     try:
         e.evaluate('cast(32,print)')
     except ParseError as e:
         pass
Ejemplo n.º 24
0
 def test_optargs(self):
     e = AkilangEvaluator()
     e.evaluate('def f1(x:i32, y:i32=32, z:byte=1B) y')
     e.evaluate('def f2(x:i32=1) x')
     e.evaluate('def main(){f1(4)+f1(1,2)+f2()+f2(8)}')
     self.assertEqual(e.evaluate('main()'), 43)
Ejemplo n.º 25
0
 def test_basic_if(self):
     e = AkilangEvaluator()
     e.evaluate('def foo(a, b) a * if a < b then a + 1 else b + 1')
     self.assertEqual(e.evaluate('foo(3, 4)'), 12)
     self.assertEqual(e.evaluate('foo(5, 4)'), 25)
Ejemplo n.º 26
0
 def test_basic(self):
     e = AkilangEvaluator()
     self.assertEqual(e.evaluate('3'), 3)
     self.assertEqual(e.evaluate('3+3*4'), 15)
Ejemplo n.º 27
0
 def test_custom_binop(self):
     e = AkilangEvaluator()
     e.evaluate('def binary % (a:f64, b:f64):f64 a - b')
     self.assertEqual(e.evaluate('10. % 5.', ret_u64), 5.)
     self.assertEqual(e.evaluate('100. % 5.5', ret_u64), 94.5)