def setUp(self): self.pgm = parser.parse(""" s = {x:4, y:5} s . x s . y {q:s}.q.y """)
def test_arithmetic(self): source = "5*4+3;" result = parser.parse(source) self.assertEqual(operators.add, type(result[0])) self.assertEqual(operators.multiply, type(result[0].v1))
def setUp(self): self.pgm = parser.parse(""" a = 1 fun = [b; c=a -> b+c] a = 2 fun(a) """)
def setUp(self): self.pgm = parser.parse(""" z=0 f = [x,y; z=z+x+y; w=z*z -> w] buf = f(2,3) buf """)
def setUp(self): self.pgm = parser.parse(""" l = "ab"; l a = l.hd; a b = l.tl; b b.tl """)
def setUp(self): self.pgm = parser.parse(""" sum = sum[l -> if l == Empty then 0 else l.hd + sum(l.tl)] list = {hd:1, tl:{hd:2, tl:Empty}} sum(Empty) sum(list) """)
def setUp(self): self.pgm = parser.parse(""" n = 3 lam = [a->n+a] n = 4 lam(10) [x,y->x+y](3,5) """)
def test_arithmetic_repr(self): source = "5*4+3-2/1;" expected = '5 * 4 + 3 - 2 / 1' result = parser.parse(source) self.assertEqual(expected, repr(result[0]))
def setUp(self): self.pgm = parser.parse(""" enum = e[n -> {hd:n, tl:e(n+1)}] list = enum(1) list.hd list.tl.tl.hd [l -> l.tl.hd](list) """)
def setUp(self): self.pgm = parser.parse(""" len = f[s-> if s==Null then 0 else 1+f(s.tl)] len("") len("foo") s = "mam" + "kota" s len(s) """)
def setUp(self): self.pgm = parser.parse(""" fixpoint = me[f -> f(me(f))] gf = [fun -> [n -> if n>1 then n*fun(n-1) else 1] ] # look! no recurrence. fixpoint(gf)(0); fixpoint(gf)(4); fixpoint(gf)(5) y = [f; lam = [x -> f(x(x))] -> lam(lam)] # hardcore Haskell Curry's fixpoint combinator factorial = y(gf) factorial(3) """)
def setUp(self): self.pgm = parser.parse(""" genfun = [ a,b addA = [n -> n+a] mulB = [n -> n*b] -> [n -> mulB(addA(n))] ] fun = genfun(1,10) fun(3) """)
def setUp(self): self.pgm = parser.parse(""" bt1 = f[n-> {val:n, left:f(2*n), right:f(2*n+1)}](1) bt2 = f[-> {myk:123, val:100, left:f(), right:f()}]() bt2.left.right.left.left.val bt1.right.val bt3 = add[a,b -> {val:a. val+b .val, left:add(a.left, b.left), right:add(a.right, b.right)}](bt1, bt2) bt3.left.right.val """)
def testGetsParsedCorrectly(self): parser.parse(""" s = { x:1, y:2 } s fun = name[x,y; z = x+y; z = z*z -> z + 1 ] fun(1,2) lam = [a;;;;; x=1; -> a+1;;;;;; ] """)
def setUp(self): self.pgm = parser.parse(""" s = {x:1, y:4} s.y s.x = 2 s.x s.y o = {} o.f = s o.f.x o.f.y = 3 o.f.y s.y """)
def setUp(self): self.pgm = parser.parse(""" gcd = f[a,b -> if b>0 then f(b,a%b) else a] gcd(6,9) gcd(1010,73) """)
def test_conditional_expression(self): source = "if True then 50 else 60;" result = parser.parse(source) self.assertEqual(conditional, type(result[0])) self.assertEqual("if(True) then(50) else(60)", repr(result[0]))
def setUp(self): self.pgm = parser.parse(""" fib = f[n -> if n<2 then 1 else f(n-2)+f(n-1)] fib(2); fib(3); fib(4) """)
def setUp(self): self.pgm = parser.parse(""" silnia = f[n -> if n<=1 then 1 else n*f(n-1)] silnia(5) silnia(4) """)
def setUp(self): self.parsed = parser.parse("[->3];")
def setUp(self): self.pgm = parser.parse(""" pow = f[p,w; q=f(p*p,w/2) -> if (!w) then 1 else (if (w%2) then p*q else q)] pow(2,3) """)
def setUp(self): self.pgm = parser.parse(""" write(123) """)
def setUp(self): self.fun = parser.parse("""[x,y ;t=3;q=5.6 ->1+z];""")[0]
def setUp(self): self.fun = parser.parse("sil[n -> if 4+3>0 then 2 else 1];")[0]
def setUp(self): self.pgm = parser.parse(""" sqr = [x -> x*x] apply = [fun, arg -> fun(arg)] apply(sqr, 5) """)
def testExpr(self): pgm = parser.parse("x*x;") self.assertRaises(UndefinedVariable, lambda: list(pgm.execute()))
def setUp(self): self.pgm = parser.parse("{x:4, y:5};")