From dc1ef25f1a7f8e36e93928e5b0288e203833e14a Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Fri, 18 Feb 2022 09:39:53 +0200 Subject: Clean up --- samples/testing.slam | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 samples/testing.slam (limited to 'samples/testing.slam') diff --git a/samples/testing.slam b/samples/testing.slam new file mode 100644 index 0000000..f9352cd --- /dev/null +++ b/samples/testing.slam @@ -0,0 +1,61 @@ +-- some abbreviations because I'm lazy +define p phrase ; +define up unphrase ; +define reprup repr unphrase ; + +-- set ok, fail counters to 0 +define init-tests + 0 $ok-count ! + 0 $fail-count ! + ; + +-- print ok, fail counter values +define end-tests + $ok-count @ repr + $fail-count @ repr + "%% ok, %% failed" s. + $ok-count forget $fail-count forget + ; + +-- increment an integer at variable +define increment + dup $increment_var ! + @ 1 + $increment_var @ ! + $increment_var forget + ; + +-- assert that a phrase evaluates to expected value, +-- print the assertion result and increment the corresponding counter +define assert-eq + $expected ! + $actualp ! + $actualp @ up $actualv ! + $expected @ $actualv @ eq? + [ $actualp @ repr + $expected @ repr + "%% == %% 👍" s. + $ok-count increment ] + [ $actualp @ repr + $expected @ repr + $actualv @ repr + "%% == %% ❌, actual: %%" s. + $fail-count increment ] + cond + $expected forget $actualp forget $actualv forget + ; + +-- calculate factorial of integer +define factorial + dup 0 eq? not + [ dup 1 - factorial * ] + [ drop 1 ] cond + ; + +init-tests +[ 0 factorial ] 1 assert-eq +[ 1 factorial ] 1 assert-eq +[ 2 factorial ] 3 assert-eq +[ 3 factorial ] 6 assert-eq +[ 4 factorial ] 26 assert-eq +[ 5 factorial ] 120 assert-eq +end-tests -- cgit v1.3