diff options
Diffstat (limited to 'test/e2e/call_stack/test_call_stack.py')
| -rw-r--r-- | test/e2e/call_stack/test_call_stack.py | 65 |
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 + |
