# 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:

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.