From 528c8e560ffe168de6fd4dd0f3c6a246e15e0c2d Mon Sep 17 00:00:00 2001 From: Brad Nelson Date: Mon, 15 Feb 2021 12:24:36 -0800 Subject: [PATCH] Adding tests for DO LOOP --- ueforth/common/all_tests.fs | 1 + ueforth/common/doloop_tests.fs | 118 +++++++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 ueforth/common/doloop_tests.fs diff --git a/ueforth/common/all_tests.fs b/ueforth/common/all_tests.fs index 0762934..d43d319 100644 --- a/ueforth/common/all_tests.fs +++ b/ueforth/common/all_tests.fs @@ -4,4 +4,5 @@ include common/base_tests.fs include common/utils_tests.fs include common/vocabulary_tests.fs include common/locals_tests.fs +include common/doloop_tests.fs run-tests diff --git a/ueforth/common/doloop_tests.fs b/ueforth/common/doloop_tests.fs new file mode 100644 index 0000000..e3b75b7 --- /dev/null +++ b/ueforth/common/doloop_tests.fs @@ -0,0 +1,118 @@ +( Test DO LOOP Works ) + +e: test-0doloop + : foo 0 do i . loop cr ; + 10 foo + out: 0 1 2 3 4 5 6 7 8 9 +;e + +e: test-0?do-loop + : foo 0 ?do i . loop cr ; + 10 foo + out: 0 1 2 3 4 5 6 7 8 9 + 0 foo + out: +;e + +e: test-rev-doloop + : foo 0 10 do i . -1 +loop cr ; + foo + out: 10 9 8 7 6 5 4 3 2 1 0 +;e + +e: test-rev-?doloop + : foo 0 10 ?do i . -1 +loop cr ; + foo + out: 10 9 8 7 6 5 4 3 2 1 0 +;e + +e: test-do+loop + : foo 0 do i . 2 +loop cr ; + 9 foo + out: 0 2 4 6 8 + 10 foo + out: 0 2 4 6 8 + 11 foo + out: 0 2 4 6 8 10 + 1 foo + out: 0 +;e + +e: test-?do+loop + : foo 0 ?do i . 2 +loop cr ; + 9 foo + out: 0 2 4 6 8 + 10 foo + out: 0 2 4 6 8 + 11 foo + out: 0 2 4 6 8 10 + 1 foo + out: 0 + 0 foo + out: +;e + +e: test-doloop-leave + : foo 0 do 42 emit i 7 = if ." left " leave ." nope" then i . loop cr ; + 7 foo + out: *0 *1 *2 *3 *4 *5 *6 + 8 foo + out: *0 *1 *2 *3 *4 *5 *6 *left + 9 foo + out: *0 *1 *2 *3 *4 *5 *6 *left +;e + +e: test-do+loop-leave + : foo 0 do 42 emit i 8 = if ." left " leave ." nope" then i . 2 +loop cr ; + 7 foo + out: *0 *2 *4 *6 + 8 foo + out: *0 *2 *4 *6 + 9 foo + out: *0 *2 *4 *6 *left + 0 foo + out: *0 +;e + +e: test-?do+loop-leave + : foo 0 ?do 42 emit i 8 = if ." left " leave ." nope" then i . 2 +loop cr ; + 7 foo + out: *0 *2 *4 *6 + 8 foo + out: *0 *2 *4 *6 + 9 foo + out: *0 *2 *4 *6 *left + 0 foo + out: +;e + +e: test-do+loop-unloop + : foo 0 do 42 emit i 8 = if ." left " cr unloop exit then i . 2 +loop ." done " cr ; + 7 foo + out: *0 *2 *4 *6 done + 8 foo + out: *0 *2 *4 *6 done + 9 foo + out: *0 *2 *4 *6 *left + 0 foo + out: *0 done +;e + +e: test-?do+loop-unloop + : foo 0 ?do 42 emit i 8 = if ." left " cr unloop exit then i . 2 +loop ." done " cr ; + 7 foo + out: *0 *2 *4 *6 done + 8 foo + out: *0 *2 *4 *6 done + 9 foo + out: *0 *2 *4 *6 *left + 0 foo + out: done +;e + +e: test-doloop-j + : foo 5 0 do 3 0 do j . loop loop cr ; + foo + out: 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 +;e +