1
Files
lecture-interpreters/mytest/test_sugar.py
2021-08-11 21:17:36 +02:00

60 lines
1.4 KiB
Python

import py
from simpleparser import parse
from objmodel import W_NormalObject
from interpreter import Interpreter
def sugar_test_helper(expr):
ast = parse("x = " + expr)
print(ast)
interpreter = Interpreter()
w_module = interpreter.make_module()
interpreter.eval(ast, w_module)
return w_module.getvalue("x").value
def test_plus():
assert sugar_test_helper("1 + 1 + 1") == 3
assert sugar_test_helper("1 + 1") == 2
def test_minus():
assert sugar_test_helper("2 - 1") == 1
assert sugar_test_helper("3 - 1 - 1") == 1
def test_mult():
assert sugar_test_helper("2 * 5") == 10
assert sugar_test_helper("2 * 3 * 4") == 24
def test_div():
assert sugar_test_helper("10 / 2") == 5
assert sugar_test_helper("24 / 3 / 2") == 4
def test_mod():
assert sugar_test_helper("11 % 2") == 1
def test_inc():
assert sugar_test_helper("1 ++") == 2
assert sugar_test_helper("1 ++ + 1") == 3 # Is this allowed?
assert sugar_test_helper("2 * 2 ++") == 6
def test_mixed_precedence():
assert sugar_test_helper("2 * 3 / 2") == 3
assert sugar_test_helper("1 + 2 + 3 - 5") == 1
assert sugar_test_helper("10 - 2 * 5") == 0
assert sugar_test_helper("1 + 2 * 2 * 3 - 3 * 4") == 1
def test_parenthesis():
assert sugar_test_helper("2 * (2 + 3)") == 10
assert sugar_test_helper("(2 + 5)") == 7
assert sugar_test_helper("(3 + 3) % 2") == 0
assert sugar_test_helper("(2 * 2) ++") == 5