コード例 #1
0
    def test_value(self):
        tree = tr("var_decl", "a", "b", "c", tr("type_int"), tr("int_literal", "1"))
        stack = Stack()

        values: typing.List[Expression] = parser.handle(tree, stack)
        for i, value in enumerate(values):
            assert value.type == Void
            assert value.expression == ["var_" + str(i), " = ", "1"]

        assert stack.get_variable("a").type == Integer
        assert stack.get_variable("b").type == Integer
        assert stack.get_variable("c").type == Integer
コード例 #2
0
    def test_var_declaration(self):
        tree = tr("var_decl", "a", "b", "c", tr("type_int"))
        stack = Stack()

        expressions = parser.handle(tree, stack)
        for i, value in enumerate(expressions):
            assert value.type == Void
            assert value.expression == ["var_" + str(i), " = ", "0"]

        assert stack.get_variable("a").type == Integer
        assert stack.get_variable("b").type == Integer
        assert stack.get_variable("c").type == Integer
コード例 #3
0
ファイル: test_stack.py プロジェクト: poletaevvlad/CubeLang
def test_globals():
    stack = Stack()
    stack.add_global("a", List(Integer))
    stack.add_variable("b", Real)

    g = stack.get_variable("a")
    assert g.type == List(Integer)
    assert g.number == -1

    stack.add_variable("a", Bool)
    g = stack.get_variable("a")
    assert g.type == Bool
    assert g.number == 1
コード例 #4
0
ファイル: test_stack.py プロジェクト: poletaevvlad/CubeLang
def test_frames():
    stack = Stack()
    assert stack.add_variable("a", Integer) == 0
    assert stack.add_variable("b", Real) == 1

    stack.add_frame()
    assert stack.add_variable("b", List(Integer)) == 2
    assert stack.add_variable("c", Bool) == 3
    assert stack.get_variable("b").type == List(Integer)

    stack.pop_frame()
    assert stack.get_variable("b").type == Real
    assert stack.get_variable("c") is None
    assert stack.add_variable("c", List(Integer)) == 2
コード例 #5
0
 def test_no_arguments_no_return(self):
     tree = tr("func_decl", "func_name", tr("clause"))
     stack = Stack()
     expression = parser.handle(tree, stack)
     assert isinstance(expression, FunctionDeclarationExpression)
     assert expression.name == "var_0"
     assert expression.symbol_name == "func_name"
     assert expression.arguments == []
     assert expression.return_type == Void
     assert stack.get_variable("func_name").type == Function(([], Void))
コード例 #6
0
 def test_no_return(self):
     tree = tr("func_decl", "func_name",
               tr("argument", "a", tr("type_int")),
               tr("clause", tr("variable", "a")))
     stack = Stack()
     expression = parser.handle(tree, stack)
     assert isinstance(expression, FunctionDeclarationExpression)
     assert expression.name == "var_0"
     assert expression.symbol_name == "func_name"
     assert expression.arguments == ["var_0"]
     assert expression.return_type == Void
     assert expression.clause[0].expression == ["var_0"]
     assert expression.clause[0].type == Integer
     assert stack.get_variable("func_name").type == Function(([Integer], Void))
コード例 #7
0
def test_library_init_stack():
    lib = Library()

    @lib.function([Integer], Integer)
    def func1():
        pass

    @lib.function([Real], Real)
    def func2():
        pass

    stack = Stack()
    lib.initialize_stack(stack)
    assert stack.get_variable("func1").type == Function(([Integer], Integer))
    assert stack.get_variable("func2").type == Function(([Real], Real))
コード例 #8
0
 def test_default(self):
     tree = tr("func_decl", "func_name",
               tr("argument", "a", tr("type_int")),
               tr("argument", "b", tr("type_real")),
               tr("type_bool"),
               tr("clause", tr("variable", "a"), tr("variable", "b")))
     stack = Stack()
     expression = parser.handle(tree, stack)
     assert isinstance(expression, FunctionDeclarationExpression)
     assert expression.name == "var_0"
     assert expression.symbol_name == "func_name"
     assert expression.arguments == ["var_0", "var_1"]
     assert expression.return_type == Bool
     assert expression.clause[0].expression == ["var_0"]
     assert expression.clause[0].type == Integer
     assert expression.clause[1].expression == ["var_1"]
     assert expression.clause[1].type == Real
     assert stack.get_variable("func_name").type == Function(([Integer, Real], Bool))