1
Files
lecture-interpreters/tests/test_method.py
2021-08-11 21:11:35 +02:00

82 lines
1.8 KiB
Python

from simpleparser import parse
from objmodel import W_NormalObject
from interpreter import Interpreter
def test_assign():
ast = parse("""
object a:
b = 5
def set(n):
self b = n
a set(7)
i = a b
""")
w_module = W_NormalObject()
interpreter = Interpreter()
interpreter.eval(ast, w_module)
assert w_module.getvalue("i").value == 7
def test_method_simple():
ast = parse("""
object a:
x = 11
def f:
self x
object b:
__parent__ = a
x = 22
af = a f # a is the receiver, therefore self is a in the method
bf = b f # b is the receiver, therefore self is b in the method
""")
interpreter = Interpreter()
w_module = interpreter.make_module()
interpreter.eval(ast, w_module)
assert w_module.getvalue("af").value == 11
assert w_module.getvalue("bf").value == 22
def test_method_complex():
ast = parse("""
k = 10
object a:
x = 11
y = 22
def f(a, b):
if a:
if b:
a
else:
k
else:
if b:
self x
else:
self y
object b:
__parent__ = a
y = 55
af11 = a f(1, 1)
af10 = a f(1, 0)
af01 = a f(0, 1)
af00 = a f(0, 0)
k = 908
bf11 = b f(1, 1)
bf10 = b f(1, 0)
bf01 = b f(0, 1)
bf00 = b f(0, 0)
""")
interpreter = Interpreter()
w_module = interpreter.make_module()
interpreter.eval(ast, w_module)
assert w_module.getvalue("af11").value == 1
assert w_module.getvalue("af10").value == 10
assert w_module.getvalue("af01").value == 11
assert w_module.getvalue("af00").value == 22
assert w_module.getvalue("bf11").value == 1
assert w_module.getvalue("bf10").value == 908
assert w_module.getvalue("bf01").value == 11
assert w_module.getvalue("bf00").value == 55