blob: 2d4197bd8935e618f001f068a6324cf30af6db20 (
plain) (
tree)
|
|
( Basic Forth test suite )
testing Basic stack operations
5 dup . . test 5 test 5
testing Addition
3 4 + test 7
testing Subtraction
10 3 - test 7
testing Multiplication
6 7 * test 42
testing Division
20 4 / test 5
testing Stack manipulation - rot
1 2 3 rot test 1
testing Stack manipulation - drop
1 2 3 drop test 2
testing Stack manipulation - nip
1 2 3 nip test 3
testing Stack manipulation - tuck
1 2 tuck test 2
testing Stack manipulation - over
1 2 over test 1
testing Variables
variable x
5 x !
x @ test 5
10 x !
x ? ( should print 10 )
testing Negate
5 negate test -5
testing Absolute value
-7 abs test 7
testing Maximum
3 8 max test 8
testing Minimum
3 8 min test 3
testing Modulo
17 5 mod test 2
testing Equality
5 5 = test 1
5 6 = test 0
testing Word definition
: square dup * ;
5 square test 25
testing Complex word definition
variable counter
: increment-counter counter @ 1 + counter ! ;
5 counter !
increment-counter
counter @ test 6
testing Basic conditional - if/then
: test-if-1 ( n -- n ) dup 5 > if ." Greater than 5" then ;
6 test-if-1 test 6 ( should print "Greater than 5" and leave 6 )
4 test-if-1 test 4 ( should print nothing and leave 4 )
testing Basic conditional - if/else/then
: test-if-2 ( n -- n ) dup 5 > if ." Greater" else ." Less=" then ;
6 test-if-2 test 6 ( should print "Greater" and leave 6 )
4 test-if-2 test 4 ( should print "Less=" and leave 4 )
5 test-if-2 test 5 ( should print "Less=" and leave 5 )
testing Nested conditionals
: test-if-3 ( n -- n )
dup 10 > if
dup 20 > if
." >20 "
then
." >10 "
then ;
25 test-if-3 test 25 ( should print ">20 >10 " and leave 25 )
15 test-if-3 test 15 ( should print ">10 " and leave 15 )
5 test-if-3 test 5 ( should print nothing and leave 5 )
testing Conditional with stack operations
: test-if-4 ( n -- n n )
dup 5 > if
dup
then ;
6 test-if-4 swap test 6 test 6 ( should leave 6 6 )
4 test-if-4 test 4 ( should leave just 4 )
testing Complex nested conditionals
: test-if-5 ( n -- n )
dup 0 < if
." negative "
else
dup 100 > if
." big "
else
dup 50 > if
." medium "
else
." small "
then
then
then ;
-5 test-if-5 test -5 ( should print "negative " )
150 test-if-5 test 150 ( should print "big " )
75 test-if-5 test 75 ( should print "medium " )
25 test-if-5 test 25 ( should print "small " )
testing Conditionals in word definitions
: abs-test ( n -- |n| ) dup 0 < if negate then ;
-5 abs-test test 5
5 abs-test test 5
testing Complex conditional word
: max-test ( n1 n2 -- max )
2dup > if
drop
else
nip
then ;
5 3 max-test test 5
3 5 max-test test 5
( Try to use if outside of a definition - should error )
testing Compile-only words
5 4 > if 42 then ( should print error about compile-only word )
testing Comparison operators
5 3 > test 1 ( 5 > 3 is true )
3 5 > test 0 ( 3 > 5 is false )
3 5 < test 1 ( 3 < 5 is true )
5 3 < test 0 ( 5 < 3 is false )
5 5 < test 0 ( 5 < 5 is false )
5 5 > test 0 ( 5 > 5 is false )
testing Comparison in conditionals
: test-compare ( n -- )
dup 5 > if ." Greater than 5" else
dup 5 < if ." Less than 5" else
." Equal to 5" then then ;
6 test-compare ( should print "Greater than 5" )
4 test-compare ( should print "Less than 5" )
5 test-compare ( should print "Equal to 5" )
bye
|