Annotation of gforth/test/tester.fs, revision 1.3
1.1 anton 1: \ From: John Hayes S1I
2: \ Subject: tester.fr
3: \ Date: Mon, 27 Nov 95 13:10:09 PST
4:
5: \ (C) 1995 JOHNS HOPKINS UNIVERSITY / APPLIED PHYSICS LABORATORY
6: \ MAY BE DISTRIBUTED FREELY AS LONG AS THIS COPYRIGHT NOTICE REMAINS.
7: \ VERSION 1.1
1.3 ! anton 8:
! 9: \ revised by Anton Ertl 2007-08-12
! 10: \ added fp comparisons (note: BASE is HEX after loading this file)
! 11: \ environmental dependency on separate fp stack
! 12: \ the sensitivity of the fp comparison is determined by FSENSITIVITY
! 13: \ added support for non-empty stack at the start
1.1 anton 14: HEX
15:
16: \ SET THE FOLLOWING FLAG TO TRUE FOR MORE VERBOSE OUTPUT; THIS MAY
17: \ ALLOW YOU TO TELL WHICH TEST CAUSED YOUR SYSTEM TO HANG.
18: VARIABLE VERBOSE
19: FALSE VERBOSE !
20:
1.3 ! anton 21: VARIABLE ACTUAL-DEPTH \ STACK RECORD
! 22: CREATE ACTUAL-RESULTS 20 CELLS ALLOT
! 23: VARIABLE START-DEPTH
! 24: VARIABLE ERROR-XT
! 25:
! 26: : ERROR ERROR-XT @ EXECUTE ;
! 27:
! 28: : "FLOATING" S" FLOATING" ; \ ONLY COMPILED S" IN CORE
! 29: : "FLOATING-STACK" S" FLOATING-STACK" ;
! 30: "FLOATING" ENVIRONMENT? [IF]
! 31: [IF]
! 32: "FLOATING-STACK" ENVIRONMENT? [IF]
! 33: [IF]
! 34: TRUE
! 35: [ELSE]
! 36: FALSE
! 37: [THEN]
! 38: [ELSE] \ WE DON'T KNOW WHETHER THE FP STACK IS SEPARATE
! 39: TRUE \ SAFER CHOICE TO ASSUME IT IS
! 40: [THEN]
! 41: [ELSE]
! 42: FALSE
! 43: [THEN]
! 44: [ELSE]
! 45: FALSE
! 46: [THEN]
! 47: [IF] \ WE HAVE FP WORDS AND A SEPARATE FP STACK
! 48: FVARIABLE FSENSITIVITY -1E-12 FSENSITIVITY F!
! 49: VARIABLE ACTUAL-FDEPTH
! 50: CREATE ACTUAL-FRESULTS 20 FLOATS ALLOT
! 51: VARIABLE START-FDEPTH
! 52:
! 53: : EMPTY-FSTACK ( ... -- ... )
! 54: FDEPTH START-FDEPTH @ < IF
! 55: FDEPTH START-FDEPTH @ SWAP DO 0E LOOP
! 56: THEN
! 57: FDEPTH START-FDEPTH @ > IF
! 58: FDEPTH START-FDEPTH @ DO FDROP LOOP
! 59: THEN ;
! 60:
! 61: : F{ ( -- )
! 62: FDEPTH START-FDEPTH ! ;
! 63:
! 64: : F-> ( ... -- ... )
! 65: FDEPTH DUP ACTUAL-FDEPTH !
! 66: START-FDEPTH @ > IF
! 67: FDEPTH START-FDEPTH @ DO ACTUAL-FRESULTS I FLOATS + F! LOOP
! 68: THEN ;
! 69:
! 70: : F} ( ... -- ... )
! 71: FDEPTH ACTUAL-FDEPTH @ = IF
! 72: FDEPTH START-FDEPTH @ > IF
! 73: FDEPTH START-FDEPTH @ DO
! 74: ACTUAL-FRESULTS I FLOATS + F@
! 75: FSENSITIVITY F@ F~ INVERT IF
! 76: S" INCORRECT RESULT: " ERROR LEAVE
! 77: THEN
! 78: LOOP
! 79: THEN
! 80: ELSE
! 81: S" WRONG NUMBER OF RESULTS: " ERROR
! 82: THEN ;
! 83: [ELSE]
! 84: : EMPTY-FSTACK ;
! 85: : F{ ;
! 86: : F-> ;
! 87: : F} ;
! 88: [THEN]
! 89:
1.1 anton 90: : EMPTY-STACK \ ( ... -- ) EMPTY STACK: HANDLES UNDERFLOWED STACK TOO.
1.3 ! anton 91: DEPTH START-DEPTH @ < IF
! 92: DEPTH START-DEPTH @ SWAP DO 0 LOOP
! 93: THEN
! 94: DEPTH START-DEPTH @ > IF
! 95: DEPTH START-DEPTH @ DO DROP LOOP
! 96: THEN
! 97: EMPTY-FSTACK ;
1.1 anton 98:
1.3 ! anton 99: : ERROR1 \ ( C-ADDR U -- ) DISPLAY AN ERROR MESSAGE FOLLOWED BY
1.1 anton 100: \ THE LINE THAT HAD THE ERROR.
101: TYPE SOURCE TYPE CR \ DISPLAY LINE CORRESPONDING TO ERROR
102: EMPTY-STACK \ THROW AWAY EVERY THING ELSE
103: ;
104:
1.3 ! anton 105: ' ERROR1 ERROR-XT !
1.1 anton 106:
107: : { \ ( -- ) SYNTACTIC SUGAR.
1.3 ! anton 108: DEPTH START-DEPTH ! F{ ;
1.1 anton 109:
110: : -> \ ( ... -- ) RECORD DEPTH AND CONTENT OF STACK.
111: DEPTH DUP ACTUAL-DEPTH ! \ RECORD DEPTH
1.2 anton 112: START-DEPTH @ > IF \ IF THERE IS SOMETHING ON STACK
113: DEPTH START-DEPTH @ DO ACTUAL-RESULTS I CELLS + ! LOOP \ SAVE THEM
1.3 ! anton 114: THEN
! 115: F-> ;
1.1 anton 116:
117: : } \ ( ... -- ) COMPARE STACK (EXPECTED) CONTENTS WITH SAVED
118: \ (ACTUAL) CONTENTS.
119: DEPTH ACTUAL-DEPTH @ = IF \ IF DEPTHS MATCH
1.2 anton 120: DEPTH START-DEPTH @ > IF \ IF THERE IS SOMETHING ON THE STACK
121: DEPTH START-DEPTH @ DO \ FOR EACH STACK ITEM
1.1 anton 122: ACTUAL-RESULTS I CELLS + @ \ COMPARE ACTUAL WITH EXPECTED
123: <> IF S" INCORRECT RESULT: " ERROR LEAVE THEN
124: LOOP
125: THEN
126: ELSE \ DEPTH MISMATCH
127: S" WRONG NUMBER OF RESULTS: " ERROR
1.3 ! anton 128: THEN
! 129: F} ;
1.1 anton 130:
131: : TESTING \ ( -- ) TALKING COMMENT.
132: SOURCE VERBOSE @
133: IF DUP >R TYPE CR R> >IN !
134: ELSE >IN ! DROP
135: THEN ;
136:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>