aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorJan Tuomi <jan@jantuomi.fi>2024-04-14 15:10:43 +0300
committerJan Tuomi <jan@jantuomi.fi>2024-04-14 15:10:43 +0300
commit2f563af1c27f232abc0516348aa08e1f6e0a20f2 (patch)
treeb530381f88b4c8de1dac20ed0a1f416514ea7438 /test
parent492cc14054b243bfcc02b0c4a2289060aa4adb4f (diff)
Add bump allocator
Diffstat (limited to 'test')
-rw-r--r--test/e2e/std_bump_alloc/run_bump_alloc.atk1610
-rw-r--r--test/e2e/std_bump_alloc/run_bump_reset.atk166
-rw-r--r--test/e2e/std_bump_alloc/test_bump_alloc.py24
-rw-r--r--test/utils.py17
4 files changed, 57 insertions, 0 deletions
diff --git a/test/e2e/std_bump_alloc/run_bump_alloc.atk16 b/test/e2e/std_bump_alloc/run_bump_alloc.atk16
new file mode 100644
index 0000000..b9a8411
--- /dev/null
+++ b/test/e2e/std_bump_alloc/run_bump_alloc.atk16
@@ -0,0 +1,10 @@
+@include %bootstrap
+@include %std_bump_alloc
+
+@label main
+ calli bump_reset
+
+ ldi 5 RA ; allocate 5 words
+ calli bump_alloc
+
+ hlt
diff --git a/test/e2e/std_bump_alloc/run_bump_reset.atk16 b/test/e2e/std_bump_alloc/run_bump_reset.atk16
new file mode 100644
index 0000000..6e14bb7
--- /dev/null
+++ b/test/e2e/std_bump_alloc/run_bump_reset.atk16
@@ -0,0 +1,6 @@
+@include %bootstrap
+@include %std_bump_alloc
+
+@label main
+ calli bump_reset
+ hlt
diff --git a/test/e2e/std_bump_alloc/test_bump_alloc.py b/test/e2e/std_bump_alloc/test_bump_alloc.py
new file mode 100644
index 0000000..9e64b8c
--- /dev/null
+++ b/test/e2e/std_bump_alloc/test_bump_alloc.py
@@ -0,0 +1,24 @@
+from atk16_asm import assemble
+from atk16_emu import Machine
+from test.utils import pad_bytearray, assemble_and_run_until_halted
+
+def test_bump_reset():
+ machine = assemble_and_run_until_halted(
+ "test/e2e/std_bump_alloc/run_bump_reset.atk16"
+ )
+
+ heap_next_p = 0xE7EF
+ heap_next = machine.mem_read(heap_next_p)
+ assert heap_next == heap_next_p - 1
+
+def test_bump_alloc():
+ machine = assemble_and_run_until_halted(
+ "test/e2e/std_bump_alloc/run_bump_alloc.atk16"
+ )
+
+ heap_next_p = 0xE7EF
+ heap_next = machine.mem_read(heap_next_p)
+ assert heap_next == heap_next_p - 1 - 5
+
+ returned_value = machine.rg.value
+ assert returned_value == heap_next + 1
diff --git a/test/utils.py b/test/utils.py
index 873aa64..f7cd8a0 100644
--- a/test/utils.py
+++ b/test/utils.py
@@ -1,3 +1,6 @@
+from atk16_asm import assemble
+from atk16_emu import Machine
+
def pad_bytearray(ba: bytearray, to_length: int = 64 * 1024) -> bytearray:
"""
Pads a bytearray with zeros until it reaches a specified length.
@@ -23,3 +26,17 @@ def make_rom(words: list[int]) -> bytearray:
bytes.append((word >> 8) & 0xFF)
bytes.append(word & 0xFF)
return pad_bytearray(bytearray(bytes))
+
+def assemble_and_run_until_halted(filename: str) -> Machine:
+ with open(filename, "r") as f:
+ source = f.read()
+
+ 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 \ No newline at end of file