1

example programs tests

This commit is contained in:
Christoph
2021-09-01 22:48:47 +02:00
parent 6d9a2d1ff6
commit 9e122d9ce6
3 changed files with 90 additions and 0 deletions

20
examples/fibonacci.simple Normal file
View File

@ -0,0 +1,20 @@
def fibonacci_rec(n):
if n <= 1:
n
else:
fibonacci_rec(n - 1) + fibonacci_rec(n - 2)
def fibonacci_it(n):
if n <= 1:
n
else:
fib = 1
prev = 1
i = 2
while i < n:
temp = fib
fib = fib + prev
prev = temp
i++
fib

View File

@ -0,0 +1,13 @@
object shape:
size = 1
def area:
size
object square(parent=shape):
def area:
size * size
object circle(parent=shape):
def area:
3.1415 * size * size

57
mytests/test_general.py Normal file
View File

@ -0,0 +1,57 @@
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