restructure + syntactic sugar implementation
This commit is contained in:
81
tests/test_method.py
Normal file
81
tests/test_method.py
Normal file
@ -0,0 +1,81 @@
|
||||
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
|
||||
Reference in New Issue
Block a user