' | alias \ \ A quick implementation of tester.fs functionality. \ neal@quartus.net August 2006, for rf 9.2.6 \ Version 0.1 fixed a small issue with what error displayed. \ Version 0.2 has a working ?dup -- the one in the ANS rf code was broken. \ Now {{ -> }} tests will succeed. \ A few helpful definitions lifted from the rf ANS compatibility file: loc: : sp@ dup [ $f089 2, ] ; reset sp@ constant base :: base sp@ - 4 / 1- ; ;loc alias depth macro : else $e9 1, here 0 , swap dup here swap - 4 - swap ! ; macro : leave x: rdrop x: rdrop x: ;; ; forth : abort rdrop reset ['] boot execute ; \ A working ?dup : ?dup dup 0 <> if dup then ; \ A .s that only displays what's on the actual stack. : (.s) depth 0 swap < if >r (.s) r> dup . then ; : .s depth ." <" # ." > " (.s) cr ; \ tester.fs functionality: variable actual-depth create actual-results 20 cells allot variable temp>in : error type type temp>in @ >in @ over - type cr abort ; : {{ >in @ 3 - temp>in ! ; : }} depth actual-depth @ = if depth ?dup if for actual-results r 1- cells + @ <> if s" Incorrect result: " error leave then next then else s" Wrong number of results: " error then ; : -> depth dup actual-depth ! ?dup if for actual-results r 1- cells + ! next then ; \ Example tests: {{ -> }} {{ 3 5 + -> 8 }} {{ true not -> false }}