コード例 #1
0
ファイル: parser_test.py プロジェクト: 4gn3s/kaleidoscope
class TestParser(unittest.TestCase):
    def test_basic(self):
        self.parser = Parser()
        number = 19
        ast = self.parser.parse(str(number))
        self.assertIsInstance(ast, FunctionNode)
        self.assertIsInstance(ast.body, NumberExpression)
        self.assertEqual(ast.body.value, number)
        print(self.parser._flatten(ast))

    def test_xyz(self):
        self.parser = Parser()
        ast = self.parser.parse("x+y*z")
        self.assertIsInstance(ast, FunctionNode)
        self.assertIsInstance(ast.body, BinaryOperatorExpression)
        self.assertEqual(self.parser._flatten(ast),
                         ['Function', ['Prototype', 'anonymous_2', ''],
                          ['Binop', '+', ['Variable', 'x'],
                           ['Binop', '*', ['Variable', 'y'], ['Variable', 'z']]]])
        print(self.parser._flatten(ast))

    def test_def_args(self):
        self.parser = Parser()
        ast = self.parser.parse("def foo(x y) x + foo(y, 4.0)")
        self.assertIsInstance(ast, FunctionNode)
        self.assertEqual(ast.prototype.name, 'foo')
        self.assertEqual(ast.prototype.arguments, ['x', 'y'])
        # self.assertIsInstance(function.body, BinaryOperatorExpression)
        print(self.parser._flatten(ast))

    def test_extern(self):
        self.parser = Parser()
        ast = self.parser.parse("extern sin(arg)")
        self.assertIsInstance(ast, PrototypeNode)
        self.assertEqual(len(ast.arguments), 1)
        print(self.parser._flatten(ast))