aboutsummaryrefslogtreecommitdiffstats
path: root/test/e2e/call_stack/test_call_stack.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/e2e/call_stack/test_call_stack.py')
-rw-r--r--test/e2e/call_stack/test_call_stack.py65
1 files changed, 65 insertions, 0 deletions
diff --git a/test/e2e/call_stack/test_call_stack.py b/test/e2e/call_stack/test_call_stack.py
new file mode 100644
index 0000000..3895f5c
--- /dev/null
+++ b/test/e2e/call_stack/test_call_stack.py
@@ -0,0 +1,65 @@
+import time
+from atk16_asm import assemble
+from atk16_emu import Machine
+from test.utils import pad_bytearray
+
+def run_mul(a: int, b: int) -> int:
+ filename = "test/e2e/call_stack/run_mul.atk16"
+ with open(filename, "r") as f:
+ source = f.read()
+
+ source = source.replace("%INPUT_A%", str(a))
+ source = source.replace("%INPUT_B%", str(b))
+
+ obj = assemble(source, filename)
+ rom_image = pad_bytearray(obj.program)
+
+ machine = Machine()
+ machine.load_rom_image(rom_image)
+ machine.reset()
+ machine.run_until_halted()
+
+ return machine.rg.value
+
+def test_mul_1():
+ expected = 30
+ received = run_mul(5, 6)
+
+ assert expected == received
+
+def test_mul_2():
+ a = -100
+ b = 200
+ expected = a * b
+ received = run_mul(a, b)
+
+ assert expected == received
+
+def run_fact(n: int) -> int:
+ filename = "test/e2e/call_stack/run_fact.atk16"
+ with open(filename, "r") as f:
+ source = f.read()
+
+ source = source.replace("%INPUT%", str(n))
+ obj = assemble(source, filename)
+ rom_image = pad_bytearray(obj.program)
+
+ machine = Machine()
+ machine.load_rom_image(rom_image)
+ machine.reset()
+ machine.run_until_halted()
+
+ return machine.rg.value
+
+def test_fact_0():
+ expected = 1
+ received = run_fact(0)
+
+ assert expected == received
+
+def test_fact_6():
+ expected = 720
+ received = run_fact(6)
+
+ assert expected == received
+