1

vorschlag tests

This commit is contained in:
ChUrl
2021-08-09 16:37:33 +02:00
parent f1b5a40ebb
commit 7365c41e11
6 changed files with 317 additions and 0 deletions

71
mytest/test_boolean.py Normal file
View 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
View 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
View 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
View 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
View 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

Binary file not shown.