vorschlag tests
This commit is contained in:
71
mytest/test_boolean.py
Normal file
71
mytest/test_boolean.py
Normal file
@ -0,0 +1,71 @@
|
||||
import py
|
||||
|
||||
from simpleparser import parse
|
||||
from objmodel import W_NormalObject, W_Integer
|
||||
from interpreter import Interpreter
|
||||
|
||||
|
||||
def test_boolean_assignment():
|
||||
ast = parse("""
|
||||
x = true
|
||||
y = false
|
||||
""")
|
||||
interpreter = Interpreter()
|
||||
w_model = interpreter.make_module()
|
||||
interpreter.eval(ast, w_model)
|
||||
|
||||
assert isinstance(w_model.getvalue("x"), W_Boolean)
|
||||
assert w_model.getvalue("x").istrue() is True
|
||||
assert isinstance(w_model.getvalue("y"), W_Boolean)
|
||||
assert w_model.getvalue("y").istrue() is False
|
||||
|
||||
|
||||
def test_boolean_operations():
|
||||
ast = parse("""
|
||||
x = true and(false)
|
||||
y = true or(false)
|
||||
z = not(true)
|
||||
""")
|
||||
interpreter = Interpreter()
|
||||
w_model = interpreter.make_module()
|
||||
interpreter.eval(ast, w_model)
|
||||
|
||||
assert isinstance(w_model.getvalue("x"), W_Boolean)
|
||||
assert w_model.getvalue("x").istrue() is False
|
||||
assert isinstance(w_model.getvalue("y"), W_Boolean)
|
||||
assert w_model.getvalue("y").istrue() is True
|
||||
assert isinstance(w_model.getvalue("z"), W_Boolean)
|
||||
assert w_model.getvalue("z").istrue() is False
|
||||
|
||||
|
||||
def test_boolean_result():
|
||||
ast = parse("""
|
||||
x = 1 eq(2)
|
||||
y = 1 leq(2)
|
||||
""")
|
||||
interpreter = Interpreter()
|
||||
w_model = interpreter.make_module()
|
||||
interpreter.eval(ast, w_model)
|
||||
|
||||
assert isinstance(w_model.getvalue("x"), W_Boolean)
|
||||
assert w_model.getvalue("x").istrue() is False
|
||||
assert isinstance(w_model.getvalue("y"), W_Boolean)
|
||||
assert w_model.getvalue("y").istrue() is True
|
||||
|
||||
|
||||
def test_boolean_conversion():
|
||||
ast = parse("""
|
||||
x = 1 toboolean
|
||||
y = true toint
|
||||
z = false toint
|
||||
""")
|
||||
interpreter = Interpreter()
|
||||
w_model = interpreter.make_module()
|
||||
interpreter.eval(ast, w_model)
|
||||
|
||||
assert isinstance(w_model.getvalue("x"), W_Boolean)
|
||||
assert w_model.getvalue("x").istrue() is True
|
||||
assert isinstance(w_model.getvalue("y"), W_Integer)
|
||||
assert w_model.getvalue("y").value == 1
|
||||
assert isinstance(w_model.getvalue("z"), W_Integer)
|
||||
assert w_model.getvalue("z").value == 0
|
53
mytest/test_double.py
Normal file
53
mytest/test_double.py
Normal file
@ -0,0 +1,53 @@
|
||||
import py
|
||||
|
||||
from simpleparser import parse
|
||||
from objmodel import W_NormalObject, W_Integer
|
||||
from interpreter import Interpreter
|
||||
|
||||
|
||||
def test_double_assignment():
|
||||
ast = parse("""
|
||||
x = 1.5
|
||||
""")
|
||||
interpreter = Interpreter()
|
||||
w_model = interpreter.make_module()
|
||||
interpreter.eval(ast, w_model)
|
||||
|
||||
assert isinstance(w_model.getvalue("x"), W_Double)
|
||||
assert w_model.getvalue("x").value == 1.5
|
||||
|
||||
|
||||
def test_double_operations():
|
||||
ast = parse("""
|
||||
x = 3 div(2)
|
||||
y = 3 div(2.0)
|
||||
z = 3.0 div(2.0)
|
||||
""")
|
||||
interpreter = Interpreter()
|
||||
w_model = interpreter.make_module()
|
||||
interpreter.eval(ast, w_model)
|
||||
|
||||
assert isinstance(w_model.getvalue("x"), W_Integer)
|
||||
assert w_model.getvalue("x").value == 1
|
||||
assert isinstance(w_model.getvalue("y"), W_Integer)
|
||||
assert w_model.getvalue("y").value == 1
|
||||
assert isinstance(w_model.getvalue("z"), W_Double)
|
||||
assert w_model.getvalue("z").value == 1.5
|
||||
|
||||
|
||||
def test_double_conversion():
|
||||
ast = parse("""
|
||||
x = 1.5 toint
|
||||
y = 2.0 toint
|
||||
z = 3 todouble
|
||||
""")
|
||||
interpreter = Interpreter()
|
||||
w_model = interpreter.make_module()
|
||||
interpreter.eval(ast, w_model)
|
||||
|
||||
assert isinstance(w_model.getvalue("x"), W_Integer)
|
||||
assert w_model.getvalue("x").value == 1
|
||||
assert isinstance(w_model.getvalue("y"), W_Integer)
|
||||
assert w_model.getvalue("y").value == 2
|
||||
assert isinstance(w_model.getvalue("z"), W_Double)
|
||||
assert w_model.getvalue("z").value == 3.0
|
109
mytest/test_gc.py
Normal file
109
mytest/test_gc.py
Normal file
@ -0,0 +1,109 @@
|
||||
import py
|
||||
|
||||
from simpleparser import parse
|
||||
from objmodel import W_NormalObject, W_Integer
|
||||
from interpreter import Interpreter
|
||||
|
||||
|
||||
def test_reassignment_gc():
|
||||
ast = parse("""
|
||||
x = 2
|
||||
y = 3
|
||||
""")
|
||||
interpreter = Interpreter()
|
||||
w_model = interpreter.make_module()
|
||||
interpreter.eval(ast, w_model)
|
||||
|
||||
x = w_model.getvalue("x")
|
||||
y = w_model.getvalue("y")
|
||||
assert x in interpreter.space.realm # Wo alle Objekte leben
|
||||
assert y in interpreter.space.realm
|
||||
|
||||
ast = parse("""
|
||||
x = y
|
||||
""")
|
||||
interpreter.eval(ast, w_model)
|
||||
interpreter.space.gc()
|
||||
assert x not in interpreter.space.realm
|
||||
assert y in interpreter.space.realm
|
||||
|
||||
ast = parse("""
|
||||
x = 0
|
||||
""")
|
||||
interpreter.eval(ast, w_model)
|
||||
interpreter.space.gc()
|
||||
assert x not in interpreter.space.realm
|
||||
assert y not in interpreter.space.realm
|
||||
|
||||
|
||||
def test_chain_gc():
|
||||
ast = parse("""
|
||||
x = 1
|
||||
y = x
|
||||
z = y
|
||||
""")
|
||||
interpreter = Interpreter()
|
||||
w_model = interpreter.make_module()
|
||||
interpreter.eval(ast, w_model)
|
||||
|
||||
x = w_model.getvalue("x")
|
||||
assert x in interpreter.space.realm
|
||||
|
||||
ast = parse("""
|
||||
x = 0
|
||||
""")
|
||||
interpreter.eval(ast, w_model)
|
||||
interpreter.space.gc()
|
||||
assert x in interpreter.space.realm
|
||||
|
||||
ast = parse("""
|
||||
y = x
|
||||
z = y
|
||||
""")
|
||||
interpreter.eval(ast, w_model)
|
||||
interpreter.space.gc()
|
||||
assert x not in interpreter.space.realm
|
||||
|
||||
|
||||
def test_while_gc():
|
||||
ast = parse("""
|
||||
x = 10
|
||||
while x:
|
||||
x = x $int_add(-1)
|
||||
""")
|
||||
interpreter = Interpreter()
|
||||
w_model = interpreter.make_module()
|
||||
interpreter.eval(ast, w_model)
|
||||
|
||||
count = len(interpreter.space.realm)
|
||||
interpreter.space.gc()
|
||||
|
||||
assert count - len(interpreter.space.realm) == 10
|
||||
|
||||
|
||||
def test_object_gc():
|
||||
ast = parse("""
|
||||
object x:
|
||||
a = 1
|
||||
b = 2
|
||||
c = 3
|
||||
""")
|
||||
interpreter = Interpreter()
|
||||
w_model = interpreter.make_module()
|
||||
interpreter.eval(ast, w_model)
|
||||
|
||||
a = w_model.getvalue("x").getvalue("a")
|
||||
b = w_model.getvalue("x").getvalue("b")
|
||||
c = w_model.getvalue("x").getvalue("c")
|
||||
assert a in interpreter.space.realm
|
||||
assert b in interpreter.space.realm
|
||||
assert c in interpreter.space.realm
|
||||
|
||||
ast = parse("""
|
||||
x = 0
|
||||
""")
|
||||
interpreter.eval(ast, w_model)
|
||||
interpreter.space.gc()
|
||||
assert a not in interpreter.space.realm
|
||||
assert b not in interpreter.space.realm
|
||||
assert c not in interpreter.space.realm
|
35
mytest/test_string.py
Normal file
35
mytest/test_string.py
Normal file
@ -0,0 +1,35 @@
|
||||
import py
|
||||
|
||||
from simpleparser import parse
|
||||
from objmodel import W_NormalObject, W_Integer
|
||||
from interpreter import Interpreter
|
||||
|
||||
|
||||
def test_string_assignment():
|
||||
ast = parse("""
|
||||
x = "Hallo"
|
||||
""")
|
||||
interpreter = Interpreter()
|
||||
w_model = interpreter.make_module()
|
||||
interpreter.eval(ast, w_model)
|
||||
|
||||
assert isinstance(w_model.getvalue("x"), W_String)
|
||||
assert w_model.getvalue("x").value == "Hallo"
|
||||
|
||||
|
||||
def test_string_operations():
|
||||
ast = parse("""
|
||||
x = "Hallo" add("ollaH")
|
||||
y = "Hallo" rev
|
||||
z = "Hallo" len
|
||||
""")
|
||||
interpreter = Interpreter()
|
||||
w_model = interpreter.make_module()
|
||||
interpreter.eval(ast, w_model)
|
||||
|
||||
assert isinstance(w_model.getvalue("x"), W_String)
|
||||
assert w_model.getvalue("x").value == "HalloollaH"
|
||||
assert isinstance(w_model.getvalue("y"), W_String)
|
||||
assert w_model.getvalue("y").value == "ollaH"
|
||||
assert isinstance(w_model.getvalue("z"), W_Integer)
|
||||
assert w_model.getvalue("z").value == 5
|
49
mytest/test_sugar.py
Normal file
49
mytest/test_sugar.py
Normal file
@ -0,0 +1,49 @@
|
||||
import py
|
||||
|
||||
from simpleparser import parse
|
||||
from objmodel import W_NormalObject
|
||||
from interpreter import Interpreter
|
||||
|
||||
|
||||
def sugar_test_helper(expr):
|
||||
ast = parse("x = " + expr)
|
||||
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
|
||||
|
||||
|
||||
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
|
BIN
mytest/testcases.zip
Normal file
BIN
mytest/testcases.zip
Normal file
Binary file not shown.
Reference in New Issue
Block a user