def test_invalid_argument_types(self):
     with pytest.raises(FunctionArgumentsError):
         stack = Stack()
         stack.add_variable("var", Set(Real))
         stack.add_variable("func", Function((([Integer, List(Integer)]), Integer)))
         tree = tr("func_call", "func", tr("int_literal", "1"), tr("variable", "var"))
         parser.handle(tree, stack)
 def test_invalid_arguments_count_many(self):
     with pytest.raises(FunctionArgumentsError):
         stack = Stack()
         stack.add_variable("func", Function(([Integer, Integer], Integer)))
         tree = tr("func_call", "func", tr("int_literal", "1"), tr("int_literal", "1"),
                   tr("int_literal", "1"))
         parser.handle(tree, stack)
def test_variable_exist():
    tree = tr("variable", "a")
    stack = Stack()
    stack.add_variable("a", Integer)
    expression: Expression = parser.handle(tree, stack)
    assert expression.type == Integer
    assert expression.expression == ["var_0"]
def test_for_loop_wrong_iterator_type():
    with pytest.raises(ValueTypeError):
        stack = Stack()
        stack.add_variable("var", Bool)
        stack.add_variable("range", List(Integer))
        tree = tr("for_expression",
                  "var",
                  tr("variable", "range"),
                  tr("int_literal", "1"))
        parser.handle(tree, stack)
Example #5
0
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_for_loop_existing_var():
    stack = Stack()
    stack.add_variable("var", Real)
    stack.add_variable("range", List(Integer))
    tree = tr("for_expression",
              "var",
              tr("variable", "range"),
              tr("int_literal", "1"))
    expression = parser.handle(tree, stack)
    assert isinstance(expression, ForLoopExpression)
    assert expression.iterator == "var_0"
    assert expression.range.expression == ["var_1"]
    assert expression.actions[0].expression == ["1"]
Example #7
0
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_function_call(self, is_global):
        stack = Stack()
        stack.add_variable("array", List(Integer))
        func = Function(([Integer, Real, List(Integer)], Void))
        if is_global:
            stack.add_global("func", func)
        else:
            stack.add_variable("func", func)

        tree = tr("func_call",
                  "func",
                  tr("int_literal", "1"),
                  tr("int_literal", "2"),
                  tr("variable", "array"))
        expression = parser.handle(tree, stack)

        assert expression.type == Void
        func_name = "func" if is_global else "var_1"
        assert expression.expression == [func_name, "(", "1", ", ", "2", ", ", "var_0", ")"]
 def test_var_assignment(self):
     stack = Stack()
     stack.add_variable("var", Real)
     tree = tr("var_assignment", "var", tr("int_literal", "42"))
     expression = parser.handle(tree, stack)
     assert expression.expression == ["var_0", " = ", "42"]