1
Files
lecture-interpreters/mytests/test_general.py
2021-09-02 18:26:42 +02:00

95 lines
2.0 KiB
Python

from bytecodeinterpreter import Interpreter
from simpleparser import parse
def eval_test_program(name):
import os
program = os.path.join(os.path.dirname(__file__),
"..",
"examples",
name + ".simple")
with open(program, "r") as f:
ast = parse(f.read())
interpreter = Interpreter()
w_model = interpreter.make_module()
interpreter.eval(ast, w_model)
return w_model, interpreter
def test_fibonacci_rec():
w_model, interpreter = eval_test_program("fibonacci")
ast = parse("""
x = fibonacci_rec(5)
y = fibonacci_rec(10)
""")
interpreter.eval(ast, w_model)
assert w_model.getvalue("x").value == 5
assert w_model.getvalue("y").value == 55
ast = parse("""
x = fibonacci_it(5)
y = fibonacci_it(10)
""")
interpreter.eval(ast, w_model)
assert w_model.getvalue("x").value == 5
assert w_model.getvalue("y").value == 55
def test_inheritance():
w_model, interpreter = eval_test_program("inheritance")
ast = parse("""
x = square
x size = 5
xa = x area
y = circle
ya = y area
""")
interpreter.eval(ast, w_model)
assert w_model.getvalue("xa").value == 25
assert w_model.getvalue("ya").value == 3.1415
def test_rotation():
w_model, interpreter = eval_test_program("rotations")
ast = parse("""
x = "Hallo"
y = rotate(x, 2)
z = rotate(x, 4)
""")
interpreter.eval(ast, w_model)
assert w_model.getvalue("y").value == "lloHa"
assert w_model.getvalue("z").value == "oHall"
def test_numbers():
w_model, interpreter = eval_test_program("numbers")
ast = parse("""
x = generate_list(5)
def function(n):
n * n
y = generate_list(5)
def function(n):
n + 1
z = generate_list(5)
""")
interpreter.eval(ast, w_model)
assert w_model.getvalue("x").value == "1 2 3 4 5"
assert w_model.getvalue("y").value == "1 4 9 16 25"
assert w_model.getvalue("z").value == "2 3 4 5 6"