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
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
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
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
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))
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))
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))
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))