Diff for /gforth/test/ttester.fs between versions 1.1 and 1.7

version 1.1, 2007/08/19 21:33:50 version 1.7, 2007/11/02 12:44:49
Line 1 Line 1
   \ for the original tester
 \ From: John Hayes S1I  \ From: John Hayes S1I
 \ Subject: tester.fr  \ Subject: tester.fr
 \ Date: Mon, 27 Nov 95 13:10:09 PST    \ Date: Mon, 27 Nov 95 13:10:09 PST  
   
 \ (C) 1995 JOHNS HOPKINS UNIVERSITY / APPLIED PHYSICS LABORATORY  \ (C) 1995 JOHNS HOPKINS UNIVERSITY / APPLIED PHYSICS LABORATORY
 \ MAY BE DISTRIBUTED FREELY AS LONG AS THIS COPYRIGHT NOTICE REMAINS.  \ MAY BE DISTRIBUTED FREELY AS LONG AS THIS COPYRIGHT NOTICE REMAINS.
 \ VERSION 1.1  \ VERSION 1.1
   
 \ revised by Anton Ertl 2007-08-12, 2007-08-19  \ for the FNEARLY= stuff:
   \ from ftester.fs written by David N. Williams, based on the idea of
   \ approximate equality in Dirk Zoller's float.4th
   \ public domain
   
   \ for the rest:
   \ revised by Anton Ertl 2007-08-12, 2007-08-19, 2007-08-28
   \ public domain
   
 \ The original has the following shortcomings:  \ The original has the following shortcomings:
   
 \ - It does not work as expected if the stack is non-empty before the {.  \ - It does not work as expected if the stack is non-empty before the {.
Line 22 Line 30
 \ http://www.forth200x.org/tests/ttester.fs  \ http://www.forth200x.org/tests/ttester.fs
   
 \ tester.fs is intended to be a drop-in replacement of the original.  \ tester.fs is intended to be a drop-in replacement of the original.
 \ ttester.fs is a version that uses T{ and }T instead of { and }.  
   \ ttester.fs is a version that uses T{ and }T instead of { and } and
   \ keeps the BASE as it was before loading ttester.fs
   
 \ In spirit of the original, I have strived to avoid any potential  \ In spirit of the original, I have strived to avoid any potential
 \ non-portabilities and stayed as much within the CORE words as  \ non-portabilities and stayed as much within the CORE words as
Line 31 Line 41
   
 \ There are a few things to be noted:  \ There are a few things to be noted:
   
 \ - Following the despicable practice of the original, this version  \ - Loading ttester.fs does not change BASE.  Loading tester.fs
 \ sets the base to HEX for everything that gets loaded later.  \ changes BASE to HEX (like the original tester).  Floating-point
 \ Floating-point input is ambiguous when the base is not decimal, so  \ input is ambiguous when the base is not decimal, so you have to set
 \ you have to set it to decimal yourself when you want to deal with  \ it to decimal yourself when you want to deal with decimal numbers.
 \ decimal numbers.  
   
 \ - For FP it is often useful to use approximate equality for checking  \ - For FP it is often useful to use approximate equality for checking
 \ the results.  You can turn on approximate matching with SET-NEAR  \ the results.  You can turn on approximate matching with SET-NEAR
Line 50 Line 59
 \ system or if you need only exact matching, you can use the plain }T  \ system or if you need only exact matching, you can use the plain }T
 \ instead.  \ instead.
   
   BASE @
 HEX  HEX
   
 \ SET THE FOLLOWING FLAG TO TRUE FOR MORE VERBOSE OUTPUT; THIS MAY  \ SET THE FOLLOWING FLAG TO TRUE FOR MORE VERBOSE OUTPUT; THIS MAY
Line 90  HAS-FLOATING [IF] Line 100  HAS-FLOATING [IF]
     \ SET THE FOLLOWING TO THE RELATIVE AND ABSOLUTE TOLERANCES YOU      \ SET THE FOLLOWING TO THE RELATIVE AND ABSOLUTE TOLERANCES YOU
     \ WANT FOR APPROXIMATE FLOAT EQUALITY, TO BE USED WITH F~ IN      \ WANT FOR APPROXIMATE FLOAT EQUALITY, TO BE USED WITH F~ IN
     \ FNEARLY=.  KEEP THE SIGNS, BECAUSE F~ NEEDS THEM.      \ FNEARLY=.  KEEP THE SIGNS, BECAUSE F~ NEEDS THEM.
     FVARIABLE FSENSITIVITY DECIMAL 1E-12 HEX FSENSITIVITY F!      FVARIABLE REL-NEAR DECIMAL 1E-12 HEX REL-NEAR F!
     : REL-NEAR FSENSITIVITY ;  
     FVARIABLE ABS-NEAR    DECIMAL 0E HEX ABS-NEAR F!      FVARIABLE ABS-NEAR    DECIMAL 0E HEX ABS-NEAR F!
   
     \ WHEN EXACT? IS TRUE, }F USES FEXACTLY=, OTHERWISE FNEARLY=.      \ WHEN EXACT? IS TRUE, }F USES FEXACTLY=, OTHERWISE FNEARLY=.
Line 183  HAS-FLOATING-STACK [IF] Line 192  HAS-FLOATING-STACK [IF]
   
     : F...}T ( -- )      : F...}T ( -- )
         FDEPTH START-FDEPTH @ = 0= IF          FDEPTH START-FDEPTH @ = 0= IF
             S" WRONG NUMBER OF FP RESULTS" ERROR              S" NUMBER OF FLOAT RESULTS BEFORE AND AFTER '->' DOES NOT MATCH: " ERROR
         THEN          THEN
         FCURSOR @ ACTUAL-FDEPTH @ <> IF          FCURSOR @ START-FDEPTH @ + ACTUAL-FDEPTH @ <> IF
             S" WRONG NUMBER OF FP RESULTS" ERROR              S" NUMBER OF FLOAT RESULTS BEFORE '->' DOES NOT MATCH ...}T SPRECIFICATION: " ERROR
         THEN ;          THEN ;
           
     : FTESTER ( R -- )      : FTESTER ( R -- )
         FDEPTH 0= ACTUAL-FDEPTH @ FCURSOR @ 1+ < OR IF          FDEPTH 0= ACTUAL-FDEPTH @ FCURSOR @ START-FDEPTH @ + 1+ < OR IF
             S" WRONG NUMBER OF FP RESULTS: " ERROR EXIT              S" NUMBER OF FLOAT RESULTS AFTER '->' BELOW ...}T SPECIFICATION: " ERROR EXIT
         THEN          THEN
         ACTUAL-FRESULTS FCURSOR @ FLOATS + F@ FCONF= 0= IF          ACTUAL-FRESULTS FCURSOR @ FLOATS + F@ FCONF= 0= IF
             S" INCORRECT FP RESULT: " ERROR              S" INCORRECT FP RESULT: " ERROR
Line 205  HAS-FLOATING-STACK [IF] Line 214  HAS-FLOATING-STACK [IF]
     : F} ;      : F} ;
     : F...}T ;      : F...}T ;
   
       DECIMAL
     : COMPUTE-CELLS-PER-FP ( -- U )      : COMPUTE-CELLS-PER-FP ( -- U )
         DEPTH 0E DEPTH >R FDROP R> SWAP - ;          DEPTH 0E DEPTH 1- >R FDROP R> SWAP - ;
       HEX
   
     COMPUTE-CELLS-PER-FP CONSTANT CELLS-PER-FP      COMPUTE-CELLS-PER-FP CONSTANT CELLS-PER-FP
           
     : FTESTER ( R -- )      : FTESTER ( R -- )
         DEPTH CELLS-PER-FP < ACTUAL-DEPTH @ XCURSOR @ CELLS-PER-FP + < OR IF          DEPTH CELLS-PER-FP < ACTUAL-DEPTH @ XCURSOR @ START-DEPTH @ + CELLS-PER-FP + < OR IF
             S" WRONG NUMBER OF RESULTS: " ERROR EXIT              S" NUMBER OF RESULTS AFTER '->' BELOW ...}T SPECIFICATION: " ERROR EXIT
         THEN          THEN
         ACTUAL-RESULTS XCURSOR @ CELLS + F@ FCONF= 0= IF          ACTUAL-RESULTS XCURSOR @ CELLS + F@ FCONF= 0= IF
             S" INCORRECT FP RESULT: " ERROR              S" INCORRECT FP RESULT: " ERROR
Line 238  HAS-FLOATING-STACK [IF] Line 249  HAS-FLOATING-STACK [IF]
 ' ERROR1 ERROR-XT !  ' ERROR1 ERROR-XT !
   
 : T{            \ ( -- ) SYNTACTIC SUGAR.  : T{            \ ( -- ) SYNTACTIC SUGAR.
    DEPTH START-DEPTH ! F{ ;     DEPTH START-DEPTH ! 0 XCURSOR ! F{ ;
   
 : ->            \ ( ... -- ) RECORD DEPTH AND CONTENT OF STACK.  : ->            \ ( ... -- ) RECORD DEPTH AND CONTENT OF STACK.
    DEPTH DUP ACTUAL-DEPTH !             \ RECORD DEPTH     DEPTH DUP ACTUAL-DEPTH !             \ RECORD DEPTH
Line 263  HAS-FLOATING-STACK [IF] Line 274  HAS-FLOATING-STACK [IF]
   
 : ...}T ( -- )  : ...}T ( -- )
     DEPTH START-DEPTH @ = 0= IF      DEPTH START-DEPTH @ = 0= IF
         S" WRONG NUMBER OF RESULTS" ERROR          S" NUMBER OF CELL RESULTS BEFORE AND AFTER '->' DOES NOT MATCH: " ERROR
     THEN      THEN
     XCURSOR @ ACTUAL-DEPTH @ <> IF      XCURSOR @ START-DEPTH @ + ACTUAL-DEPTH @ <> IF
         S" WRONG NUMBER OF RESULTS" ERROR          S" NUMBER OF CELL RESULTS BEFORE '->' DOES NOT MATCH ...}T SPECIFICATION: " ERROR
     THEN      THEN
     F...}T ;      F...}T ;
   
 : XTESTER ( X -- )  : XTESTER ( X -- )
     DEPTH 0= ACTUAL-DEPTH @ XCURSOR @ 1+ < OR IF      DEPTH 0= ACTUAL-DEPTH @ XCURSOR @ START-DEPTH @ + 1+ < OR IF
         S" WRONG NUMBER OF RESULTS: " ERROR EXIT          S" NUMBER OF CELL RESULTS AFTER '->' BELOW ...}T SPECIFICATION: " ERROR EXIT
     THEN      THEN
     ACTUAL-RESULTS XCURSOR @ CELLS + @ <> IF      ACTUAL-RESULTS XCURSOR @ CELLS + @ <> IF
         S" INCORRECT CELL RESULT: " ERROR          S" INCORRECT CELL RESULT: " ERROR
Line 315  HAS-FLOATING-STACK [IF] Line 326  HAS-FLOATING-STACK [IF]
    IF DUP >R TYPE CR R> >IN !     IF DUP >R TYPE CR R> >IN !
    ELSE >IN ! DROP     ELSE >IN ! DROP
    THEN ;     THEN ;
   
   BASE !

Removed from v.1.1  
changed lines
  Added in v.1.7


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>