Пример #1
0
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])