< PARAM name=cols value="70"> < PARAM name=rows value="18"> < PARAM name=fontsize value="12"> < PARAM NAME=defbkclr VALUE="FFFFDF"> < PARAM NAME=forthclr VALUE="000000"> < PARAM NAME=userclr VALUE="008080"> < PARAM NAME=cursorclr VALUE="FF0000"> < PARAM NAME=errorclr VALUE="0000FF"> < PARAM NAME=boot VALUE="1 LIST"> < PARAM NAME=defbkclr VALUE="FFFFC0"> < PARAM NAME=forthclr VALUE="660000"> < PARAM NAME=userclr VALUE="000000"> < PARAM NAME=cursorclr VALUE="FF0000"> < PARAM NAME=errorclr VALUE="0000FF"> < PARAM NAME=block1 VALUE=""> < PARAM NAME=block1.0 VALUE="~\ Test1aj2.txt adapted from AnsTest1a.seq 01-Mar-99"> < PARAM NAME=block1.2 VALUE="~\ Original File: \COMP\MAF\ANSTEST.SEQ"> < PARAM NAME=block1.3 VALUE="~\ Date: 16-Dec-95"> < PARAM NAME=block1.4 VALUE="~\ Tests Minimal ANS Forth using John Hayes ANS Test Suite"> < PARAM NAME=block1.6 VALUE="~\ (C) 1993 JOHNS HOPKINS UNIVERSITY / APPLIED PHYSICS LABORATORY"> < PARAM NAME=block1.7 VALUE="~\ MAY BE DISTRIBUTED FREELY AS LONG AS THIS COPYRIGHT NOTICE"> < PARAM NAME=block1.8 VALUE="~\ REMAINS."> < PARAM NAME=block1.11 VALUE="~\ To run full suite of tests type: 3 84 THRU"> < PARAM NAME=block1.12 VALUE="~\ To omit ENVIRONMENT? tests type: 3 68 THRU"> < PARAM NAME=block2 VALUE=""> < PARAM NAME=block2.0 VALUE="~\ VERSION 1.0"> < PARAM NAME=block2.1 VALUE="~\ With some changes to suit the 'tI' mechanism."> < PARAM NAME=block2.2 VALUE="~\ 27-Nov-95 With GP7 changed"> < PARAM NAME=block2.3 VALUE="~\ 16-Dec-95 With ENVIRONMENT? tests added"> < PARAM NAME=block2.5 VALUE="~\ 30-Dec-98 Changes by Chris Jakeman for loading from blocks"> < PARAM NAME=block2.6 VALUE="~\ in JANSForth"> < PARAM NAME=block2.7 VALUE="~\ 08-Jan-99 Further changes for JANSForth by Philip Preston"> < PARAM NAME=block2.8 VALUE='~\ marked "pshp"'> < PARAM NAME=block2.9 VALUE="~\ 01-Mar-99 Corrected errors in GEN8 and GEN12, removed"> < PARAM NAME=block2.10 VALUE="~\ definition of THRU and added html tags pshp "> < PARAM NAME=block3 VALUE=""> < PARAM NAME=block3.0 VALUE="~( System words to support John Hayes ANS Test Suite )"> < PARAM NAME=block3.2 VALUE="~: TASK ; \ place-marker for FORGET pshp"> < PARAM NAME=block3.4 VALUE="~DECIMAL"> < PARAM NAME=block3.5 VALUE="~: <> = 0= ;"> < PARAM NAME=block3.7 VALUE="~0 CONSTANT FALSE FALSE INVERT CONSTANT TRUE"> < PARAM NAME=block3.8 VALUE="~64 CONSTANT C/L"> < PARAM NAME=block3.10 VALUE="~: FLOOR ( n1 m -- n2 ) >R R@ / R> * ;"> < PARAM NAME=block3.12 VALUE="~HEX"> < PARAM NAME=block3.14 VALUE="~\ SET THE FOLLOWING FLAG TO TRUE FOR"> < PARAM NAME=block3.15 VALUE="~\ MORE VERBOSE OUTPUT; THIS MAY"> < PARAM NAME=block4 VALUE=""> < PARAM NAME=block4.0 VALUE="~\ ALLOW YOU TO TELL WHICH TEST CAUSED YOUR SYSTEM TO HANG."> < PARAM NAME=block4.1 VALUE="~VARIABLE VERBOSE"> < PARAM NAME=block4.2 VALUE="~ TRUE VERBOSE !"> < PARAM NAME=block4.4 VALUE="~: EMPTY-STACK \ ( ... -- ) EMPTY STACK."> < PARAM NAME=block4.5 VALUE="~ DEPTH ?DUP IF 0 DO DROP LOOP THEN ;"> < PARAM NAME=block4.7 VALUE="~: ERROR \ ( C-ADDR U -- ) DISPLAY AN ERROR MESSAGE FOLLOWED BY"> < PARAM NAME=block4.8 VALUE="~ TYPE \ THE LINE THAT HAD THE ERROR."> < PARAM NAME=block4.9 VALUE="~ BASE @ 2 24 WITHIN NOT IF HEX THEN \ protect BASE pshp"> < PARAM NAME=block4.10 VALUE='~ BASE @ >R DECIMAL ." Block" BLK @ . \ display blk and'> < PARAM NAME=block4.11 VALUE='~ ." Line" >IN @ C/L / . R> BASE ! CR \ line number pshp'> < PARAM NAME=block4.12 VALUE="~ SOURCE DROP >IN @ C/L FLOOR + C/L TYPE CR \ DISPLAY LINE"> < PARAM NAME=block4.13 VALUE="~ EMPTY-STACK \ THROW AWAY EVERYTHING ELSE"> < PARAM NAME=block4.14 VALUE='~ ." Press Esc to stop or any other key to continue" KEY CR'> < PARAM NAME=block4.15 VALUE='~ 1B = IF DECIMAL TRUE ABORT" Testing stopped" THEN \ pshp'> < PARAM NAME=block5 VALUE=""> < PARAM NAME=block5.0 VALUE="~;"> < PARAM NAME=block5.2 VALUE="~VARIABLE ACTUAL-DEPTH \ STACK RECORD"> < PARAM NAME=block5.3 VALUE="~CREATE ACTUAL-RESULTS 20 CELLS ALLOT"> < PARAM NAME=block5.5 VALUE="~: { \ ( -- ) SYNTACTIC SUGAR."> < PARAM NAME=block5.6 VALUE="~;"> < PARAM NAME=block5.8 VALUE="~: -> \ ( ... -- ) RECORD DEPTH AND CONTENT OF STACK."> < PARAM NAME=block5.9 VALUE="~ DEPTH DUP ACTUAL-DEPTH ! \ RECORD DEPTH"> < PARAM NAME=block5.10 VALUE="~ ?DUP IF \ IF THERE IS"> < PARAM NAME=block5.11 VALUE="~ \ SOMETHING ON STACK"> < PARAM NAME=block5.12 VALUE="~ 20 MIN \ protect dictionary pshp"> < PARAM NAME=block5.13 VALUE="~ 0 DO ACTUAL-RESULTS I CELLS + ! LOOP \ SAVE THEM"> < PARAM NAME=block5.14 VALUE="~ THEN ;"> < PARAM NAME=block6 VALUE=""> < PARAM NAME=block6.0 VALUE="~: } \ ( ... -- ) COMPARE STACK (EXPECTED)"> < PARAM NAME=block6.1 VALUE="~ \ CONTENTS WITH SAVED"> < PARAM NAME=block6.2 VALUE="~ \ (ACTUAL) CONTENTS."> < PARAM NAME=block6.3 VALUE="~ DEPTH ACTUAL-DEPTH @ = IF \ IF DEPTHS MATCH"> < PARAM NAME=block6.4 VALUE="~ DEPTH ?DUP IF \ IF THERE IS"> < PARAM NAME=block6.5 VALUE="~ \ SOMETHING ON THE STACK"> < PARAM NAME=block6.6 VALUE="~ 0 DO \ FOR EACH STACK ITEM"> < PARAM NAME=block6.7 VALUE="~ ACTUAL-RESULTS I CELLS + @ \ COMPARE ACTUAL WITH"> < PARAM NAME=block6.8 VALUE="~ \ EXPECTED"> < PARAM NAME=block6.9 VALUE='~ <> IF S" INCORRECT RESULT: " ERROR LEAVE THEN'> < PARAM NAME=block6.10 VALUE="~ LOOP"> < PARAM NAME=block6.11 VALUE="~ THEN"> < PARAM NAME=block6.12 VALUE="~ ELSE \ DEPTH MISMATCH"> < PARAM NAME=block6.13 VALUE='~ S" WRONG NUMBER OF RESULTS: " ERROR'> < PARAM NAME=block6.14 VALUE="~ THEN ;"> < PARAM NAME=block7 VALUE=""> < PARAM NAME=block7.0 VALUE="~: TESTING \ ( -- ) TALKING COMMENT. "> < PARAM NAME=block7.1 VALUE="~ >IN @ C/L FLOOR DUP C/L + VERBOSE @ \ -- from to flag "> < PARAM NAME=block7.2 VALUE="~ IF >R SOURCE DROP + C/L TYPE CR R> >IN ! "> < PARAM NAME=block7.3 VALUE="~\ SOURCE VERBOSE @ \ CMJ Above changed to "> < PARAM NAME=block7.4 VALUE="~\ IF DUP >R TYPE CR R> >IN ! \ suit use of BLOCKS "> < PARAM NAME=block7.5 VALUE="~ ELSE >IN ! DROP "> < PARAM NAME=block7.6 VALUE="~ THEN ; "> < PARAM NAME=block8 VALUE=""> < PARAM NAME=block8.0 VALUE="~TESTING BOOLEANS: INVERT AND OR XOR"> < PARAM NAME=block8.1 VALUE="~{ 0 0 AND -> 0 }"> < PARAM NAME=block8.2 VALUE="~{ 0 1 AND -> 0 }"> < PARAM NAME=block8.3 VALUE="~{ 1 0 AND -> 0 }"> < PARAM NAME=block8.4 VALUE="~{ 1 1 AND -> 1 }"> < PARAM NAME=block8.6 VALUE="~{ 0 INVERT 1 AND -> 1 }"> < PARAM NAME=block8.7 VALUE="~{ 1 INVERT 1 AND -> 0 }"> < PARAM NAME=block8.8 VALUE="~0 CONSTANT 0S"> < PARAM NAME=block8.9 VALUE="~0 INVERT CONSTANT 1S"> < PARAM NAME=block8.11 VALUE="~{ 0S INVERT -> 1S }"> < PARAM NAME=block8.12 VALUE="~{ 1S INVERT -> 0S }"> < PARAM NAME=block8.14 VALUE="~{ 0S 0S AND -> 0S }"> < PARAM NAME=block8.15 VALUE="~{ 0S 1S AND -> 0S }"> < PARAM NAME=block9 VALUE=""> < PARAM NAME=block9.0 VALUE="~{ 1S 0S AND -> 0S }"> < PARAM NAME=block9.1 VALUE="~{ 1S 1S AND -> 1S }"> < PARAM NAME=block9.3 VALUE="~{ 0S 0S OR -> 0S }"> < PARAM NAME=block9.4 VALUE="~{ 0S 1S OR -> 1S }"> < PARAM NAME=block9.5 VALUE="~{ 1S 0S OR -> 1S }"> < PARAM NAME=block9.6 VALUE="~{ 1S 1S OR -> 1S }"> < PARAM NAME=block9.8 VALUE="~{ 0S 0S XOR -> 0S }"> < PARAM NAME=block9.9 VALUE="~{ 0S 1S XOR -> 1S }"> < PARAM NAME=block9.10 VALUE="~{ 1S 0S XOR -> 1S }"> < PARAM NAME=block9.11 VALUE="~{ 1S 1S XOR -> 0S }"> < PARAM NAME=block9.13 VALUE="~TESTING 2* 2/ LSHIFT RSHIFT"> < PARAM NAME=block9.15 VALUE="~: FIND-MSB"> < PARAM NAME=block10 VALUE=""> < PARAM NAME=block10.0 VALUE="~ 1 BEGIN DUP 2* WHILE 2* REPEAT ;"> < PARAM NAME=block10.1 VALUE="~FIND-MSB CONSTANT MSB"> < PARAM NAME=block10.3 VALUE="~{ 0 2* -> 0 }"> < PARAM NAME=block10.4 VALUE="~{ 1 2* -> 2 }"> < PARAM NAME=block10.5 VALUE="~{ 4000 2* -> 8000 }"> < PARAM NAME=block10.6 VALUE="~{ 0 INVERT 2* 1 XOR -> 0 INVERT }"> < PARAM NAME=block10.7 VALUE="~{ MSB 2* -> 0 }"> < PARAM NAME=block10.9 VALUE="~{ 0 2/ -> 0 }"> < PARAM NAME=block10.10 VALUE="~{ 1 2/ -> 0 }"> < PARAM NAME=block10.11 VALUE="~{ 4000 2/ -> 2000 }"> < PARAM NAME=block10.12 VALUE="~{ 0 INVERT 2/ -> 0 INVERT } \ MSB PROPOGATED"> < PARAM NAME=block10.13 VALUE="~{ 0 INVERT 1 XOR 2/ -> 0 INVERT }"> < PARAM NAME=block10.14 VALUE="~{ MSB 2/ MSB AND -> MSB }"> < PARAM NAME=block11 VALUE=""> < PARAM NAME=block11.0 VALUE="~{ 1 0 LSHIFT -> 1 }"> < PARAM NAME=block11.1 VALUE="~{ 1 1 LSHIFT -> 2 }"> < PARAM NAME=block11.2 VALUE="~{ 1 2 LSHIFT -> 4 }"> < PARAM NAME=block11.4 VALUE="~{ 1 0F LSHIFT -> 8000 } \ BIGGEST GUARANTEED SHIFT"> < PARAM NAME=block11.5 VALUE="~ \ changed F to 0F pshp"> < PARAM NAME=block11.6 VALUE="~{ 0 INVERT 1 LSHIFT 1 XOR -> 0 INVERT }"> < PARAM NAME=block11.7 VALUE="~{ MSB 1 LSHIFT -> 0 }"> < PARAM NAME=block11.9 VALUE="~{ 1 0 RSHIFT -> 1 }"> < PARAM NAME=block11.10 VALUE="~{ 1 1 RSHIFT -> 0 }"> < PARAM NAME=block11.11 VALUE="~{ 2 1 RSHIFT -> 1 }"> < PARAM NAME=block11.12 VALUE="~{ 4 2 RSHIFT -> 1 }"> < PARAM NAME=block11.13 VALUE="~{ 8000 0F RSHIFT -> 1 } \ BIGGEST"> < PARAM NAME=block11.14 VALUE="~ \ changed F to 0F pshp"> < PARAM NAME=block11.15 VALUE="~{ MSB 1 RSHIFT MSB AND -> 0 } \ RSHIFT ZERO FILLS MSBS"> < PARAM NAME=block12 VALUE=""> < PARAM NAME=block12.0 VALUE="~{ MSB 1 RSHIFT 2* -> MSB }"> < PARAM NAME=block12.2 VALUE="~TESTING COMPARISONS: 0= = 0< < > U< MIN MAX"> < PARAM NAME=block12.3 VALUE="~0 INVERT CONSTANT MAX-UINT \ FFFF 65535"> < PARAM NAME=block12.4 VALUE="~0 INVERT 1 RSHIFT CONSTANT MAX-INT \ 7FFF 32767"> < PARAM NAME=block12.5 VALUE="~0 INVERT 1 RSHIFT INVERT CONSTANT MIN-INT \ 8000 -32768"> < PARAM NAME=block12.6 VALUE="~0 INVERT 1 RSHIFT CONSTANT MID-UINT \ 7FFF 32767"> < PARAM NAME=block12.7 VALUE="~0 INVERT 1 RSHIFT INVERT CONSTANT MID-UINT+1 \ 8000 32768"> < PARAM NAME=block12.9 VALUE="~0S CONSTANT
"> < PARAM NAME=block12.10 VALUE="~1S CONSTANT
"> < PARAM NAME=block12.12 VALUE="~{ -> } \ START WITH CLEAN SLATE"> < PARAM NAME=block12.13 VALUE="~{ 0 0= ->
}"> < PARAM NAME=block12.14 VALUE="~{ 1 0= ->
}"> < PARAM NAME=block12.15 VALUE="~{ 2 0= ->
}"> < PARAM NAME=block13 VALUE=""> < PARAM NAME=block13.0 VALUE="~{ -1 0= ->
}"> < PARAM NAME=block13.1 VALUE="~{ MAX-UINT 0= ->
}"> < PARAM NAME=block13.2 VALUE="~{ MIN-INT 0= ->
}"> < PARAM NAME=block13.3 VALUE="~{ MAX-INT 0= ->
}"> < PARAM NAME=block13.5 VALUE="~{ 0 0 = ->
}"> < PARAM NAME=block13.6 VALUE="~{ 1 1 = ->
}"> < PARAM NAME=block13.7 VALUE="~{ -1 -1 = ->
}"> < PARAM NAME=block13.8 VALUE="~{ 1 0 = ->
}"> < PARAM NAME=block13.9 VALUE="~{ -1 0 = ->
}"> < PARAM NAME=block13.10 VALUE="~{ 0 1 = ->
}"> < PARAM NAME=block13.11 VALUE="~{ 0 -1 = ->
}"> < PARAM NAME=block13.13 VALUE="~{ 0 0< ->
}"> < PARAM NAME=block13.14 VALUE="~{ -1 0< ->
}"> < PARAM NAME=block13.15 VALUE="~{ MIN-INT 0< ->
}"> < PARAM NAME=block14 VALUE=""> < PARAM NAME=block14.0 VALUE="~{ 1 0< ->
}"> < PARAM NAME=block14.1 VALUE="~{ MAX-INT 0< ->
}"> < PARAM NAME=block14.3 VALUE="~{ 0 1 < ->
}"> < PARAM NAME=block14.4 VALUE="~{ 1 2 < ->
}"> < PARAM NAME=block14.5 VALUE="~{ -1 0 < ->
}"> < PARAM NAME=block14.6 VALUE="~{ -1 1 < ->
}"> < PARAM NAME=block14.7 VALUE="~{ MIN-INT 0 < ->
}"> < PARAM NAME=block14.8 VALUE="~{ MIN-INT MAX-INT < ->
}"> < PARAM NAME=block14.9 VALUE="~{ 0 MAX-INT < ->
}"> < PARAM NAME=block14.10 VALUE="~{ 0 0 < ->
}"> < PARAM NAME=block14.11 VALUE="~{ 1 1 < ->
}"> < PARAM NAME=block14.12 VALUE="~{ 1 0 < ->
}"> < PARAM NAME=block14.13 VALUE="~{ 2 1 < ->
}"> < PARAM NAME=block14.14 VALUE="~{ 0 -1 < ->
}"> < PARAM NAME=block14.15 VALUE="~{ 1 -1 < ->
}"> < PARAM NAME=block15 VALUE=""> < PARAM NAME=block15.0 VALUE="~{ 0 MIN-INT < ->
}"> < PARAM NAME=block15.1 VALUE="~{ MAX-INT MIN-INT < ->
}"> < PARAM NAME=block15.2 VALUE="~{ MAX-INT 0 < ->
}"> < PARAM NAME=block15.4 VALUE="~{ 0 1 > ->
}"> < PARAM NAME=block15.5 VALUE="~{ 1 2 > ->
}"> < PARAM NAME=block15.6 VALUE="~{ -1 0 > ->
}"> < PARAM NAME=block15.7 VALUE="~{ -1 1 > ->
}"> < PARAM NAME=block15.8 VALUE="~{ MIN-INT 0 > ->
}"> < PARAM NAME=block15.9 VALUE="~{ MIN-INT MAX-INT > ->
}"> < PARAM NAME=block15.10 VALUE="~{ 0 MAX-INT > ->
}"> < PARAM NAME=block15.11 VALUE="~{ 0 0 > ->
}"> < PARAM NAME=block15.12 VALUE="~{ 1 1 > ->
}"> < PARAM NAME=block15.13 VALUE="~{ 1 0 > ->
}"> < PARAM NAME=block15.14 VALUE="~{ 2 1 > ->
}"> < PARAM NAME=block15.15 VALUE="~{ 0 -1 > ->
}"> < PARAM NAME=block16 VALUE=""> < PARAM NAME=block16.0 VALUE="~{ 1 -1 > ->
}"> < PARAM NAME=block16.1 VALUE="~{ 0 MIN-INT > ->
}"> < PARAM NAME=block16.2 VALUE="~{ MAX-INT MIN-INT > ->
}"> < PARAM NAME=block16.3 VALUE="~{ MAX-INT 0 > ->
}"> < PARAM NAME=block16.5 VALUE="~{ 0 1 U< ->
}"> < PARAM NAME=block16.6 VALUE="~{ 1 2 U< ->
}"> < PARAM NAME=block16.7 VALUE="~{ 0 MID-UINT U< ->
}"> < PARAM NAME=block16.8 VALUE="~{ 0 MAX-UINT U< ->
}"> < PARAM NAME=block16.9 VALUE="~{ MID-UINT MAX-UINT U< ->
}"> < PARAM NAME=block16.10 VALUE="~{ 0 0 U< ->
}"> < PARAM NAME=block16.11 VALUE="~{ 1 1 U< ->
}"> < PARAM NAME=block16.12 VALUE="~{ 1 0 U< ->
}"> < PARAM NAME=block16.13 VALUE="~{ 2 1 U< ->
}"> < PARAM NAME=block16.14 VALUE="~{ MID-UINT 0 U< ->
}"> < PARAM NAME=block16.15 VALUE="~{ MAX-UINT 0 U< ->
}"> < PARAM NAME=block17 VALUE=""> < PARAM NAME=block17.0 VALUE="~{ MAX-UINT MID-UINT U< ->
}"> < PARAM NAME=block17.2 VALUE="~{ 0 1 MIN -> 0 }"> < PARAM NAME=block17.3 VALUE="~{ 1 2 MIN -> 1 }"> < PARAM NAME=block17.4 VALUE="~{ -1 0 MIN -> -1 }"> < PARAM NAME=block17.5 VALUE="~{ -1 1 MIN -> -1 }"> < PARAM NAME=block17.6 VALUE="~{ MIN-INT 0 MIN -> MIN-INT }"> < PARAM NAME=block17.7 VALUE="~{ MIN-INT MAX-INT MIN -> MIN-INT }"> < PARAM NAME=block17.8 VALUE="~{ 0 MAX-INT MIN -> 0 }"> < PARAM NAME=block17.9 VALUE="~{ 0 0 MIN -> 0 }"> < PARAM NAME=block17.10 VALUE="~{ 1 1 MIN -> 1 }"> < PARAM NAME=block17.11 VALUE="~{ 1 0 MIN -> 0 }"> < PARAM NAME=block17.12 VALUE="~{ 2 1 MIN -> 1 }"> < PARAM NAME=block17.13 VALUE="~{ 0 -1 MIN -> -1 }"> < PARAM NAME=block17.14 VALUE="~{ 1 -1 MIN -> -1 }"> < PARAM NAME=block17.15 VALUE="~{ 0 MIN-INT MIN -> MIN-INT }"> < PARAM NAME=block18 VALUE=""> < PARAM NAME=block18.0 VALUE="~{ MAX-INT MIN-INT MIN -> MIN-INT }"> < PARAM NAME=block18.1 VALUE="~{ MAX-INT 0 MIN -> 0 }"> < PARAM NAME=block18.3 VALUE="~{ 0 1 MAX -> 1 }"> < PARAM NAME=block18.4 VALUE="~{ 1 2 MAX -> 2 }"> < PARAM NAME=block18.5 VALUE="~{ -1 0 MAX -> 0 }"> < PARAM NAME=block18.6 VALUE="~{ -1 1 MAX -> 1 }"> < PARAM NAME=block18.7 VALUE="~{ MIN-INT 0 MAX -> 0 }"> < PARAM NAME=block18.8 VALUE="~{ MIN-INT MAX-INT MAX -> MAX-INT }"> < PARAM NAME=block18.9 VALUE="~{ 0 MAX-INT MAX -> MAX-INT }"> < PARAM NAME=block18.10 VALUE="~{ 0 0 MAX -> 0 }"> < PARAM NAME=block18.11 VALUE="~{ 1 1 MAX -> 1 }"> < PARAM NAME=block18.12 VALUE="~{ 1 0 MAX -> 1 }"> < PARAM NAME=block18.13 VALUE="~{ 2 1 MAX -> 2 }"> < PARAM NAME=block18.14 VALUE="~{ 0 -1 MAX -> 0 }"> < PARAM NAME=block18.15 VALUE="~{ 1 -1 MAX -> 1 }"> < PARAM NAME=block19 VALUE=""> < PARAM NAME=block19.0 VALUE="~{ 0 MIN-INT MAX -> 0 }"> < PARAM NAME=block19.1 VALUE="~{ MAX-INT MIN-INT MAX -> MAX-INT }"> < PARAM NAME=block19.2 VALUE="~{ MAX-INT 0 MAX -> MAX-INT }"> < PARAM NAME=block19.4 VALUE="~TESTING ADD/SUBTRACT: + - 1+ 1- ABS NEGATE"> < PARAM NAME=block19.6 VALUE="~{ 0 5 + -> 5 }"> < PARAM NAME=block19.7 VALUE="~{ 5 0 + -> 5 }"> < PARAM NAME=block19.8 VALUE="~{ 0 -5 + -> -5 }"> < PARAM NAME=block19.9 VALUE="~{ -5 0 + -> -5 }"> < PARAM NAME=block19.10 VALUE="~{ 1 2 + -> 3 }"> < PARAM NAME=block19.11 VALUE="~{ 1 -2 + -> -1 }"> < PARAM NAME=block19.12 VALUE="~{ -1 2 + -> 1 }"> < PARAM NAME=block19.13 VALUE="~{ -1 -2 + -> -3 }"> < PARAM NAME=block19.14 VALUE="~{ -1 1 + -> 0 }"> < PARAM NAME=block19.15 VALUE="~{ MID-UINT 1 + -> MID-UINT+1 }"> < PARAM NAME=block20 VALUE=""> < PARAM NAME=block20.1 VALUE="~{ 0 5 - -> -5 }"> < PARAM NAME=block20.2 VALUE="~{ 5 0 - -> 5 }"> < PARAM NAME=block20.3 VALUE="~{ 0 -5 - -> 5 }"> < PARAM NAME=block20.4 VALUE="~{ -5 0 - -> -5 }"> < PARAM NAME=block20.5 VALUE="~{ 1 2 - -> -1 }"> < PARAM NAME=block20.6 VALUE="~{ 1 -2 - -> 3 }"> < PARAM NAME=block20.7 VALUE="~{ -1 2 - -> -3 }"> < PARAM NAME=block20.8 VALUE="~{ -1 -2 - -> 1 }"> < PARAM NAME=block20.9 VALUE="~{ 0 1 - -> -1 }"> < PARAM NAME=block20.10 VALUE="~{ MID-UINT+1 1 - -> MID-UINT }"> < PARAM NAME=block20.12 VALUE="~{ 0 1+ -> 1 }"> < PARAM NAME=block20.13 VALUE="~{ -1 1+ -> 0 }"> < PARAM NAME=block20.14 VALUE="~{ 1 1+ -> 2 }"> < PARAM NAME=block20.15 VALUE="~{ MID-UINT 1+ -> MID-UINT+1 }"> < PARAM NAME=block21 VALUE=""> < PARAM NAME=block21.1 VALUE="~{ 2 1- -> 1 }"> < PARAM NAME=block21.2 VALUE="~{ 1 1- -> 0 }"> < PARAM NAME=block21.3 VALUE="~{ 0 1- -> -1 }"> < PARAM NAME=block21.4 VALUE="~{ MID-UINT+1 1- -> MID-UINT }"> < PARAM NAME=block21.6 VALUE="~{ 0 NEGATE -> 0 }"> < PARAM NAME=block21.7 VALUE="~{ 1 NEGATE -> -1 }"> < PARAM NAME=block21.8 VALUE="~{ -1 NEGATE -> 1 }"> < PARAM NAME=block21.9 VALUE="~{ 2 NEGATE -> -2 }"> < PARAM NAME=block21.10 VALUE="~{ -2 NEGATE -> 2 }"> < PARAM NAME=block21.12 VALUE="~{ 0 ABS -> 0 }"> < PARAM NAME=block21.13 VALUE="~{ 1 ABS -> 1 }"> < PARAM NAME=block21.14 VALUE="~{ -1 ABS -> 1 }"> < PARAM NAME=block21.15 VALUE="~{ MIN-INT ABS -> MID-UINT+1 }"> < PARAM NAME=block22 VALUE=""> < PARAM NAME=block22.1 VALUE="~\ ----------------------------------------------------------"> < PARAM NAME=block22.2 VALUE="~TESTING MULTIPLY: S>D * M* UM*"> < PARAM NAME=block22.4 VALUE="~{ 0 S>D -> 0 0 }"> < PARAM NAME=block22.5 VALUE="~{ 1 S>D -> 1 0 }"> < PARAM NAME=block22.6 VALUE="~{ 2 S>D -> 2 0 }"> < PARAM NAME=block22.7 VALUE="~{ -1 S>D -> -1 -1 }"> < PARAM NAME=block22.8 VALUE="~{ -2 S>D -> -2 -1 }"> < PARAM NAME=block22.9 VALUE="~{ MIN-INT S>D -> MIN-INT -1 }"> < PARAM NAME=block22.10 VALUE="~{ MAX-INT S>D -> MAX-INT 0 }"> < PARAM NAME=block22.12 VALUE="~{ 0 0 M* -> 0 S>D }"> < PARAM NAME=block22.13 VALUE="~{ 0 1 M* -> 0 S>D }"> < PARAM NAME=block22.14 VALUE="~{ 1 0 M* -> 0 S>D }"> < PARAM NAME=block22.15 VALUE="~{ 1 2 M* -> 2 S>D }"> < PARAM NAME=block23 VALUE=""> < PARAM NAME=block23.0 VALUE="~{ 2 1 M* -> 2 S>D }"> < PARAM NAME=block23.1 VALUE="~{ 3 3 M* -> 9 S>D }"> < PARAM NAME=block23.2 VALUE="~{ -3 3 M* -> -9 S>D }"> < PARAM NAME=block23.3 VALUE="~{ 3 -3 M* -> -9 S>D }"> < PARAM NAME=block23.4 VALUE="~{ -3 -3 M* -> 9 S>D }"> < PARAM NAME=block23.5 VALUE="~{ 0 MIN-INT M* -> 0 S>D }"> < PARAM NAME=block23.6 VALUE="~{ 1 MIN-INT M* -> MIN-INT S>D }"> < PARAM NAME=block23.7 VALUE="~{ 2 MIN-INT M* -> 0 1S }"> < PARAM NAME=block23.8 VALUE="~{ 0 MAX-INT M* -> 0 S>D }"> < PARAM NAME=block23.9 VALUE="~{ 1 MAX-INT M* -> MAX-INT S>D }"> < PARAM NAME=block23.10 VALUE="~{ 2 MAX-INT M* -> MAX-INT 1 LSHIFT 0 }"> < PARAM NAME=block23.11 VALUE="~{ MIN-INT MIN-INT M* -> 0 MSB 1 RSHIFT }"> < PARAM NAME=block23.12 VALUE="~{ MAX-INT MIN-INT M* -> MSB MSB 2/ }"> < PARAM NAME=block23.13 VALUE="~{ MAX-INT MAX-INT M* -> 1 MSB 2/ INVERT }"> < PARAM NAME=block23.15 VALUE="~{ 0 0 * -> 0 } \ TEST IDENTITIES"> < PARAM NAME=block24 VALUE=""> < PARAM NAME=block24.0 VALUE="~{ 0 1 * -> 0 }"> < PARAM NAME=block24.1 VALUE="~{ 1 0 * -> 0 }"> < PARAM NAME=block24.2 VALUE="~{ 1 2 * -> 2 }"> < PARAM NAME=block24.3 VALUE="~{ 2 1 * -> 2 }"> < PARAM NAME=block24.4 VALUE="~{ 3 3 * -> 9 }"> < PARAM NAME=block24.5 VALUE="~{ -3 3 * -> -9 }"> < PARAM NAME=block24.6 VALUE="~{ 3 -3 * -> -9 }"> < PARAM NAME=block24.7 VALUE="~{ -3 -3 * -> 9 }"> < PARAM NAME=block24.9 VALUE="~{ MID-UINT+1 1 RSHIFT 2 * -> MID-UINT+1 }"> < PARAM NAME=block24.10 VALUE="~{ MID-UINT+1 2 RSHIFT 4 * -> MID-UINT+1 }"> < PARAM NAME=block24.11 VALUE="~{ MID-UINT+1 1 RSHIFT MID-UINT+1 OR 2 * -> MID-UINT+1 }"> < PARAM NAME=block24.13 VALUE="~{ 0 0 UM* -> 0 0 }"> < PARAM NAME=block24.14 VALUE="~{ 0 1 UM* -> 0 0 }"> < PARAM NAME=block24.15 VALUE="~{ 1 0 UM* -> 0 0 }"> < PARAM NAME=block25 VALUE=""> < PARAM NAME=block25.0 VALUE="~{ 1 2 UM* -> 2 0 }"> < PARAM NAME=block25.1 VALUE="~{ 2 1 UM* -> 2 0 }"> < PARAM NAME=block25.2 VALUE="~{ 3 3 UM* -> 9 0 }"> < PARAM NAME=block25.4 VALUE="~{ MID-UINT+1 1 RSHIFT 2 UM* -> MID-UINT+1 0 }"> < PARAM NAME=block25.5 VALUE="~{ MID-UINT+1 2 UM* -> 0 1 }"> < PARAM NAME=block25.6 VALUE="~{ MID-UINT+1 4 UM* -> 0 2 }"> < PARAM NAME=block25.7 VALUE="~{ 1S 2 UM* -> 1S 1 LSHIFT 1 }"> < PARAM NAME=block25.8 VALUE="~{ MAX-UINT MAX-UINT UM* -> 1 1 INVERT }"> < PARAM NAME=block25.10 VALUE="~\ ----------------------------------------------------------"> < PARAM NAME=block25.11 VALUE="~TESTING DIVIDE: FM/MOD SM/REM UM/MOD */ */MOD / /MOD MOD"> < PARAM NAME=block25.13 VALUE="~{ 0 S>D 1 FM/MOD -> 0 0 }"> < PARAM NAME=block25.14 VALUE="~{ 1 S>D 1 FM/MOD -> 0 1 }"> < PARAM NAME=block25.15 VALUE="~{ 2 S>D 1 FM/MOD -> 0 2 }"> < PARAM NAME=block26 VALUE=""> < PARAM NAME=block26.0 VALUE="~{ -1 S>D 1 FM/MOD -> 0 -1 }"> < PARAM NAME=block26.1 VALUE="~{ -2 S>D 1 FM/MOD -> 0 -2 }"> < PARAM NAME=block26.2 VALUE="~{ 0 S>D -1 FM/MOD -> 0 0 }"> < PARAM NAME=block26.3 VALUE="~{ 1 S>D -1 FM/MOD -> 0 -1 }"> < PARAM NAME=block26.4 VALUE="~{ 2 S>D -1 FM/MOD -> 0 -2 }"> < PARAM NAME=block26.5 VALUE="~{ -1 S>D -1 FM/MOD -> 0 1 }"> < PARAM NAME=block26.6 VALUE="~{ -2 S>D -1 FM/MOD -> 0 2 }"> < PARAM NAME=block26.7 VALUE="~{ 2 S>D 2 FM/MOD -> 0 1 }"> < PARAM NAME=block26.8 VALUE="~{ -1 S>D -1 FM/MOD -> 0 1 }"> < PARAM NAME=block26.9 VALUE="~{ -2 S>D -2 FM/MOD -> 0 1 }"> < PARAM NAME=block26.10 VALUE="~{ 7 S>D 3 FM/MOD -> 1 2 }"> < PARAM NAME=block26.11 VALUE="~{ 7 S>D -3 FM/MOD -> -2 -3 }"> < PARAM NAME=block26.12 VALUE="~{ -7 S>D 3 FM/MOD -> 2 -3 }"> < PARAM NAME=block26.13 VALUE="~{ -7 S>D -3 FM/MOD -> -1 2 }"> < PARAM NAME=block26.14 VALUE="~{ MAX-INT S>D 1 FM/MOD -> 0 MAX-INT }"> < PARAM NAME=block26.15 VALUE="~{ MIN-INT S>D 1 FM/MOD -> 0 MIN-INT }"> < PARAM NAME=block27 VALUE=""> < PARAM NAME=block27.0 VALUE="~{ MAX-INT S>D MAX-INT FM/MOD -> 0 1 }"> < PARAM NAME=block27.1 VALUE="~{ MIN-INT S>D MIN-INT FM/MOD -> 0 1 }"> < PARAM NAME=block27.2 VALUE="~{ 1S 1 4 FM/MOD -> 3 MAX-INT }"> < PARAM NAME=block27.3 VALUE="~{ 1 MIN-INT M* 1 FM/MOD -> 0 MIN-INT }"> < PARAM NAME=block27.4 VALUE="~{ 1 MIN-INT M* MIN-INT FM/MOD -> 0 1 }"> < PARAM NAME=block27.5 VALUE="~{ 2 MIN-INT M* 2 FM/MOD -> 0 MIN-INT }"> < PARAM NAME=block27.6 VALUE="~{ 2 MIN-INT M* MIN-INT FM/MOD -> 0 2 }"> < PARAM NAME=block27.7 VALUE="~{ 1 MAX-INT M* 1 FM/MOD -> 0 MAX-INT }"> < PARAM NAME=block27.8 VALUE="~{ 1 MAX-INT M* MAX-INT FM/MOD -> 0 1 }"> < PARAM NAME=block27.9 VALUE="~{ 2 MAX-INT M* 2 FM/MOD -> 0 MAX-INT }"> < PARAM NAME=block27.10 VALUE="~{ 2 MAX-INT M* MAX-INT FM/MOD -> 0 2 }"> < PARAM NAME=block27.11 VALUE="~{ MIN-INT MIN-INT M* MIN-INT FM/MOD -> 0 MIN-INT }"> < PARAM NAME=block27.12 VALUE="~{ MIN-INT MAX-INT M* MIN-INT FM/MOD -> 0 MAX-INT }"> < PARAM NAME=block27.13 VALUE="~{ MIN-INT MAX-INT M* MAX-INT FM/MOD -> 0 MIN-INT }"> < PARAM NAME=block27.14 VALUE="~{ MAX-INT MAX-INT M* MAX-INT FM/MOD -> 0 MAX-INT }"> < PARAM NAME=block28 VALUE=""> < PARAM NAME=block28.0 VALUE="~{ 0 S>D 1 SM/REM -> 0 0 }"> < PARAM NAME=block28.1 VALUE="~{ 1 S>D 1 SM/REM -> 0 1 }"> < PARAM NAME=block28.2 VALUE="~{ 2 S>D 1 SM/REM -> 0 2 }"> < PARAM NAME=block28.3 VALUE="~{ -1 S>D 1 SM/REM -> 0 -1 }"> < PARAM NAME=block28.4 VALUE="~{ -2 S>D 1 SM/REM -> 0 -2 }"> < PARAM NAME=block28.5 VALUE="~{ 0 S>D -1 SM/REM -> 0 0 }"> < PARAM NAME=block28.6 VALUE="~{ 1 S>D -1 SM/REM -> 0 -1 }"> < PARAM NAME=block28.7 VALUE="~{ 2 S>D -1 SM/REM -> 0 -2 }"> < PARAM NAME=block28.8 VALUE="~{ -1 S>D -1 SM/REM -> 0 1 }"> < PARAM NAME=block28.9 VALUE="~{ -2 S>D -1 SM/REM -> 0 2 }"> < PARAM NAME=block28.10 VALUE="~{ 2 S>D 2 SM/REM -> 0 1 }"> < PARAM NAME=block28.11 VALUE="~{ -1 S>D -1 SM/REM -> 0 1 }"> < PARAM NAME=block28.12 VALUE="~{ -2 S>D -2 SM/REM -> 0 1 }"> < PARAM NAME=block28.13 VALUE="~{ 7 S>D 3 SM/REM -> 1 2 }"> < PARAM NAME=block28.14 VALUE="~{ 7 S>D -3 SM/REM -> 1 -2 }"> < PARAM NAME=block28.15 VALUE="~{ -7 S>D 3 SM/REM -> -1 -2 }"> < PARAM NAME=block29 VALUE=""> < PARAM NAME=block29.0 VALUE="~{ -7 S>D -3 SM/REM -> -1 2 }"> < PARAM NAME=block29.1 VALUE="~{ MAX-INT S>D 1 SM/REM -> 0 MAX-INT }"> < PARAM NAME=block29.2 VALUE="~{ MIN-INT S>D 1 SM/REM -> 0 MIN-INT }"> < PARAM NAME=block29.3 VALUE="~{ MAX-INT S>D MAX-INT SM/REM -> 0 1 }"> < PARAM NAME=block29.4 VALUE="~{ MIN-INT S>D MIN-INT SM/REM -> 0 1 }"> < PARAM NAME=block29.5 VALUE="~{ 1S 1 4 SM/REM -> 3 MAX-INT }"> < PARAM NAME=block29.6 VALUE="~{ 2 MIN-INT M* 2 SM/REM -> 0 MIN-INT }"> < PARAM NAME=block29.7 VALUE="~{ 2 MIN-INT M* MIN-INT SM/REM -> 0 2 }"> < PARAM NAME=block29.8 VALUE="~{ 2 MAX-INT M* 2 SM/REM -> 0 MAX-INT }"> < PARAM NAME=block29.9 VALUE="~{ 2 MAX-INT M* MAX-INT SM/REM -> 0 2 }"> < PARAM NAME=block29.10 VALUE="~{ MIN-INT MIN-INT M* MIN-INT SM/REM -> 0 MIN-INT }"> < PARAM NAME=block29.11 VALUE="~{ MIN-INT MAX-INT M* MIN-INT SM/REM -> 0 MAX-INT }"> < PARAM NAME=block29.12 VALUE="~{ MIN-INT MAX-INT M* MAX-INT SM/REM -> 0 MIN-INT }"> < PARAM NAME=block29.13 VALUE="~{ MAX-INT MAX-INT M* MAX-INT SM/REM -> 0 MAX-INT }"> < PARAM NAME=block29.15 VALUE="~{ 0 0 1 UM/MOD -> 0 0 }"> < PARAM NAME=block30 VALUE=""> < PARAM NAME=block30.0 VALUE="~{ 1 0 1 UM/MOD -> 0 1 }"> < PARAM NAME=block30.1 VALUE="~{ 1 0 2 UM/MOD -> 1 0 }"> < PARAM NAME=block30.2 VALUE="~{ 3 0 2 UM/MOD -> 1 1 }"> < PARAM NAME=block30.3 VALUE="~{ MAX-UINT 2 UM* 2 UM/MOD -> 0 MAX-UINT }"> < PARAM NAME=block30.4 VALUE="~{ MAX-UINT 2 UM* MAX-UINT UM/MOD -> 0 2 }"> < PARAM NAME=block30.5 VALUE="~{ MAX-UINT MAX-UINT UM* MAX-UINT UM/MOD -> 0 MAX-UINT }"> < PARAM NAME=block30.7 VALUE="~\ : \ SOURCE >IN ! DROP ; IMMEDIATE"> < PARAM NAME=block30.8 VALUE="~\ Does not work when loading from blocks pshp "> < PARAM NAME=block30.10 VALUE="~: IFFLOORED"> < PARAM NAME=block30.11 VALUE="~ [ -3 2 / -2 = INVERT ] LITERAL IF POSTPONE \ THEN ;"> < PARAM NAME=block30.13 VALUE="~: IFSYM"> < PARAM NAME=block30.14 VALUE="~ [ -3 2 / -1 = INVERT ] LITERAL IF POSTPONE \ THEN ;"> < PARAM NAME=block31 VALUE=""> < PARAM NAME=block31.0 VALUE="~\ THE SYSTEM MIGHT DO EITHER FLOORED OR SYMMETRIC DIVISION."> < PARAM NAME=block31.1 VALUE="~\ SINCE WE HAVE ALREADY TESTED M*, FM/MOD, AND SM/REM"> < PARAM NAME=block31.2 VALUE="~\ WE CAN USE THEM IN TEST."> < PARAM NAME=block31.3 VALUE="~IFFLOORED : T/MOD >R S>D R> FM/MOD ;"> < PARAM NAME=block31.4 VALUE="~IFFLOORED : T/ T/MOD SWAP DROP ;"> < PARAM NAME=block31.5 VALUE="~IFFLOORED : TMOD T/MOD DROP ;"> < PARAM NAME=block31.6 VALUE="~IFFLOORED : T*/MOD >R M* R> FM/MOD ;"> < PARAM NAME=block31.7 VALUE="~IFFLOORED : T*/ T*/MOD SWAP DROP ;"> < PARAM NAME=block31.8 VALUE="~IFSYM : T/MOD >R S>D R> SM/REM ;"> < PARAM NAME=block31.9 VALUE="~IFSYM : T/ T/MOD SWAP DROP ;"> < PARAM NAME=block31.10 VALUE="~IFSYM : TMOD T/MOD DROP ;"> < PARAM NAME=block31.11 VALUE="~IFSYM : T*/MOD >R M* R> SM/REM ;"> < PARAM NAME=block31.12 VALUE="~IFSYM : T*/ T*/MOD SWAP DROP ;"> < PARAM NAME=block31.14 VALUE="~{ 0 1 /MOD -> 0 1 T/MOD }"> < PARAM NAME=block31.15 VALUE="~{ 1 1 /MOD -> 1 1 T/MOD }"> < PARAM NAME=block32 VALUE=""> < PARAM NAME=block32.0 VALUE="~{ 2 1 /MOD -> 2 1 T/MOD }"> < PARAM NAME=block32.1 VALUE="~{ -1 1 /MOD -> -1 1 T/MOD }"> < PARAM NAME=block32.2 VALUE="~{ -2 1 /MOD -> -2 1 T/MOD }"> < PARAM NAME=block32.3 VALUE="~{ 0 -1 /MOD -> 0 -1 T/MOD }"> < PARAM NAME=block32.4 VALUE="~{ 1 -1 /MOD -> 1 -1 T/MOD }"> < PARAM NAME=block32.5 VALUE="~{ 2 -1 /MOD -> 2 -1 T/MOD }"> < PARAM NAME=block32.6 VALUE="~{ -1 -1 /MOD -> -1 -1 T/MOD }"> < PARAM NAME=block32.7 VALUE="~{ -2 -1 /MOD -> -2 -1 T/MOD }"> < PARAM NAME=block32.8 VALUE="~{ 2 2 /MOD -> 2 2 T/MOD }"> < PARAM NAME=block32.9 VALUE="~{ -1 -1 /MOD -> -1 -1 T/MOD }"> < PARAM NAME=block32.10 VALUE="~{ -2 -2 /MOD -> -2 -2 T/MOD }"> < PARAM NAME=block32.11 VALUE="~{ 7 3 /MOD -> 7 3 T/MOD }"> < PARAM NAME=block32.12 VALUE="~{ 7 -3 /MOD -> 7 -3 T/MOD }"> < PARAM NAME=block32.13 VALUE="~{ -7 3 /MOD -> -7 3 T/MOD }"> < PARAM NAME=block32.14 VALUE="~{ -7 -3 /MOD -> -7 -3 T/MOD }"> < PARAM NAME=block32.15 VALUE="~{ MAX-INT 1 /MOD -> MAX-INT 1 T/MOD }"> < PARAM NAME=block33 VALUE=""> < PARAM NAME=block33.0 VALUE="~{ MIN-INT 1 /MOD -> MIN-INT 1 T/MOD }"> < PARAM NAME=block33.1 VALUE="~{ MAX-INT MAX-INT /MOD -> MAX-INT MAX-INT T/MOD }"> < PARAM NAME=block33.2 VALUE="~{ MIN-INT MIN-INT /MOD -> MIN-INT MIN-INT T/MOD }"> < PARAM NAME=block33.4 VALUE="~{ 0 1 / -> 0 1 T/ }"> < PARAM NAME=block33.5 VALUE="~{ 1 1 / -> 1 1 T/ }"> < PARAM NAME=block33.6 VALUE="~{ 2 1 / -> 2 1 T/ }"> < PARAM NAME=block33.7 VALUE="~{ -1 1 / -> -1 1 T/ }"> < PARAM NAME=block33.8 VALUE="~{ -2 1 / -> -2 1 T/ }"> < PARAM NAME=block33.9 VALUE="~{ 0 -1 / -> 0 -1 T/ }"> < PARAM NAME=block33.10 VALUE="~{ 1 -1 / -> 1 -1 T/ }"> < PARAM NAME=block33.11 VALUE="~{ 2 -1 / -> 2 -1 T/ }"> < PARAM NAME=block33.12 VALUE="~{ -1 -1 / -> -1 -1 T/ }"> < PARAM NAME=block33.13 VALUE="~{ -2 -1 / -> -2 -1 T/ }"> < PARAM NAME=block33.14 VALUE="~{ 2 2 / -> 2 2 T/ }"> < PARAM NAME=block33.15 VALUE="~{ -1 -1 / -> -1 -1 T/ }"> < PARAM NAME=block34 VALUE=""> < PARAM NAME=block34.0 VALUE="~{ -2 -2 / -> -2 -2 T/ }"> < PARAM NAME=block34.1 VALUE="~{ 7 3 / -> 7 3 T/ }"> < PARAM NAME=block34.2 VALUE="~{ 7 -3 / -> 7 -3 T/ }"> < PARAM NAME=block34.3 VALUE="~{ -7 3 / -> -7 3 T/ }"> < PARAM NAME=block34.4 VALUE="~{ -7 -3 / -> -7 -3 T/ }"> < PARAM NAME=block34.5 VALUE="~{ MAX-INT 1 / -> MAX-INT 1 T/ }"> < PARAM NAME=block34.6 VALUE="~{ MIN-INT 1 / -> MIN-INT 1 T/ }"> < PARAM NAME=block34.7 VALUE="~{ MAX-INT MAX-INT / -> MAX-INT MAX-INT T/ }"> < PARAM NAME=block34.8 VALUE="~{ MIN-INT MIN-INT / -> MIN-INT MIN-INT T/ }"> < PARAM NAME=block34.10 VALUE="~{ 0 1 MOD -> 0 1 TMOD }"> < PARAM NAME=block34.11 VALUE="~{ 1 1 MOD -> 1 1 TMOD }"> < PARAM NAME=block34.12 VALUE="~{ 2 1 MOD -> 2 1 TMOD }"> < PARAM NAME=block34.13 VALUE="~{ -1 1 MOD -> -1 1 TMOD }"> < PARAM NAME=block34.14 VALUE="~{ -2 1 MOD -> -2 1 TMOD }"> < PARAM NAME=block34.15 VALUE="~{ 0 -1 MOD -> 0 -1 TMOD }"> < PARAM NAME=block35 VALUE=""> < PARAM NAME=block35.0 VALUE="~{ 1 -1 MOD -> 1 -1 TMOD }"> < PARAM NAME=block35.1 VALUE="~{ 2 -1 MOD -> 2 -1 TMOD }"> < PARAM NAME=block35.2 VALUE="~{ -1 -1 MOD -> -1 -1 TMOD }"> < PARAM NAME=block35.3 VALUE="~{ -2 -1 MOD -> -2 -1 TMOD }"> < PARAM NAME=block35.4 VALUE="~{ 2 2 MOD -> 2 2 TMOD }"> < PARAM NAME=block35.5 VALUE="~{ -1 -1 MOD -> -1 -1 TMOD }"> < PARAM NAME=block35.6 VALUE="~{ -2 -2 MOD -> -2 -2 TMOD }"> < PARAM NAME=block35.7 VALUE="~{ 7 3 MOD -> 7 3 TMOD }"> < PARAM NAME=block35.8 VALUE="~{ 7 -3 MOD -> 7 -3 TMOD }"> < PARAM NAME=block35.9 VALUE="~{ -7 3 MOD -> -7 3 TMOD }"> < PARAM NAME=block35.10 VALUE="~{ -7 -3 MOD -> -7 -3 TMOD }"> < PARAM NAME=block35.11 VALUE="~{ MAX-INT 1 MOD -> MAX-INT 1 TMOD }"> < PARAM NAME=block35.12 VALUE="~{ MIN-INT 1 MOD -> MIN-INT 1 TMOD }"> < PARAM NAME=block35.13 VALUE="~{ MAX-INT MAX-INT MOD -> MAX-INT MAX-INT TMOD }"> < PARAM NAME=block35.14 VALUE="~{ MIN-INT MIN-INT MOD -> MIN-INT MIN-INT TMOD }"> < PARAM NAME=block36 VALUE=""> < PARAM NAME=block36.0 VALUE="~{ 0 2 1 */ -> 0 2 1 T*/ }"> < PARAM NAME=block36.1 VALUE="~{ 1 2 1 */ -> 1 2 1 T*/ }"> < PARAM NAME=block36.2 VALUE="~{ 2 2 1 */ -> 2 2 1 T*/ }"> < PARAM NAME=block36.3 VALUE="~{ -1 2 1 */ -> -1 2 1 T*/ }"> < PARAM NAME=block36.4 VALUE="~{ -2 2 1 */ -> -2 2 1 T*/ }"> < PARAM NAME=block36.5 VALUE="~{ 0 2 -1 */ -> 0 2 -1 T*/ }"> < PARAM NAME=block36.6 VALUE="~{ 1 2 -1 */ -> 1 2 -1 T*/ }"> < PARAM NAME=block36.7 VALUE="~{ 2 2 -1 */ -> 2 2 -1 T*/ }"> < PARAM NAME=block36.8 VALUE="~{ -1 2 -1 */ -> -1 2 -1 T*/ }"> < PARAM NAME=block36.9 VALUE="~{ -2 2 -1 */ -> -2 2 -1 T*/ }"> < PARAM NAME=block36.10 VALUE="~{ 2 2 2 */ -> 2 2 2 T*/ }"> < PARAM NAME=block36.11 VALUE="~{ -1 2 -1 */ -> -1 2 -1 T*/ }"> < PARAM NAME=block36.12 VALUE="~{ -2 2 -2 */ -> -2 2 -2 T*/ }"> < PARAM NAME=block36.13 VALUE="~{ 7 2 3 */ -> 7 2 3 T*/ }"> < PARAM NAME=block36.14 VALUE="~{ 7 2 -3 */ -> 7 2 -3 T*/ }"> < PARAM NAME=block36.15 VALUE="~{ -7 2 3 */ -> -7 2 3 T*/ }"> < PARAM NAME=block37 VALUE=""> < PARAM NAME=block37.0 VALUE="~{ -7 2 -3 */ -> -7 2 -3 T*/ }"> < PARAM NAME=block37.1 VALUE="~{ MAX-INT 2 MAX-INT */ -> MAX-INT 2 MAX-INT T*/ }"> < PARAM NAME=block37.2 VALUE="~{ MIN-INT 2 MIN-INT */ -> MIN-INT 2 MIN-INT T*/ }"> < PARAM NAME=block37.4 VALUE="~{ 0 2 1 */MOD -> 0 2 1 T*/MOD }"> < PARAM NAME=block37.5 VALUE="~{ 1 2 1 */MOD -> 1 2 1 T*/MOD }"> < PARAM NAME=block37.6 VALUE="~{ 2 2 1 */MOD -> 2 2 1 T*/MOD }"> < PARAM NAME=block37.7 VALUE="~{ -1 2 1 */MOD -> -1 2 1 T*/MOD }"> < PARAM NAME=block37.8 VALUE="~{ -2 2 1 */MOD -> -2 2 1 T*/MOD }"> < PARAM NAME=block37.9 VALUE="~{ 0 2 -1 */MOD -> 0 2 -1 T*/MOD }"> < PARAM NAME=block37.10 VALUE="~{ 1 2 -1 */MOD -> 1 2 -1 T*/MOD }"> < PARAM NAME=block37.11 VALUE="~{ 2 2 -1 */MOD -> 2 2 -1 T*/MOD }"> < PARAM NAME=block37.12 VALUE="~{ -1 2 -1 */MOD -> -1 2 -1 T*/MOD }"> < PARAM NAME=block37.13 VALUE="~{ -2 2 -1 */MOD -> -2 2 -1 T*/MOD }"> < PARAM NAME=block37.14 VALUE="~{ 2 2 2 */MOD -> 2 2 2 T*/MOD }"> < PARAM NAME=block37.15 VALUE="~{ -1 2 -1 */MOD -> -1 2 -1 T*/MOD }"> < PARAM NAME=block38 VALUE=""> < PARAM NAME=block38.0 VALUE="~{ -2 2 -2 */MOD -> -2 2 -2 T*/MOD }"> < PARAM NAME=block38.1 VALUE="~{ 7 2 3 */MOD -> 7 2 3 T*/MOD }"> < PARAM NAME=block38.2 VALUE="~{ 7 2 -3 */MOD -> 7 2 -3 T*/MOD }"> < PARAM NAME=block38.3 VALUE="~{ -7 2 3 */MOD -> -7 2 3 T*/MOD }"> < PARAM NAME=block38.4 VALUE="~{ -7 2 -3 */MOD -> -7 2 -3 T*/MOD }"> < PARAM NAME=block38.5 VALUE="~{ MAX-INT 2 MAX-INT */MOD -> MAX-INT 2 MAX-INT T*/MOD }"> < PARAM NAME=block38.6 VALUE="~{ MIN-INT 2 MIN-INT */MOD -> MIN-INT 2 MIN-INT T*/MOD }"> < PARAM NAME=block38.8 VALUE="~TESTING HERE , @ ! CELL+ CELLS C, C@ C! CHARS 2@ 2!"> < PARAM NAME=block38.9 VALUE="~TESTING ALIGN ALIGNED +! ALLOT"> < PARAM NAME=block38.11 VALUE="~HERE 1 ALLOT"> < PARAM NAME=block38.12 VALUE="~HERE"> < PARAM NAME=block38.13 VALUE="~CONSTANT 2NDA"> < PARAM NAME=block38.14 VALUE="~CONSTANT 1STA"> < PARAM NAME=block38.15 VALUE="~{ 1STA 2NDA U< ->
} \ HERE MUST GROW WITH ALLOT"> < PARAM NAME=block39 VALUE=""> < PARAM NAME=block39.0 VALUE="~{ 1STA 1+ -> 2NDA } \ ... BY ONE ADDRESS UNIT"> < PARAM NAME=block39.2 VALUE="~( MISSING TEST: NEGATIVE ALLOT )"> < PARAM NAME=block39.4 VALUE="~HERE 1 ,"> < PARAM NAME=block39.5 VALUE="~HERE 2 ,"> < PARAM NAME=block39.6 VALUE="~CONSTANT 2ND"> < PARAM NAME=block39.7 VALUE="~CONSTANT 1ST"> < PARAM NAME=block39.8 VALUE="~{ 1ST 2ND U< ->
} \ HERE MUST GROW WITH ALLOT"> < PARAM NAME=block39.9 VALUE="~{ 1ST CELL+ -> 2ND } \ ... BY ONE CELL"> < PARAM NAME=block39.11 VALUE="~{ 1ST 1 CELLS + -> 2ND }"> < PARAM NAME=block39.12 VALUE="~{ 1ST @ 2ND @ -> 1 2 }"> < PARAM NAME=block39.13 VALUE="~{ 5 1ST ! -> }"> < PARAM NAME=block39.14 VALUE="~{ 1ST @ 2ND @ -> 5 2 }"> < PARAM NAME=block39.15 VALUE="~{ 6 2ND ! -> }"> < PARAM NAME=block40 VALUE=""> < PARAM NAME=block40.0 VALUE="~{ 1ST @ 2ND @ -> 5 6 }"> < PARAM NAME=block40.1 VALUE="~{ 1ST 2@ -> 6 5 }"> < PARAM NAME=block40.2 VALUE="~{ 2 1 1ST 2! -> }"> < PARAM NAME=block40.3 VALUE="~{ 1ST 2@ -> 2 1 }"> < PARAM NAME=block40.5 VALUE="~HERE 1 C,"> < PARAM NAME=block40.6 VALUE="~HERE 2 C,"> < PARAM NAME=block40.7 VALUE="~CONSTANT 2NDC"> < PARAM NAME=block40.8 VALUE="~CONSTANT 1STC"> < PARAM NAME=block40.9 VALUE="~{ 1STC 2NDC U< ->
} \ HERE MUST GROW WITH ALLOT"> < PARAM NAME=block40.10 VALUE="~{ 1STC CHAR+ -> 2NDC } \ ... BY ONE CHAR"> < PARAM NAME=block40.11 VALUE="~{ 1STC 1 CHARS + -> 2NDC }"> < PARAM NAME=block40.12 VALUE="~{ 1STC C@ 2NDC C@ -> 1 2 }"> < PARAM NAME=block40.13 VALUE="~{ 3 1STC C! -> }"> < PARAM NAME=block40.14 VALUE="~{ 1STC C@ 2NDC C@ -> 3 2 }"> < PARAM NAME=block40.15 VALUE="~{ 4 2NDC C! -> }"> < PARAM NAME=block41 VALUE=""> < PARAM NAME=block41.0 VALUE="~{ 1STC C@ 2NDC C@ -> 3 4 }"> < PARAM NAME=block41.2 VALUE="~HERE 1 ALLOT ALIGN 123 , CONSTANT X"> < PARAM NAME=block41.3 VALUE="~{ X 1+ ALIGNED @ -> 123 }"> < PARAM NAME=block41.4 VALUE="~( MISSING TEST: CHARS AT ALIGNED ADDRESS )"> < PARAM NAME=block41.6 VALUE="~{ 1 CELLS 1 CHARS MOD -> 0 } \ SIZE OF CELL MULTIPLE"> < PARAM NAME=block41.7 VALUE="~ \ OF SIZE OF CHAR"> < PARAM NAME=block41.9 VALUE="~{ 0 1ST ! -> }"> < PARAM NAME=block41.10 VALUE="~{ 1 1ST +! -> }"> < PARAM NAME=block41.11 VALUE="~{ 1ST @ -> 1 }"> < PARAM NAME=block41.12 VALUE="~{ -1 1ST +! 1ST @ -> 0 }"> < PARAM NAME=block41.14 VALUE='~TESTING CHAR [CHAR] { ] BL S"'> < PARAM NAME=block42 VALUE=""> < PARAM NAME=block42.0 VALUE="~{ BL -> 20 }"> < PARAM NAME=block42.1 VALUE="~{ CHAR X -> 58 }"> < PARAM NAME=block42.2 VALUE="~{ CHAR HELLO -> 48 }"> < PARAM NAME=block42.3 VALUE="~{ : GC1 [CHAR] X ; -> }"> < PARAM NAME=block42.4 VALUE="~{ : GC2 [CHAR] HELLO ; -> }"> < PARAM NAME=block42.5 VALUE="~{ GC1 -> 58 }"> < PARAM NAME=block42.6 VALUE="~{ GC2 -> 48 }"> < PARAM NAME=block42.7 VALUE="~{ : GC3 [ GC1 ] LITERAL ; -> }"> < PARAM NAME=block42.8 VALUE="~{ GC3 -> 58 }"> < PARAM NAME=block42.9 VALUE='~{ : GC4 S" XY" ; -> }'> < PARAM NAME=block42.10 VALUE="~{ GC4 SWAP DROP -> 2 }"> < PARAM NAME=block42.11 VALUE="~{ GC4 DROP DUP C@ SWAP CHAR+ C@ -> 58 59 }"> < PARAM NAME=block42.13 VALUE="~\ ----------------------------------------------------------"> < PARAM NAME=block42.14 VALUE="~TESTING ' ['] FIND EXECUTE IMMEDIATE COUNT LITERAL POSTPONE"> < PARAM NAME=block42.15 VALUE="~TESTING STATE"> < PARAM NAME=block43 VALUE=""> < PARAM NAME=block43.1 VALUE="~{ : GT1 123 ; -> }"> < PARAM NAME=block43.2 VALUE="~{ ' GT1 EXECUTE -> 123 }"> < PARAM NAME=block43.3 VALUE="~{ : GT2 ['] GT1 ; IMMEDIATE -> }"> < PARAM NAME=block43.4 VALUE="~{ GT2 EXECUTE -> 123 }"> < PARAM NAME=block43.5 VALUE="~HERE 3 C, CHAR G C, CHAR T C, CHAR 1 C,"> < PARAM NAME=block43.6 VALUE="~1 ALLOT \ needed to fool FIND"> < PARAM NAME=block43.7 VALUE="~CONSTANT GT1STRING"> < PARAM NAME=block43.8 VALUE="~HERE 3 C, CHAR G C, CHAR T C, CHAR 2 C,"> < PARAM NAME=block43.9 VALUE="~1 ALLOT \ needed to fool FIND"> < PARAM NAME=block43.10 VALUE="~CONSTANT GT2STRING"> < PARAM NAME=block43.11 VALUE="~{ GT1STRING FIND -> ' GT1 -1 }"> < PARAM NAME=block43.12 VALUE="~{ GT2STRING FIND -> ' GT2 1 }"> < PARAM NAME=block43.13 VALUE="~( HOW TO SEARCH FOR NON-EXISTENT WORD? )"> < PARAM NAME=block43.14 VALUE="~{ : GT3 GT2 LITERAL ; -> }"> < PARAM NAME=block43.15 VALUE="~{ GT3 -> ' GT1 }"> < PARAM NAME=block44 VALUE=""> < PARAM NAME=block44.0 VALUE="~{ GT1STRING COUNT -> GT1STRING CHAR+ 3 }"> < PARAM NAME=block44.2 VALUE="~{ : GT4 POSTPONE GT1 ; IMMEDIATE -> }"> < PARAM NAME=block44.3 VALUE="~{ : GT5 GT4 ; -> }"> < PARAM NAME=block44.4 VALUE="~{ GT5 -> 123 }"> < PARAM NAME=block44.5 VALUE="~{ : GT6 345 ; IMMEDIATE -> }"> < PARAM NAME=block44.6 VALUE="~{ : GT7 POSTPONE GT6 ; -> }"> < PARAM NAME=block44.7 VALUE="~{ GT7 -> 345 }"> < PARAM NAME=block44.9 VALUE="~{ : GT8 STATE @ ; IMMEDIATE -> }"> < PARAM NAME=block44.10 VALUE="~{ GT8 -> 0 }"> < PARAM NAME=block44.11 VALUE="~{ : GT9 GT8 LITERAL ; -> }"> < PARAM NAME=block44.12 VALUE="~{ GT9 0= ->
}"> < PARAM NAME=block44.14 VALUE="~TESTING IF ELSE THEN BEGIN WHILE REPEAT UNTIL RECURSE"> < PARAM NAME=block45 VALUE=""> < PARAM NAME=block45.0 VALUE="~{ : GI1 IF 123 THEN ; -> }"> < PARAM NAME=block45.1 VALUE="~{ : GI2 IF 123 ELSE 234 THEN ; -> }"> < PARAM NAME=block45.2 VALUE="~{ 0 GI1 -> }"> < PARAM NAME=block45.3 VALUE="~{ 1 GI1 -> 123 }"> < PARAM NAME=block45.4 VALUE="~{ -1 GI1 -> 123 }"> < PARAM NAME=block45.5 VALUE="~{ 0 GI2 -> 234 }"> < PARAM NAME=block45.6 VALUE="~{ 1 GI2 -> 123 }"> < PARAM NAME=block45.7 VALUE="~{ -1 GI1 -> 123 }"> < PARAM NAME=block45.9 VALUE="~{ : GI3 BEGIN DUP 5 < WHILE DUP 1+ REPEAT ; -> }"> < PARAM NAME=block45.10 VALUE="~{ 0 GI3 -> 0 1 2 3 4 5 }"> < PARAM NAME=block45.11 VALUE="~{ 4 GI3 -> 4 5 }"> < PARAM NAME=block45.12 VALUE="~{ 5 GI3 -> 5 }"> < PARAM NAME=block45.13 VALUE="~{ 6 GI3 -> 6 }"> < PARAM NAME=block45.15 VALUE="~{ : GI4 BEGIN DUP 1+ DUP 5 > UNTIL ; -> }"> < PARAM NAME=block46 VALUE=""> < PARAM NAME=block46.0 VALUE="~{ 3 GI4 -> 3 4 5 6 }"> < PARAM NAME=block46.1 VALUE="~{ 5 GI4 -> 5 6 }"> < PARAM NAME=block46.2 VALUE="~{ 6 GI4 -> 6 7 }"> < PARAM NAME=block46.4 VALUE="~{ : GI5 BEGIN DUP 2 > WHILE DUP 5 < WHILE DUP 1+ REPEAT"> < PARAM NAME=block46.5 VALUE="~ 123 ELSE 345 THEN ; -> }"> < PARAM NAME=block46.6 VALUE="~{ 1 GI5 -> 1 345 }"> < PARAM NAME=block46.7 VALUE="~{ 2 GI5 -> 2 345 }"> < PARAM NAME=block46.8 VALUE="~{ 3 GI5 -> 3 4 5 123 }"> < PARAM NAME=block46.9 VALUE="~{ 4 GI5 -> 4 5 123 }"> < PARAM NAME=block46.10 VALUE="~{ 5 GI5 -> 5 123 }"> < PARAM NAME=block46.12 VALUE="~{ : GI6 ( N -- 0,1,..N ) DUP IF DUP >R 1- RECURSE R> THEN ;"> < PARAM NAME=block46.13 VALUE="~ -> }"> < PARAM NAME=block46.14 VALUE="~{ 0 GI6 -> 0 }"> < PARAM NAME=block46.15 VALUE="~{ 1 GI6 -> 0 1 }"> < PARAM NAME=block47 VALUE=""> < PARAM NAME=block47.0 VALUE="~{ 2 GI6 -> 0 1 2 }"> < PARAM NAME=block47.1 VALUE="~{ 3 GI6 -> 0 1 2 3 }"> < PARAM NAME=block47.2 VALUE="~{ 4 GI6 -> 0 1 2 3 4 }"> < PARAM NAME=block47.4 VALUE="~\ ----------------------------------------------------------"> < PARAM NAME=block47.5 VALUE="~TESTING DO LOOP +LOOP I J UNLOOP LEAVE EXIT"> < PARAM NAME=block47.7 VALUE="~{ : GD1 DO I LOOP ; -> }"> < PARAM NAME=block47.8 VALUE="~{ 4 1 GD1 -> 1 2 3 }"> < PARAM NAME=block47.9 VALUE="~{ 2 -1 GD1 -> -1 0 1 }"> < PARAM NAME=block47.10 VALUE="~{ MID-UINT+1 MID-UINT GD1 -> MID-UINT }"> < PARAM NAME=block47.12 VALUE="~{ : GD2 DO I -1 +LOOP ; -> }"> < PARAM NAME=block47.13 VALUE="~{ 1 4 GD2 -> 4 3 2 1 }"> < PARAM NAME=block47.14 VALUE="~{ -1 2 GD2 -> 2 1 0 -1 }"> < PARAM NAME=block47.15 VALUE="~{ MID-UINT MID-UINT+1 GD2 -> MID-UINT+1 MID-UINT }"> < PARAM NAME=block48 VALUE=""> < PARAM NAME=block48.1 VALUE="~{ : GD3 DO 1 0 DO J LOOP LOOP ; -> }"> < PARAM NAME=block48.2 VALUE="~{ 4 1 GD3 -> 1 2 3 }"> < PARAM NAME=block48.3 VALUE="~{ 2 -1 GD3 -> -1 0 1 }"> < PARAM NAME=block48.4 VALUE="~{ MID-UINT+1 MID-UINT GD3 -> MID-UINT }"> < PARAM NAME=block48.6 VALUE="~{ : GD4 DO 1 0 DO J LOOP -1 +LOOP ; -> }"> < PARAM NAME=block48.7 VALUE="~{ 1 4 GD4 -> 4 3 2 1 }"> < PARAM NAME=block48.8 VALUE="~{ -1 2 GD4 -> 2 1 0 -1 }"> < PARAM NAME=block48.9 VALUE="~{ MID-UINT MID-UINT+1 GD4 -> MID-UINT+1 MID-UINT }"> < PARAM NAME=block48.11 VALUE="~{ : GD5 123 SWAP 0 DO I 4 > IF DROP 234 LEAVE THEN LOOP ;"> < PARAM NAME=block48.12 VALUE="~ { -> }"> < PARAM NAME=block48.13 VALUE="~{ 1 GD5 -> 123 }"> < PARAM NAME=block48.14 VALUE="~{ 5 GD5 -> 123 }"> < PARAM NAME=block48.15 VALUE="~{ 6 GD5 -> 234 }"> < PARAM NAME=block49 VALUE=""> < PARAM NAME=block49.1 VALUE="~{ : GD6 ( PAT: {0 0},{0 0}{1 0}{1 1},{0 0}{1 0}{1 1}{2 0} )"> < PARAM NAME=block49.2 VALUE="~ ( {2 1}{2 2} )"> < PARAM NAME=block49.3 VALUE="~ 0 SWAP 0 DO"> < PARAM NAME=block49.4 VALUE="~ I 1+ 0 DO I J + 3 = IF I UNLOOP I UNLOOP EXIT THEN 1+"> < PARAM NAME=block49.5 VALUE="~ LOOP"> < PARAM NAME=block49.6 VALUE="~ LOOP ; -> }"> < PARAM NAME=block49.7 VALUE="~{ 1 GD6 -> 1 }"> < PARAM NAME=block49.8 VALUE="~{ 2 GD6 -> 3 }"> < PARAM NAME=block49.9 VALUE="~{ 3 GD6 -> 4 1 2 }"> < PARAM NAME=block49.11 VALUE="~TESTING DEFINING WORDS: : ; CONSTANT VARIABLE CREATE DOES>"> < PARAM NAME=block49.12 VALUE="~TESTING >BODY"> < PARAM NAME=block49.14 VALUE="~{ 123 CONSTANT X123 -> }"> < PARAM NAME=block49.15 VALUE="~{ X123 -> 123 }"> < PARAM NAME=block50 VALUE=""> < PARAM NAME=block50.0 VALUE="~{ : EQU CONSTANT ; -> }"> < PARAM NAME=block50.1 VALUE="~{ X123 EQU Y123 -> }"> < PARAM NAME=block50.2 VALUE="~{ Y123 -> 123 }"> < PARAM NAME=block50.4 VALUE="~{ VARIABLE V1 -> }"> < PARAM NAME=block50.5 VALUE="~{ 123 V1 ! -> }"> < PARAM NAME=block50.6 VALUE="~{ V1 @ -> 123 }"> < PARAM NAME=block50.8 VALUE="~{ : NOP : POSTPONE ; ; -> }"> < PARAM NAME=block50.9 VALUE="~{ NOP NOP1 NOP NOP2 -> }"> < PARAM NAME=block50.10 VALUE="~{ NOP1 -> }"> < PARAM NAME=block50.11 VALUE="~{ NOP2 -> }"> < PARAM NAME=block50.13 VALUE="~{ : DOES1 DOES> @ 1 + ; -> }"> < PARAM NAME=block50.14 VALUE="~{ : DOES2 DOES> @ 2 + ; -> }"> < PARAM NAME=block50.15 VALUE="~{ CREATE CR1 -> }"> < PARAM NAME=block51 VALUE=""> < PARAM NAME=block51.0 VALUE="~{ CR1 -> HERE }"> < PARAM NAME=block51.1 VALUE="~{ ' CR1 >BODY -> HERE }"> < PARAM NAME=block51.2 VALUE="~{ 1 , -> }"> < PARAM NAME=block51.3 VALUE="~{ CR1 @ -> 1 }"> < PARAM NAME=block51.4 VALUE="~{ DOES1 -> }"> < PARAM NAME=block51.5 VALUE="~{ CR1 -> 2 }"> < PARAM NAME=block51.6 VALUE="~{ DOES2 -> }"> < PARAM NAME=block51.7 VALUE="~{ CR1 -> 3 }"> < PARAM NAME=block51.9 VALUE="~{ : WEIRD: CREATE DOES> 1 + DOES> 2 + ; -> }"> < PARAM NAME=block51.10 VALUE="~{ WEIRD: W1 -> }"> < PARAM NAME=block51.11 VALUE="~{ ' W1 >BODY -> HERE }"> < PARAM NAME=block51.12 VALUE="~{ W1 -> HERE 1 + }"> < PARAM NAME=block51.13 VALUE="~{ W1 -> HERE 2 + }"> < PARAM NAME=block51.15 VALUE="~TESTING EVALUATE"> < PARAM NAME=block52 VALUE=""> < PARAM NAME=block52.1 VALUE='~: GE1 S" 123" ; IMMEDIATE'> < PARAM NAME=block52.2 VALUE='~: GE2 S" 123 1+" ; IMMEDIATE'> < PARAM NAME=block52.3 VALUE='~\ : GE3 S" : GE4 345 ;" ; \ Not possible using as :'> < PARAM NAME=block52.4 VALUE="~\ \ calls Header"> < PARAM NAME=block52.5 VALUE="~\ \ which uses host's WORD"> < PARAM NAME=block52.6 VALUE="~\ \ to parse TIB"> < PARAM NAME=block52.7 VALUE="~: GE5 EVALUATE ; IMMEDIATE"> < PARAM NAME=block52.8 VALUE="~{ GE1 EVALUATE -> 123 } ( TEST EVALUATE IN INTERP. STATE )"> < PARAM NAME=block52.9 VALUE="~{ GE2 EVALUATE -> 124 }"> < PARAM NAME=block52.10 VALUE="~\ { GE3 EVALUATE -> }"> < PARAM NAME=block52.11 VALUE="~\ { GE4 -> 345 }"> < PARAM NAME=block52.13 VALUE="~{ : GE6 GE1 GE5 ; -> } ( TEST EVALUATE IN COMPILE STATE )"> < PARAM NAME=block52.14 VALUE="~{ GE6 -> 123 }"> < PARAM NAME=block52.15 VALUE="~{ : GE7 GE2 GE5 ; -> }"> < PARAM NAME=block53 VALUE=""> < PARAM NAME=block53.0 VALUE="~{ GE7 -> 124 }"> < PARAM NAME=block53.2 VALUE="~\ ----------------------------------------------------------"> < PARAM NAME=block53.3 VALUE="~TESTING SOURCE >IN WORD"> < PARAM NAME=block53.5 VALUE='~: GS1 S" SOURCE" 2DUP EVALUATE'> < PARAM NAME=block53.6 VALUE="~ >R SWAP >R = R> R> = ;"> < PARAM NAME=block53.7 VALUE="~{ GS1 ->
}"> < PARAM NAME=block53.9 VALUE="~VARIABLE SCANS"> < PARAM NAME=block53.10 VALUE="~: RESCAN?"> < PARAM NAME=block53.11 VALUE="~ -1 SCANS +! SCANS @ IF"> < PARAM NAME=block53.12 VALUE="~\ pshp 3 >IN ! \ 3 not 0 to skip over"> < PARAM NAME=block53.13 VALUE='~\ pshp \ leading ""'> < PARAM NAME=block53.14 VALUE="~ 0 >IN ! \ why 3? changed back to 0 pshp"> < PARAM NAME=block53.15 VALUE="~ THEN ;"> < PARAM NAME=block54 VALUE=""> < PARAM NAME=block54.1 VALUE="~{ 2 SCANS ! \ tInterpret-Name explicity coded to"> < PARAM NAME=block54.2 VALUE="~ \ prevent this!"> < PARAM NAME=block55 VALUE=""> < PARAM NAME=block55.0 VALUE="~345 RESCAN? \ this must be the first line in a block pshp"> < PARAM NAME=block55.1 VALUE="~-> 345 345 }"> < PARAM NAME=block55.3 VALUE='~: GS2 5 SCANS ! S" 123 RESCAN?" EVALUATE ;'> < PARAM NAME=block55.4 VALUE="~{ GS2 -> 123 123 123 123 123 }"> < PARAM NAME=block55.6 VALUE="~: GS3 BL WORD COUNT SWAP C@ ;"> < PARAM NAME=block55.7 VALUE="~{ GS3 HELLO -> 5 CHAR H }"> < PARAM NAME=block55.9 VALUE="~: GS4 SOURCE >IN ! DROP ;"> < PARAM NAME=block55.10 VALUE="~{ GS4 123 456 \ this must be the last code in a block pshp"> < PARAM NAME=block56 VALUE=""> < PARAM NAME=block56.0 VALUE="~-> }"> < PARAM NAME=block56.2 VALUE="~TESTING <# # #S #> HOLD SIGN BASE >NUMBER HEX DECIMAL"> < PARAM NAME=block56.4 VALUE="~: S= \ ( ADDR1 C1 ADDR2 C2 -- T/F ) COMPARE TWO STRINGS."> < PARAM NAME=block56.5 VALUE="~ >R SWAP R@ = IF \ MAKE SURE STRINGS HAVE"> < PARAM NAME=block56.6 VALUE="~ \ SAME LENGTH"> < PARAM NAME=block56.7 VALUE="~ R> ?DUP IF \ IF NON-EMPTY STRINGS"> < PARAM NAME=block56.8 VALUE="~ 0 DO"> < PARAM NAME=block56.9 VALUE="~ OVER C@ OVER C@ - IF 2DROP
UNLOOP EXIT THEN"> < PARAM NAME=block56.10 VALUE="~ SWAP CHAR+ SWAP CHAR+"> < PARAM NAME=block56.11 VALUE="~ LOOP"> < PARAM NAME=block56.12 VALUE="~ THEN"> < PARAM NAME=block56.13 VALUE="~ 2DROP
\ IF WE GET HERE, STRINGS MATCH"> < PARAM NAME=block56.14 VALUE="~ ELSE"> < PARAM NAME=block56.15 VALUE="~ R> DROP 2DROP
\ LENGTHS MISMATCH"> < PARAM NAME=block57 VALUE=""> < PARAM NAME=block57.0 VALUE="~ THEN ;"> < PARAM NAME=block57.2 VALUE='~: GP1 <# 41 HOLD 42 HOLD 0 0 #> S" BA" S= ;'> < PARAM NAME=block57.3 VALUE="~{ GP1 ->
}"> < PARAM NAME=block57.5 VALUE='~: GP2 <# -1 SIGN 0 SIGN -1 SIGN 0 0 #> S" --" S= ;'> < PARAM NAME=block57.6 VALUE="~{ GP2 ->
}"> < PARAM NAME=block57.8 VALUE='~: GP3 <# 1 0 # # #> S" 01" S= ;'> < PARAM NAME=block57.9 VALUE="~{ GP3 ->
}"> < PARAM NAME=block57.11 VALUE='~: GP4 <# 1 0 #S #> S" 1" S= ;'> < PARAM NAME=block57.12 VALUE="~{ GP4 ->
}"> < PARAM NAME=block57.14 VALUE="~24 CONSTANT MAX-BASE \ BASE 2 .. 36"> < PARAM NAME=block57.15 VALUE="~: COUNT-BITS"> < PARAM NAME=block58 VALUE=""> < PARAM NAME=block58.0 VALUE="~ 0 0 INVERT BEGIN DUP WHILE >R 1+ R> 2* REPEAT DROP ;"> < PARAM NAME=block58.1 VALUE="~COUNT-BITS 2* CONSTANT #BITS-UD \ NUMBER OF BITS IN UD"> < PARAM NAME=block58.3 VALUE="~: GP5"> < PARAM NAME=block58.4 VALUE="~ BASE @
"> < PARAM NAME=block58.5 VALUE="~ MAX-BASE 1+ 2 DO \ FOR EACH POSSIBLE BASE"> < PARAM NAME=block58.6 VALUE="~ I BASE ! \ TBD: ASSUMES BASE WORKS"> < PARAM NAME=block58.7 VALUE='~ I 0 <# #S #> S" 10" S= AND'> < PARAM NAME=block58.8 VALUE="~ LOOP"> < PARAM NAME=block58.9 VALUE="~ SWAP BASE ! ;"> < PARAM NAME=block58.10 VALUE="~{ GP5 ->
}"> < PARAM NAME=block58.12 VALUE="~: GP6"> < PARAM NAME=block58.13 VALUE="~ BASE @ >R 2 BASE !"> < PARAM NAME=block58.14 VALUE="~ MAX-UINT MAX-UINT <# #S #> \ MAXIMUM UD TO BINARY"> < PARAM NAME=block58.15 VALUE="~ R> BASE ! \ S: C-ADDR U"> < PARAM NAME=block59 VALUE=""> < PARAM NAME=block59.0 VALUE="~ DUP #BITS-UD = SWAP"> < PARAM NAME=block59.1 VALUE="~ 0 DO \ S: C-ADDR FLAG"> < PARAM NAME=block59.2 VALUE="~ OVER C@ [CHAR] 1 = AND \ ALL ONES"> < PARAM NAME=block59.3 VALUE="~ >R CHAR+ R>"> < PARAM NAME=block59.4 VALUE="~ LOOP SWAP DROP ;"> < PARAM NAME=block59.5 VALUE="~{ GP6 ->
}"> < PARAM NAME=block59.7 VALUE="~: GP7"> < PARAM NAME=block59.8 VALUE="~ BASE @ >R MAX-BASE BASE !"> < PARAM NAME=block59.9 VALUE="~
"> < PARAM NAME=block59.10 VALUE="~ A 0 DO"> < PARAM NAME=block59.11 VALUE="~ I 0 <# #S #>"> < PARAM NAME=block59.12 VALUE="~\ >R C@ 30 I + = AND R> 1 = AND \ Error: Replaced by"> < PARAM NAME=block59.13 VALUE="~ \ next line"> < PARAM NAME=block59.14 VALUE="~ 1 = SWAP C@ 30 I + = AND AND"> < PARAM NAME=block59.15 VALUE="~ LOOP"> < PARAM NAME=block60 VALUE=""> < PARAM NAME=block60.0 VALUE="~\ MAX-BASE 1+ A DO \ Error: Replaced by"> < PARAM NAME=block60.1 VALUE="~ \ next line"> < PARAM NAME=block60.2 VALUE="~ MAX-BASE A DO"> < PARAM NAME=block60.3 VALUE="~ I 0 <# #S #>"> < PARAM NAME=block60.4 VALUE="~\ >R C@ 41 I A - + = AND R> 1 = AND \ Error: Replaced"> < PARAM NAME=block60.5 VALUE="~ \ by next line"> < PARAM NAME=block60.6 VALUE="~ 1 = SWAP C@ 41 I A - + = AND AND"> < PARAM NAME=block60.7 VALUE="~ LOOP"> < PARAM NAME=block60.8 VALUE="~ R> BASE ! ;"> < PARAM NAME=block60.10 VALUE="~{ GP7 ->
}"> < PARAM NAME=block60.12 VALUE="~\ >NUMBER TESTS"> < PARAM NAME=block60.13 VALUE="~CREATE GN-BUF 0 C,"> < PARAM NAME=block60.14 VALUE="~: GN-STRING GN-BUF 1 ;"> < PARAM NAME=block60.15 VALUE="~: GN-CONSUMED GN-BUF CHAR+ 0 ;"> < PARAM NAME=block61 VALUE=""> < PARAM NAME=block61.0 VALUE="~: GN' [CHAR] ' WORD CHAR+ C@ GN-BUF C! GN-STRING ;"> < PARAM NAME=block61.1 VALUE="~{ 0 0 GN' 0' >NUMBER -> 0 0 GN-CONSUMED }"> < PARAM NAME=block61.2 VALUE="~{ 0 0 GN' 1' >NUMBER -> 1 0 GN-CONSUMED }"> < PARAM NAME=block61.3 VALUE="~{ 1 0 GN' 1' >NUMBER -> BASE @ 1+ 0 GN-CONSUMED }"> < PARAM NAME=block61.4 VALUE="~{ 0 0 GN' -' >NUMBER -> 0 0 GN-STRING } \ SHOULD FAIL TO"> < PARAM NAME=block61.5 VALUE="~ \ CONVERT THESE"> < PARAM NAME=block61.6 VALUE="~{ 0 0 GN' +' >NUMBER -> 0 0 GN-STRING }"> < PARAM NAME=block61.7 VALUE="~{ 0 0 GN' .' >NUMBER -> 0 0 GN-STRING }"> < PARAM NAME=block61.9 VALUE="~: >NUMBER-BASED"> < PARAM NAME=block61.10 VALUE="~ BASE @ >R BASE ! >NUMBER R> BASE ! ;"> < PARAM NAME=block61.12 VALUE="~{ 0 0 GN' 2' 10 >NUMBER-BASED -> 2 0 GN-CONSUMED }"> < PARAM NAME=block61.13 VALUE="~{ 0 0 GN' 2' 2 >NUMBER-BASED -> 0 0 GN-STRING }"> < PARAM NAME=block61.14 VALUE="~{ 0 0 GN' F' 10 >NUMBER-BASED -> 0F 0 GN-CONSUMED }"> < PARAM NAME=block61.15 VALUE="~ \ changed F to 0F pshp"> < PARAM NAME=block62 VALUE=""> < PARAM NAME=block62.0 VALUE="~{ 0 0 GN' G' 10 >NUMBER-BASED -> 0 0 GN-STRING }"> < PARAM NAME=block62.1 VALUE="~{ 0 0 GN' G' MAX-BASE >NUMBER-BASED -> 10 0 GN-CONSUMED }"> < PARAM NAME=block62.2 VALUE="~{ 0 0 GN' Z' MAX-BASE >NUMBER-BASED -> 23 0 GN-CONSUMED }"> < PARAM NAME=block62.4 VALUE="~: GN1 \ ( UD BASE -- UD' LEN ) UD SHOULD EQUAL UD' AND LEN"> < PARAM NAME=block62.5 VALUE="~ \ SHOULD BE ZERO."> < PARAM NAME=block62.6 VALUE="~ BASE @ >R BASE !"> < PARAM NAME=block62.7 VALUE="~ <# #S #>"> < PARAM NAME=block62.8 VALUE="~ 0 0 2SWAP >NUMBER SWAP DROP \ RETURN LENGTH ONLY"> < PARAM NAME=block62.9 VALUE="~ R> BASE ! ;"> < PARAM NAME=block62.10 VALUE="~{ 0 0 2 GN1 -> 0 0 0 }"> < PARAM NAME=block62.11 VALUE="~{ MAX-UINT 0 2 GN1 -> MAX-UINT 0 0 }"> < PARAM NAME=block62.12 VALUE="~{ MAX-UINT DUP 2 GN1 -> MAX-UINT DUP 0 }"> < PARAM NAME=block62.13 VALUE="~{ 0 0 MAX-BASE GN1 -> 0 0 0 }"> < PARAM NAME=block62.14 VALUE="~{ MAX-UINT 0 MAX-BASE GN1 -> MAX-UINT 0 0 }"> < PARAM NAME=block62.15 VALUE="~{ MAX-UINT DUP MAX-BASE GN1 -> MAX-UINT DUP 0 }"> < PARAM NAME=block63 VALUE=""> < PARAM NAME=block63.1 VALUE="~: GN2 \ ( -- 16 10 )"> < PARAM NAME=block63.2 VALUE="~ BASE @ >R HEX BASE @ DECIMAL BASE @ R> BASE ! ;"> < PARAM NAME=block63.3 VALUE="~{ GN2 -> 10 A }"> < PARAM NAME=block63.5 VALUE="~TESTING FILL MOVE"> < PARAM NAME=block63.7 VALUE="~CREATE FBUF 00 C, 00 C, 00 C,"> < PARAM NAME=block63.8 VALUE="~CREATE SBUF 12 C, 34 C, 56 C,"> < PARAM NAME=block63.9 VALUE="~: SEEBUF FBUF C@ FBUF CHAR+ C@ FBUF CHAR+ CHAR+ C@ ;"> < PARAM NAME=block63.11 VALUE="~{ FBUF 0 20 FILL -> }"> < PARAM NAME=block63.12 VALUE="~{ SEEBUF -> 00 00 00 }"> < PARAM NAME=block63.14 VALUE="~{ FBUF 1 20 FILL -> }"> < PARAM NAME=block63.15 VALUE="~{ SEEBUF -> 20 00 00 }"> < PARAM NAME=block64 VALUE=""> < PARAM NAME=block64.1 VALUE="~{ FBUF 3 20 FILL -> }"> < PARAM NAME=block64.2 VALUE="~{ SEEBUF -> 20 20 20 }"> < PARAM NAME=block64.4 VALUE="~{ FBUF FBUF 3 CHARS MOVE -> } \ BIZARRE SPECIAL CASE"> < PARAM NAME=block64.5 VALUE="~{ SEEBUF -> 20 20 20 }"> < PARAM NAME=block64.7 VALUE="~{ SBUF FBUF 0 CHARS MOVE -> }"> < PARAM NAME=block64.8 VALUE="~{ SEEBUF -> 20 20 20 }"> < PARAM NAME=block64.10 VALUE="~{ SBUF FBUF 1 CHARS MOVE -> }"> < PARAM NAME=block64.11 VALUE="~{ SEEBUF -> 12 20 20 }"> < PARAM NAME=block64.13 VALUE="~{ SBUF FBUF 3 CHARS MOVE -> }"> < PARAM NAME=block64.14 VALUE="~{ SEEBUF -> 12 34 56 }"> < PARAM NAME=block65 VALUE=""> < PARAM NAME=block65.0 VALUE="~{ FBUF FBUF CHAR+ 2 CHARS MOVE -> }"> < PARAM NAME=block65.1 VALUE="~{ SEEBUF -> 12 12 34 }"> < PARAM NAME=block65.3 VALUE="~{ FBUF CHAR+ FBUF 2 CHARS MOVE -> }"> < PARAM NAME=block65.4 VALUE="~{ SEEBUF -> 12 34 34 }"> < PARAM NAME=block65.6 VALUE="~\ ----------------------------------------------------------"> < PARAM NAME=block65.7 VALUE='~TESTING OUTPUT: . ." CR EMIT SPACE SPACES TYPE U.'> < PARAM NAME=block65.9 VALUE="~: OUTPUT-TEST"> < PARAM NAME=block65.10 VALUE='~ ." YOU SHOULD SEE 0-9 SEPARATED BY A SPACE:" CR'> < PARAM NAME=block65.11 VALUE="~ 9 1+ 0 DO I . LOOP CR"> < PARAM NAME=block65.12 VALUE='~ ." YOU SHOULD SEE 0-9 (WITH NO SPACES):" CR'> < PARAM NAME=block65.13 VALUE="~ [CHAR] 9 1+ [CHAR] 0 DO I 0 SPACES EMIT LOOP CR"> < PARAM NAME=block65.14 VALUE='~ ." YOU SHOULD SEE A-G SEPARATED BY A SPACE:" CR'> < PARAM NAME=block65.15 VALUE="~ [CHAR] G 1+ [CHAR] A DO I EMIT SPACE LOOP CR"> < PARAM NAME=block66 VALUE=""> < PARAM NAME=block66.0 VALUE='~ ." YOU SHOULD SEE 0-5 SEPARATED BY TWO SPACES:" CR'> < PARAM NAME=block66.1 VALUE="~ 5 1+ 0 DO I [CHAR] 0 + EMIT 2 SPACES LOOP CR"> < PARAM NAME=block66.2 VALUE='~ ." YOU SHOULD SEE TWO SEPARATE LINES:" CR'> < PARAM NAME=block66.3 VALUE='~ S" LINE 1" TYPE CR S" LINE 2" TYPE CR'> < PARAM NAME=block66.4 VALUE='~ ." YOU SHOULD SEE THE NUMBER RANGES OF SIGNED AND"'> < PARAM NAME=block66.5 VALUE='~ ." UNSIGNED NUMBERS:" CR'> < PARAM NAME=block66.6 VALUE='~ ." SIGNED: " MIN-INT . MAX-INT . CR'> < PARAM NAME=block66.7 VALUE='~ ." UNSIGNED: " 0 U. MAX-UINT U. CR ;'> < PARAM NAME=block66.9 VALUE="~{ OUTPUT-TEST -> }"> < PARAM NAME=block66.11 VALUE="~\ ----------------------------------------------------------"> < PARAM NAME=block66.12 VALUE="~TESTING INPUT: ACCEPT"> < PARAM NAME=block66.14 VALUE="~CREATE ABUF 80 CHARS ALLOT"> < PARAM NAME=block67 VALUE=""> < PARAM NAME=block67.0 VALUE="~: ACCEPT-TEST"> < PARAM NAME=block67.1 VALUE='~ CR ." PLEASE TYPE UP TO 80 CHARACTERS:" CR'> < PARAM NAME=block67.2 VALUE="~ ABUF 80 ACCEPT"> < PARAM NAME=block67.3 VALUE='~ CR ." RECEIVED: " [CHAR] " EMIT'> < PARAM NAME=block67.4 VALUE='~ ABUF SWAP TYPE [CHAR] " EMIT CR'> < PARAM NAME=block67.5 VALUE="~;"> < PARAM NAME=block67.7 VALUE="~{ ACCEPT-TEST -> }"> < PARAM NAME=block67.9 VALUE="~\ ----------------------------------------------------------"> < PARAM NAME=block67.10 VALUE="~TESTING DICTIONARY SEARCH RULES"> < PARAM NAME=block67.12 VALUE="~{ : GDX 123 ; : GDX GDX 234 ; -> }"> < PARAM NAME=block67.14 VALUE="~{ GDX -> 123 234 }"> < PARAM NAME=block68 VALUE=""> < PARAM NAME=block68.0 VALUE="~DECIMAL CR .( All except ENVIRONMENT? tests completed) \ pshp"> < PARAM NAME=block69 VALUE=""> < PARAM NAME=block69.0 VALUE="~TESTING ENVIRONMENT?"> < PARAM NAME=block69.1 VALUE="~HEX \ pshp"> < PARAM NAME=block69.2 VALUE="~ \ These tests use 1S, IFFLOORED, IFSYM and BITS."> < PARAM NAME=block69.3 VALUE="~ \ The test for CORE assumes that tests for all core"> < PARAM NAME=block69.4 VALUE="~ \ words except QUIT and ABORT have already been"> < PARAM NAME=block69.5 VALUE="~ \ carried out."> < PARAM NAME=block69.6 VALUE="~\ tI \ not a Standard word and no definition provided pshp"> < PARAM NAME=block69.7 VALUE="~ \ Since calls to ENVIRONMENT? are allowed to return"> < PARAM NAME=block69.8 VALUE='~ \ FALSE, indicating "unknown", all these tests for'> < PARAM NAME=block69.9 VALUE="~ \ ENVIRONMENT? follow the same 2-part pattern as used"> < PARAM NAME=block69.10 VALUE="~ \ below in GEN1."> < PARAM NAME=block69.13 VALUE="~\ Testing numeric environment"> < PARAM NAME=block69.15 VALUE="~: GEN1 ( -- Flag )"> < PARAM NAME=block70 VALUE=""> < PARAM NAME=block70.0 VALUE='~ S" MAX-U" ENVIRONMENT? IF'> < PARAM NAME=block70.1 VALUE='~ FFFF \ "unsigned integers shall include 65535"'> < PARAM NAME=block70.2 VALUE="~ 1- SWAP U< \ Check that MAX-U > 65534"> < PARAM NAME=block70.3 VALUE="~ ELSE \ Unknown"> < PARAM NAME=block70.4 VALUE="~
"> < PARAM NAME=block70.5 VALUE="~ THEN ;"> < PARAM NAME=block70.6 VALUE="~{ GEN1 ->
}"> < PARAM NAME=block70.8 VALUE="~: GEN2 ( -- Flag )"> < PARAM NAME=block70.9 VALUE='~ S" MAX-N" ENVIRONMENT? IF'> < PARAM NAME=block70.10 VALUE='~ 7FFF \ "signed integers shall include 32767"'> < PARAM NAME=block70.11 VALUE="~ 1- > \ Check that MAX-N > 32766"> < PARAM NAME=block70.12 VALUE="~ ELSE \ Unknown"> < PARAM NAME=block70.13 VALUE="~
"> < PARAM NAME=block70.14 VALUE="~ THEN ;"> < PARAM NAME=block70.15 VALUE="~{ GEN2 ->
}"> < PARAM NAME=block71 VALUE=""> < PARAM NAME=block71.1 VALUE="~: GEN3 ( -- Flag )"> < PARAM NAME=block71.2 VALUE="~ \ This is a tricky comparison because:"> < PARAM NAME=block71.3 VALUE="~ \ - D- and D< are not in the ANS Core. The"> < PARAM NAME=block71.4 VALUE="~ \ Core has no words for manipulating doubles"> < PARAM NAME=block71.5 VALUE="~ \ except S>D and >NUMBER."> < PARAM NAME=block71.6 VALUE="~ \ - we assume 2's complement but there may be"> < PARAM NAME=block71.7 VALUE="~ \ > 16 bits/cell."> < PARAM NAME=block71.8 VALUE="~ \ Our solution is to use >NUMBER to place the"> < PARAM NAME=block71.9 VALUE="~ \ ANS minimum for MAX-UD on the stack."> < PARAM NAME=block71.10 VALUE='~ S" MAX-UD" ENVIRONMENT? IF'> < PARAM NAME=block71.11 VALUE="~ ( -- lscMAX-UD mscMAX-UD )"> < PARAM NAME=block71.12 VALUE='~ \ "double-cell unsigned integers shall include'> < PARAM NAME=block71.13 VALUE='~ \ 4294967295" (ANSMax-UD).'> < PARAM NAME=block71.14 VALUE='~ S" FFFFFFFF" \ Put ANSMax-UD on the stack.'> < PARAM NAME=block71.15 VALUE="~ 0 S>D 2SWAP >NUMBER"> < PARAM NAME=block72 VALUE=""> < PARAM NAME=block72.0 VALUE="~ 0= >R \ Save
if unconverted chars = 0"> < PARAM NAME=block72.1 VALUE="~ DROP"> < PARAM NAME=block72.2 VALUE="~ >R SWAP R>"> < PARAM NAME=block72.3 VALUE="~ \ -- lscMAX-UD lscANSMax-UD mscMAX-UD mscANSMax-UD"> < PARAM NAME=block72.4 VALUE="~ 1- SWAP U< >R \ Check most significant cells"> < PARAM NAME=block72.5 VALUE="~ 1- SWAP U< \ Check least significant cells"> < PARAM NAME=block72.6 VALUE="~ R> AND"> < PARAM NAME=block72.7 VALUE="~ R> AND"> < PARAM NAME=block72.8 VALUE="~ ELSE"> < PARAM NAME=block72.9 VALUE="~
"> < PARAM NAME=block72.10 VALUE="~ THEN ;"> < PARAM NAME=block72.11 VALUE="~\ { GEN3 ->
} \ F-PC fails this test"> < PARAM NAME=block72.13 VALUE="~: GEN4 ( -- Flag )"> < PARAM NAME=block72.14 VALUE='~ S" MAX-D" ENVIRONMENT? IF'> < PARAM NAME=block72.15 VALUE="~ ( -- lscMAX-D mscMAX-D )"> < PARAM NAME=block73 VALUE=""> < PARAM NAME=block73.0 VALUE='~ \ "double-cell signed integers shall include'> < PARAM NAME=block73.1 VALUE='~ \ 2147483647" (ANSMax-D).'> < PARAM NAME=block73.2 VALUE='~ S" FFFF7FFF" \ Put ANSMax-D on the stack.'> < PARAM NAME=block73.3 VALUE="~ 0 S>D 2SWAP >NUMBER"> < PARAM NAME=block73.4 VALUE="~ 0= >R \ Save
if unconverted chars = 0"> < PARAM NAME=block73.5 VALUE="~ DROP"> < PARAM NAME=block73.6 VALUE="~ >R SWAP R>"> < PARAM NAME=block73.7 VALUE="~ \ -- lscMAX-D lscANSMax-D mscMAX-D mscANSMax-D"> < PARAM NAME=block73.8 VALUE="~ 1- > >R \ Check most significant cells"> < PARAM NAME=block73.9 VALUE="~ 1- SWAP U< \ Check least significant cells"> < PARAM NAME=block73.10 VALUE="~ R> AND"> < PARAM NAME=block73.11 VALUE="~ R> AND"> < PARAM NAME=block73.12 VALUE="~ ELSE"> < PARAM NAME=block73.13 VALUE="~
"> < PARAM NAME=block73.14 VALUE="~ THEN ;"> < PARAM NAME=block73.15 VALUE="~{ GEN4 ->
}"> < PARAM NAME=block74 VALUE=""> < PARAM NAME=block74.1 VALUE="~: GEN5 ( -- Flag )"> < PARAM NAME=block74.2 VALUE='~ S" FLOORED" ENVIRONMENT? IF'> < PARAM NAME=block74.3 VALUE="~ -3 2 / -2 = \ True if floored"> < PARAM NAME=block74.4 VALUE="~ ="> < PARAM NAME=block74.5 VALUE="~ ELSE"> < PARAM NAME=block74.6 VALUE="~
"> < PARAM NAME=block74.7 VALUE="~ THEN ;"> < PARAM NAME=block74.8 VALUE="~{ GEN5 ->
}"> < PARAM NAME=block74.11 VALUE="~\ Testing character environment"> < PARAM NAME=block74.13 VALUE="~: GEN6 ( -- Flag )"> < PARAM NAME=block74.14 VALUE='~ S" MAX-CHAR" ENVIRONMENT? IF'> < PARAM NAME=block74.15 VALUE="~ 7E"> < PARAM NAME=block75 VALUE=""> < PARAM NAME=block75.0 VALUE='~ \ "characters provided .. shall include 32 .. 126"'> < PARAM NAME=block75.1 VALUE="~ 1- SWAP U< \ Check that MAX-CHAR > 125"> < PARAM NAME=block75.2 VALUE="~ ELSE"> < PARAM NAME=block75.3 VALUE="~
"> < PARAM NAME=block75.4 VALUE="~ THEN ;"> < PARAM NAME=block75.5 VALUE="~{ GEN6 ->
}"> < PARAM NAME=block75.7 VALUE="~: GEN7 ( -- Flag )"> < PARAM NAME=block75.8 VALUE='~ S" /COUNTED-STRING" ENVIRONMENT? IF'> < PARAM NAME=block75.9 VALUE="~ FF"> < PARAM NAME=block75.10 VALUE='~ \ "maximum length of a counted string shall be at'> < PARAM NAME=block75.11 VALUE='~ \ least 255"'> < PARAM NAME=block75.12 VALUE="~ 1- SWAP U< \ Check that /COUNTED-STRING > 255"> < PARAM NAME=block75.13 VALUE="~ ELSE"> < PARAM NAME=block75.14 VALUE="~
"> < PARAM NAME=block75.15 VALUE="~ THEN ;"> < PARAM NAME=block76 VALUE=""> < PARAM NAME=block76.0 VALUE="~{ GEN7 ->
}"> < PARAM NAME=block76.2 VALUE="~: GEN8 ( -- Flag )"> < PARAM NAME=block76.3 VALUE='~ S" /PAD" ENVIRONMENT? IF'> < PARAM NAME=block76.4 VALUE="~ [ DECIMAL ] \ pshp"> < PARAM NAME=block76.5 VALUE='~ 84 \ "The size of the scratch area whose address is'> < PARAM NAME=block76.6 VALUE='~ \ returned by PAD shall be at least 84 characters."'> < PARAM NAME=block76.7 VALUE="~ [ HEX ] \ pshp"> < PARAM NAME=block76.8 VALUE="~ 1- SWAP U< \ Check that /PAD > 84"> < PARAM NAME=block76.9 VALUE="~ ELSE"> < PARAM NAME=block76.10 VALUE="~
"> < PARAM NAME=block76.11 VALUE="~ THEN ;"> < PARAM NAME=block76.12 VALUE="~{ GEN8 ->
}"> < PARAM NAME=block76.14 VALUE="~: GEN9 ( -- Flag )"> < PARAM NAME=block76.15 VALUE='~ S" /HOLD" ENVIRONMENT? IF'> < PARAM NAME=block77 VALUE=""> < PARAM NAME=block77.0 VALUE="~ COUNT-BITS 1+ 2*"> < PARAM NAME=block77.1 VALUE='~ \ "The size of the pictured numeric output string'> < PARAM NAME=block77.2 VALUE="~ \ buffer shall be at least (2*n)+2 characters, where"> < PARAM NAME=block77.3 VALUE="~ \ n is the number of bits in a cell."> < PARAM NAME=block77.4 VALUE="~ 1- SWAP U< \ Check that /HOLD > (2*n)+2"> < PARAM NAME=block77.5 VALUE="~ ELSE"> < PARAM NAME=block77.6 VALUE="~
"> < PARAM NAME=block77.7 VALUE="~ THEN ;"> < PARAM NAME=block77.8 VALUE="~{ GEN9 ->
}"> < PARAM NAME=block77.11 VALUE="~\ Testing stack environment"> < PARAM NAME=block77.13 VALUE="~: TEST-STACK-CELLS ( MaxDepth -- Flag )"> < PARAM NAME=block77.14 VALUE="~ \ Fill the stack to prove that it can hold"> < PARAM NAME=block77.15 VALUE="~ \ enough. Then empty it again, checking that"> < PARAM NAME=block78 VALUE=""> < PARAM NAME=block78.0 VALUE="~ \ that the values have not been corrupted."> < PARAM NAME=block78.1 VALUE="~ \ We take care to avoid using any words"> < PARAM NAME=block78.2 VALUE="~ \ such as I, LOOP or < which might be defined"> < PARAM NAME=block78.3 VALUE="~ \ as secondaries and add values on the stack"> < PARAM NAME=block78.4 VALUE="~ \ temporarily!"> < PARAM NAME=block78.5 VALUE="~ 1- >R \ Save MaxDepth-1"> < PARAM NAME=block78.6 VALUE="~ BEGIN DEPTH WHILE DROP REPEAT \ Empty the stack."> < PARAM NAME=block78.7 VALUE="~ BEGIN"> < PARAM NAME=block78.8 VALUE="~ R@ WHILE \ Stop at MaxDepth-1 to avoid"> < PARAM NAME=block78.9 VALUE="~ \ overflow by R@"> < PARAM NAME=block78.10 VALUE="~ R> 1- >R"> < PARAM NAME=block78.11 VALUE="~
\ Nearly fill stack with
"> < PARAM NAME=block78.12 VALUE="~ REPEAT"> < PARAM NAME=block78.13 VALUE="~
\ Add another to fill the stack"> < PARAM NAME=block78.14 VALUE="~ AND >R \ Check for corrupted values on stack."> < PARAM NAME=block78.15 VALUE="~ BEGIN"> < PARAM NAME=block79 VALUE=""> < PARAM NAME=block79.0 VALUE="~ R> AND >R \ Check for corrupted values on stack."> < PARAM NAME=block79.1 VALUE="~ DEPTH WHILE"> < PARAM NAME=block79.2 VALUE="~ REPEAT"> < PARAM NAME=block79.3 VALUE="~ R> R> DROP ;"> < PARAM NAME=block79.5 VALUE="~: GEN10 ( -- Flag )"> < PARAM NAME=block79.6 VALUE='~ S" STACK-CELLS" ENVIRONMENT? IF'> < PARAM NAME=block79.7 VALUE="~ TEST-STACK-CELLS"> < PARAM NAME=block79.8 VALUE="~ ELSE"> < PARAM NAME=block79.9 VALUE="~
"> < PARAM NAME=block79.10 VALUE="~ THEN ;"> < PARAM NAME=block79.11 VALUE="~{ GEN10 ->
}"> < PARAM NAME=block79.14 VALUE="~: TEST-RETURN-STACK-CELLS ( MaxDepth -- Flag )"> < PARAM NAME=block79.15 VALUE="~ \ Fill the return stack to prove that it can"> < PARAM NAME=block80 VALUE=""> < PARAM NAME=block80.0 VALUE="~ \ hold enough."> < PARAM NAME=block80.1 VALUE="~ \ Then empty it again, checking whether the"> < PARAM NAME=block80.2 VALUE="~ \ last value pushed onto it is unchanged."> < PARAM NAME=block80.3 VALUE="~ \ Use of secondaries might cause the return"> < PARAM NAME=block80.4 VALUE="~ \ stack to overflow and this test to fail."> < PARAM NAME=block80.5 VALUE="~ \ This possibility is minimised by avoiding"> < PARAM NAME=block80.6 VALUE="~ \ the use of words such as -, which might be"> < PARAM NAME=block80.7 VALUE="~ \ defined as secondaries."> < PARAM NAME=block80.8 VALUE="~ \ If this does cause overflow, the value in"> < PARAM NAME=block80.9 VALUE='~ \ "RETURN-STACK-CELLS" should be reduced until'> < PARAM NAME=block80.10 VALUE="~ \ the test succeeds."> < PARAM NAME=block80.11 VALUE="~ DUP NEGATE ( -- Depth -Depth )"> < PARAM NAME=block80.12 VALUE="~ BEGIN"> < PARAM NAME=block80.13 VALUE="~ DUP WHILE"> < PARAM NAME=block80.14 VALUE="~ DUP >R"> < PARAM NAME=block80.15 VALUE="~ 1 + \ Avoids : 1+ 1 + ;"> < PARAM NAME=block81 VALUE=""> < PARAM NAME=block81.0 VALUE="~ REPEAT"> < PARAM NAME=block81.1 VALUE="~ DROP"> < PARAM NAME=block81.2 VALUE="~ R> \ Save the top of stack for testing later."> < PARAM NAME=block81.3 VALUE="~ SWAP"> < PARAM NAME=block81.4 VALUE="~ BEGIN"> < PARAM NAME=block81.5 VALUE="~ DUP R>"> < PARAM NAME=block81.6 VALUE="~ + WHILE"> < PARAM NAME=block81.7 VALUE="~ REPEAT"> < PARAM NAME=block81.8 VALUE="~ DROP"> < PARAM NAME=block81.9 VALUE="~ -1 = \ Check that the topmost value on the"> < PARAM NAME=block81.10 VALUE="~; \ Return Stack was not corrupted."> < PARAM NAME=block81.12 VALUE="~: GEN11 ( -- Flag )"> < PARAM NAME=block81.13 VALUE='~ S" RETURN-STACK-CELLS" ENVIRONMENT? IF'> < PARAM NAME=block81.14 VALUE="~\ 2 - \ Allow for nesting of GEN11 and"> < PARAM NAME=block81.15 VALUE="~\ \ TEST-RETURN-STACK-CELLS which might"> < PARAM NAME=block82 VALUE=""> < PARAM NAME=block82.0 VALUE="~\ \ add return addresses to the"> < PARAM NAME=block82.1 VALUE="~\ \ return stack."> < PARAM NAME=block82.2 VALUE="~ 3 - \ Allow for nesting GEN11 and"> < PARAM NAME=block82.3 VALUE="~ \ TEST-RETURN-STACK-CELLS"> < PARAM NAME=block82.4 VALUE="~ TEST-RETURN-STACK-CELLS"> < PARAM NAME=block82.5 VALUE="~ ELSE"> < PARAM NAME=block82.6 VALUE="~
"> < PARAM NAME=block82.7 VALUE="~ THEN ;"> < PARAM NAME=block82.8 VALUE="~{ GEN11 ->
}"> < PARAM NAME=block82.11 VALUE="~\ Other environment tests"> < PARAM NAME=block82.13 VALUE="~: GEN12 ( -- Flag )"> < PARAM NAME=block82.14 VALUE='~ S" CORE" ENVIRONMENT?'> < PARAM NAME=block82.15 VALUE="~\ pshp AND IF \ Ie Information is both available and true"> < PARAM NAME=block83 VALUE=""> < PARAM NAME=block83.0 VALUE="~ IF \ pshp"> < PARAM NAME=block83.1 VALUE="~ IF \ pshp"> < PARAM NAME=block83.2 VALUE="~ \ Ie Information is both available and true"> < PARAM NAME=block83.3 VALUE="~
\ We've tested the rest of the core word set"> < PARAM NAME=block83.4 VALUE="~ \ so look up the remaining words ..."> < PARAM NAME=block83.5 VALUE='~ S" BL WORD QUIT FIND SWAP DROP" EVALUATE 0= 0= AND'> < PARAM NAME=block83.6 VALUE='~ S" BL WORD ABORT FIND SWAP DROP" EVALUATE 0= 0= AND'> < PARAM NAME=block83.7 VALUE='~ \ But how to test the dictionary for ABORT"?'> < PARAM NAME=block83.8 VALUE="~ ELSE \ pshp"> < PARAM NAME=block83.9 VALUE="~
\ pshp"> < PARAM NAME=block83.10 VALUE="~ THEN \ pshp"> < PARAM NAME=block83.11 VALUE="~ ELSE"> < PARAM NAME=block83.12 VALUE="~
"> < PARAM NAME=block83.13 VALUE="~ THEN ;"> < PARAM NAME=block83.14 VALUE="~{ GEN12 ->
}"> < PARAM NAME=block84 VALUE=""> < PARAM NAME=block84.0 VALUE='~\ "The name spaces for ENVIRONMENT?'> < PARAM NAME=block84.1 VALUE='~\ and definitions are disjoint."'> < PARAM NAME=block84.2 VALUE="~\ We therefore define a word which"> < PARAM NAME=block84.3 VALUE="~\ might be passed as a string and"> < PARAM NAME=block84.4 VALUE="~\ check that the operation of "> < PARAM NAME=block84.5 VALUE="~\ ENVIRONMENT? is unchanged."> < PARAM NAME=block84.7 VALUE="~: CORE ;"> < PARAM NAME=block84.8 VALUE="~{ GEN12 ->
}"> < PARAM NAME=block84.10 VALUE="~CR .( ANS Testing completed )"> < PARAM NAME=block84.11 VALUE="~DECIMAL \ pshp">