diff --git a/examples/fibonacci.simple b/examples/fibonacci.simple new file mode 100644 index 0000000..e4dfaa8 --- /dev/null +++ b/examples/fibonacci.simple @@ -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 diff --git a/examples/inheritance.simple b/examples/inheritance.simple new file mode 100644 index 0000000..bbdb458 --- /dev/null +++ b/examples/inheritance.simple @@ -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 diff --git a/mytests/test_general.py b/mytests/test_general.py new file mode 100644 index 0000000..2bda574 --- /dev/null +++ b/mytests/test_general.py @@ -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