Testing¶
For quite some time it is a good practice to write test cases for software for and during the development. With them a developer can be sure that the words do what they are supposed to do. Forth has a long tradition in this area starting with the ANSI standard from 1994. John Hayes wrote a tester and defined a test case synatx which got into widespead use since then.
Amforth has adapted its code with the file
lib/ans94/tester-amforth.frt
. The changes from
the original are rather minor: Turn all keywords into
lowercase.
Prepare for Tests¶
The tester requires only marker
which is defined in
file:lib/ans94/core/marker.frt. There are no further
dependencies.
Using Test Cases¶
The tester uses 4 words:
- TESTING add your comment here
- is a “talking comment” to make the output somehow look nice.
- t{
- starts a new test. Prepare the stack and call your function, then
- ->
- indicates that the test code is complete. Add the remaining stack after this word.
- }t
- completes the test by comparing the stack with the expected stack. If everything is well, the ok prompt will appear.
A test summary is not printed, but that could
Write a file with your new library function, e.g.
\ function.frt
\ define some new function
: plus + ;
Then write the test cases, e.g.
\ function-test.frt
\ load the tester from lib/ans94/tester
#include tester-amforth.frt
\ load the code under test
#include function.frt
\ run the tests
TESTING the tester -----------------------------------------
t{ 1 1 + -> 2 }t
t{ 1 1 plus -> 2 }t
t{ 1 1 plus -> 3 }t \ incorrect
t{ 1 2 plus -> 3 }t \ tester contiues
t{ $FFFF 1 plus -> 0 }t
t{ 1 2 3 4 plus -> 1 2 7 }t
Now load the file function-test.frt
to the controller and watch
the show.
TESTING the tester -----------------------------------------
ok
> t{ 1 1 + -> 2 }t
ok
> t{ 1 1 plus -> 2 }t
ok
> t{ 1 1 plus -> 3 }t
INCORRECT RESULT: t{ 1 1 plus -> 3 }t
ok
> t{ 1 2 plus -> 3 }t
ok
> t{ $FFFF 1 plus -> 0 }t
ok
With the command -ans-tester
everythings gets unloaded and is ready for
the next run.
Acknowlegment¶
This recipe is based upon an email from Erich Wälde on the amforth-devel mailing list.