def test_factorial(): # 0 => 1 # => n * (n - 1)! source = ''' factorial = (n) -> if n then (n * factorial((n - 1))) else 1 factorial(0) factorial(5) ''' assert Mini().eval(source)[1:] == [1, 120]
class MiniTestCase(unittest.TestCase): """Basic tests""" def setUp(self): self.m = Mini() def test_numbers(self): self.assertTrue(self.m.eval('') == []) self.assertTrue(self.m.eval('42') == [42]) self.assertTrue(self.m.eval('42 12') == [42, 12]) def test_operators(self): self.assertTrue(self.m.eval('(42 + 2)') == [44]) self.assertTrue(self.m.eval('(42 + ( 2 * 4))') == [50]) def test_functions(self): self.assertTrue(self.m.eval('sum(10 20)') == [30]) self.assertTrue(self.m.eval('sum()') == [0]) def test_if(self): self.assertTrue(self.m.eval('if 1 then 42 else 12') == [42]) self.assertTrue(self.m.eval('if 0 then 42 else 12') == [12])
def test_numbers(): assert Mini().eval('') == [] assert Mini().eval('42') == [42] assert Mini().eval('42 12') == [42, 12]
def func(*args): env = dict(self.env.items() + zip(params, args)) return Mini(env).eval(expr)
def test_lambdas(): assert Mini().eval('addten = (b) -> (b + 10) \n addten(2)')[-1] == 12 source = 'x = 10 \n addx = (a) -> (a + x) \n addx(2)' assert Mini().eval(source)[-1] == 12 assert Mini().eval('add = (a b) -> (a + b) \n add(42 12)')[-1] == 54
def test_if(): assert Mini().eval('if 1 then 42 else 12') == [42] assert Mini().eval('if 0 then 42 else 12') == [12]
def test_functions(): assert Mini().eval('sum(10 20)') == [30] assert Mini().eval('sum(10 20 30)') == [60]
def test_operators(): assert Mini().eval('(42 + 2)') == [44] assert Mini().eval('(42 + (2 * 4))') == [50]
def test_variables(): assert Mini({'a': 42}).eval('a') == [42] assert Mini().eval('a = 2 \n a') == [2, 2]
def setUp(self): self.m = Mini()
class MiniCompileTestCase(unittest.TestCase): """Compilation test cases""" def setUp(self): self.m = Mini() def test_addten(self): self.m.compile('addten = (b) -> (b + 10)') self.assertTrue(self.m.eval('addten(2)') == [12]) def test_addx(self): source = 'x = 10 \n addx = (a) -> (a + x)' self.m.compile(source) self.assertTrue(self.m.env['x'] == 10) self.assertTrue(self.m.eval('addx(2)') == [12]) def test_add(self): self.m.compile('add = (a b) -> (a + b)') self.assertTrue(self.m.eval('add(42 12)')[-1] == 54) def test_factorial(self): # 0 => 1 # => n * (n - 1)! source = ''' factorial = (n) -> if n then (n * factorial((n - 1))) else 1 ''' self.m.compile(source) self.assertTrue(self.m.eval('factorial(0)') == [1]) self.assertTrue(self.m.eval('factorial(5)') == [120])
def test_operators(): assert Mini.eval('(42 + 3)') == [45]
from mini import Mini def test_numbers(): assert Mini().eval('') == [] assert Mini().eval('42') == [42] assert Mini().eval('42 12') == [42, 12] def test_variables(): assert Mini({'a': 42}).eval('a') == [42] assert Mini().eval('a = 2 \n a') == [2, 2] def test_operators(): assert Mini().eval('(42 + 2)') == [44] assert Mini().eval('(42 + (2 * 4))') == [50] def test_functions(): assert Mini().eval('sum(10 20)') == [30] assert Mini().eval('sum(10 20 30)') == [60] def test_if(): assert Mini().eval('if 1 then 42 else 12') == [42] assert Mini().eval('if 0 then 42 else 12') == [12] def test_lambdas(): assert Mini().eval('addten = (b) -> (b + 10) \n addten(2)')[-1] == 12 source = 'x = 10 \n addx = (a) -> (a + x) \n addx(2)' assert Mini().eval(source)[-1] == 12 assert Mini().eval('add = (a b) -> (a + b) \n add(42 12)')[-1] == 54 def test_factorial(): # 0 => 1 # => n * (n - 1)! source = ''' factorial = (n) -> if n then (n * factorial((n - 1))) else 1 factorial(0) factorial(5) ''' assert Mini().eval(source)[1:] == [1, 120] # github.com/halst/mini