From d8954ff0eef3998b84815d6f05bea317a4fd3f41 Mon Sep 17 00:00:00 2001 From: Aaron Taylor Date: Sat, 27 Jul 2019 15:59:37 -0700 Subject: [PATCH] Added tests for stdlib stack functions. Fixed some small bugs. --- stdlib/stack.pvvs | 8 +++++-- stdlib_tests/1001_stackrotate.pvvs | 28 +++++++++++++++++++++++ stdlib_tests/1002_stackrotatereverse.pvvs | 26 +++++++++++++++++++++ stdlib_tests/1003_deepdup.pvvs | 26 +++++++++++++++++++++ stdlib_tests/vv_test.py | 3 +++ 5 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 stdlib_tests/1001_stackrotate.pvvs create mode 100644 stdlib_tests/1002_stackrotatereverse.pvvs create mode 100644 stdlib_tests/1003_deepdup.pvvs diff --git a/stdlib/stack.pvvs b/stdlib/stack.pvvs index c543d98..8705c6a 100644 --- a/stdlib/stack.pvvs +++ b/stdlib/stack.pvvs @@ -6,6 +6,7 @@ @ stackrotate @ Description: @ Maximum rotation depth is 14. Stomps on heap[1]-heap[15]. +@ Assumes rotation depth is at least 2. @ Call Stack: @ stack word n @ ... @@ -22,10 +23,11 @@ NSSVTSTSN | Mark: 1010 (stackrotate) @ For the convenience of other functions, modulo the @ rotation depth by the available registers. -SSSTTTSN | PUSH 14 +SSSTTTTN | PUSH 15 TSTT | MODULO @ Use heap[15] for generating register addresses. +@ TODO: Switch to using heap[1] so number of registers is limited only by user. SSSTTTTN | PUSH 15 (ptr) SSSSN | PUSH 0 TTS | STORE @@ -109,6 +111,7 @@ NTN | RTS @ stackrotatereverse @ Description: @ Maximum rotation depth is 14. Stomps on heap[1]-heap[15]. +@ Assumes rotation depth is at least 2. @ Call Stack: @ stack word n @ ... @@ -125,10 +128,11 @@ NSSVTSTTN | Mark: 1011 (stackrotatereverse) @ For the convenience of other functions, modulo the @ rotation depth by the available registers. -SSSTTTSN | PUSH 14 +SSSTTTTN | PUSH 15 TSTT | MODULO @ Use heap[15] for generating register addresses. +@ TODO: Switch to using heap[1] so number of registers is limited only by user. SSSTTTTN | PUSH 15 (ptr) SSSSN | PUSH 0 TTS | STORE diff --git a/stdlib_tests/1001_stackrotate.pvvs b/stdlib_tests/1001_stackrotate.pvvs new file mode 100644 index 0000000..9a38f03 --- /dev/null +++ b/stdlib_tests/1001_stackrotate.pvvs @@ -0,0 +1,28 @@ +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTTTTSTSSN | PUSH 244 +SSSTTTTSSTTN | PUSH 243 +SSSTTTTSSTSN | PUSH 242 + +SSSTTTSN | PUSH 14 +NSTTSTSN | JSR > 1010 (stackrotate) +SSSTSSSN | PUSH 8 +NSTTSTSN | JSR > 1010 (stackrotate) +SSSTSN | PUSH 2 +NSTTSTSN | JSR > 1010 (stackrotate) + +SSSTTSTN | PUSH 13 +NSTTTTSSTN | JSR > 111001 (dumpstack) +NNN | DIE + +#include +#include diff --git a/stdlib_tests/1002_stackrotatereverse.pvvs b/stdlib_tests/1002_stackrotatereverse.pvvs new file mode 100644 index 0000000..e695a23 --- /dev/null +++ b/stdlib_tests/1002_stackrotatereverse.pvvs @@ -0,0 +1,26 @@ +SSSTTTTSTSSN | PUSH 244 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 + +SSSTTTSN | PUSH 14 +NSTTSTTN | JSR > 1011 (stackrotatereverse) +SSSTSN | PUSH 2 +NSTTSTTN | JSR > 1011 (stackrotatereverse) + +SSSTTSTN | PUSH 13 +NSTTTTSSTN | JSR > 111001 (dumpstack) +NNN | DIE + +#include +#include diff --git a/stdlib_tests/1003_deepdup.pvvs b/stdlib_tests/1003_deepdup.pvvs new file mode 100644 index 0000000..ead3319 --- /dev/null +++ b/stdlib_tests/1003_deepdup.pvvs @@ -0,0 +1,26 @@ +SSSTTTTSTSSN | PUSH 244 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 +SSSTN | PUSH 1 + +@SSSTTTSN | PUSH 14 +SSSTTSTN | PUSH 13 +NSTTTSSN | JSR > 1100 (deepdup) +SSSTSN | PUSH 2 +NSTTTSSN | JSR > 1100 (deepdup) + +SSSTTTSN | PUSH 14 +NSTTTTSSTN | JSR > 111001 (dumpstack) +NNN | DIE + +#include +#include diff --git a/stdlib_tests/vv_test.py b/stdlib_tests/vv_test.py index 4b51b01..ff79a25 100755 --- a/stdlib_tests/vv_test.py +++ b/stdlib_tests/vv_test.py @@ -20,6 +20,9 @@ tests = [ # Format: ['filename_without_extension', 'string for stdin', 'string for expected stdout'] ['0001_dumpstack', '', 'TOS:\n1:\t+42\n0:\t+255\n'], ['0002_dumpheap', '', '32:\t+255\n33:\t+42\n'], + ['1001_stackrotate', '', 'TOS:\n13:\t+1\n12:\t+244\n11:\t+1\n10:\t+1\n9:\t+1\n8:\t+1\n7:\t+1\n6:\t+243\n5:\t+1\n4:\t+1\n3:\t+1\n2:\t+1\n1:\t+1\n0:\t+242\n'], + ['1002_stackrotatereverse', '', 'TOS:\n13:\t+1\n12:\t+244\n11:\t+1\n10:\t+1\n9:\t+1\n8:\t+1\n7:\t+1\n6:\t+1\n5:\t+1\n4:\t+1\n3:\t+1\n2:\t+1\n1:\t+1\n0:\t+1\n'], + ['1003_deepdup', '', 'TOS:\n14:\t+1\n13:\t+244\n12:\t+1\n11:\t+1\n10:\t+1\n9:\t+1\n8:\t+1\n7:\t+1\n6:\t+1\n5:\t+1\n4:\t+1\n3:\t+1\n2:\t+1\n1:\t+1\n0:\t+244\n'], ] for test in tests: -- 2.20.1