From c08e3189e219f0c920af2a5264bec312a741bc21 Mon Sep 17 00:00:00 2001 From: Philip Zembrod Date: Thu, 25 Jun 2020 22:13:51 +0200 Subject: [PATCH 1/4] Add make rules and adapt scripts for running building and running tests on Plus4 --- 6502/C64/Makefile | 13 ++++++++++++- 6502/C64/cbmfiles/testbase16 | Bin 0 -> 16441 bytes 6502/C64/emulator/build-testbase16.sh | 16 ++++++++++++++++ 6502/C64/emulator/run-in-vice.sh | 3 ++- 4 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 6502/C64/cbmfiles/testbase16 create mode 100755 6502/C64/emulator/build-testbase16.sh diff --git a/6502/C64/Makefile b/6502/C64/Makefile index c8f9662..876f8bd 100644 --- a/6502/C64/Makefile +++ b/6502/C64/Makefile @@ -22,10 +22,17 @@ run-devenv: emulator/devenv.T64 run-testbase: emulator/testbase.T64 emulator/run-in-vice.sh testbase -run-tests: emulator/testbase.T64 $(test_files_petscii) +test: emulator/testbase.T64 $(test_files_petscii) emulator/run-in-vice.sh testbase \ "include run-vf-tests.fth\n" +run-testbase16: emulator/testbase16.T64 + VICE=xplus4 emulator/run-in-vice.sh testbase16 + +test16: emulator/testbase.T64 $(test_files_petscii) + VICE=xplus4 emulator/run-in-vice.sh testbase16 \ + "include run-vf-tests.fth\n" + # Rules for building Forth binaries on top of the plain vanilla # c64-volksforth83. @@ -39,6 +46,10 @@ cbmfiles/testbase: emulator/run-in-vice.sh emulator/build-testbase.sh \ emulator/c64-volksforth83.T64 disks/file-words.d64 emulator/build-testbase.sh +cbmfiles/testbase16: emulator/run-in-vice.sh emulator/build-testbase.sh \ + emulator/c16-volksforth83.T64 disks/file-words.d64 + emulator/build-testbase16.sh + # Generic T64 tape image rule diff --git a/6502/C64/cbmfiles/testbase16 b/6502/C64/cbmfiles/testbase16 new file mode 100644 index 0000000000000000000000000000000000000000..f2c1e3122b01cfe5b707fe4c820457f9dcfabc50 GIT binary patch literal 16441 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 S`p%pjwa{d4iZr#*F#i`+x|v=8 literal 0 HcmV?d00001 diff --git a/6502/C64/emulator/build-testbase16.sh b/6502/C64/emulator/build-testbase16.sh new file mode 100755 index 0000000..5918d95 --- /dev/null +++ b/6502/C64/emulator/build-testbase16.sh @@ -0,0 +1,16 @@ +#!/bin/bash +set -e + +emulatordir="$(dirname "${BASH_SOURCE[0]}")" +basedir="$(realpath --relative-to="$PWD" "${emulatordir}/..")" + +rm -f "${basedir}/cbmfiles/testbase" + +# load savesystem w/o editor from file-words.d64 block 20 in drive 11. +# load include and dos from file-words.d64 block 10 in drive 11. +# savesystem and then scratch file notdone to exit emulator. +keybuf="3 drive 20 load\n3 drive 10 load\n\ +savesystem testbase16\ndos s0:notdone\n" + +VICE=xplus4 "${emulatordir}/run-in-vice.sh" \ + "c16-volksforth83" "${keybuf}" diff --git a/6502/C64/emulator/run-in-vice.sh b/6502/C64/emulator/run-in-vice.sh index 9ee6192..09a05d5 100755 --- a/6502/C64/emulator/run-in-vice.sh +++ b/6502/C64/emulator/run-in-vice.sh @@ -1,6 +1,7 @@ #!/bin/bash set -e +test -n "$VICE" || VICE=x64 emulatordir="$(realpath --relative-to="$PWD" "$(dirname "${BASH_SOURCE[0]}")")" basedir="$(realpath --relative-to="$PWD" "${emulatordir}/..")" @@ -20,7 +21,7 @@ then warp="-warp" fi -x64 \ +"$VICE" \ -virtualdev \ +truedrive \ -drive8type 1541 \ From b88e7db6d2bbf697ca75239544ff98c0112c8bc9 Mon Sep 17 00:00:00 2001 From: Philip Zembrod Date: Thu, 25 Jun 2020 22:19:33 +0200 Subject: [PATCH 2/4] Add coreplustest.fth --- 6502/C64/tests/coreplustest.fth | 305 ++++++++++++++++++++++++++++++++ 1 file changed, 305 insertions(+) create mode 100644 6502/C64/tests/coreplustest.fth diff --git a/6502/C64/tests/coreplustest.fth b/6502/C64/tests/coreplustest.fth new file mode 100644 index 0000000..d47e2b2 --- /dev/null +++ b/6502/C64/tests/coreplustest.fth @@ -0,0 +1,305 @@ +\ Additional tests on the the ANS Forth Core word set + +\ This program was written by Gerry Jackson in 2007, with contributions from +\ others where indicated, and is in the public domain - it can be distributed +\ and/or modified in any way but please retain this notice. + +\ This program is distributed in the hope that it will be useful, +\ but WITHOUT ANY WARRANTY; without even the implied warranty of +\ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +\ The tests are not claimed to be comprehensive or correct + +\ ------------------------------------------------------------------------------ +\ The tests are based on John Hayes test program for the core word set +\ +\ This file provides some more tests on Core words where the original Hayes +\ tests are thought to be incomplete +\ +\ Words tested in this file are: +\ DO I +LOOP RECURSE ELSE >IN IMMEDIATE FIND IF...BEGIN...REPEAT ALLOT DOES> +\ and +\ Parsing behaviour +\ Number prefixes # $ % and 'A' character input +\ Definition names +\ ------------------------------------------------------------------------------ +\ Assumptions and dependencies: +\ - tester.fr or ttester.fs has been loaded prior to this file +\ - core.fr has been loaded so that constants MAX-INT, MIN-INT and +\ MAX-UINT are defined +\ ------------------------------------------------------------------------------ + +DECIMAL + +TESTING DO +LOOP with run-time increment, negative increment, infinite loop +\ Contributed by Reinhold Straub + +VARIABLE ITERATIONS +VARIABLE INCREMENT +: GD7 ( LIMIT START INCREMENT -- ) + INCREMENT ! + 0 ITERATIONS ! + DO + 1 ITERATIONS +! + I + ITERATIONS @ 6 = IF LEAVE THEN + INCREMENT @ + +LOOP ITERATIONS @ +; + +T{ 4 4 -1 GD7 -> 4 1 }T +T{ 1 4 -1 GD7 -> 4 3 2 1 4 }T +T{ 4 1 -1 GD7 -> 1 0 -1 -2 -3 -4 6 }T +T{ 4 1 0 GD7 -> 1 1 1 1 1 1 6 }T +T{ 0 0 0 GD7 -> 0 0 0 0 0 0 6 }T +T{ 1 4 0 GD7 -> 4 4 4 4 4 4 6 }T +T{ 1 4 1 GD7 -> 4 5 6 7 8 9 6 }T +T{ 4 1 1 GD7 -> 1 2 3 3 }T +T{ 4 4 1 GD7 -> 4 5 6 7 8 9 6 }T +T{ 2 -1 -1 GD7 -> -1 -2 -3 -4 -5 -6 6 }T +T{ -1 2 -1 GD7 -> 2 1 0 -1 4 }T +T{ 2 -1 0 GD7 -> -1 -1 -1 -1 -1 -1 6 }T +T{ -1 2 0 GD7 -> 2 2 2 2 2 2 6 }T +T{ -1 2 1 GD7 -> 2 3 4 5 6 7 6 }T +T{ 2 -1 1 GD7 -> -1 0 1 3 }T +T{ -20 30 -10 GD7 -> 30 20 10 0 -10 -20 6 }T +T{ -20 31 -10 GD7 -> 31 21 11 1 -9 -19 6 }T +T{ -20 29 -10 GD7 -> 29 19 9 -1 -11 5 }T + +\ ------------------------------------------------------------------------------ +TESTING DO +LOOP with large and small increments + +\ Contributed by Andrew Haley + +MAX-UINT 8 RSHIFT 1+ CONSTANT USTEP +USTEP NEGATE CONSTANT -USTEP +MAX-INT 7 RSHIFT 1+ CONSTANT STEP +STEP NEGATE CONSTANT -STEP + +VARIABLE BUMP + +T{ : GD8 BUMP ! DO 1+ BUMP @ +LOOP ; -> }T + +T{ 0 MAX-UINT 0 USTEP GD8 -> 256 }T +T{ 0 0 MAX-UINT -USTEP GD8 -> 256 }T + +T{ 0 MAX-INT MIN-INT STEP GD8 -> 256 }T +T{ 0 MIN-INT MAX-INT -STEP GD8 -> 256 }T + +\ Two's complement arithmetic, wraps around modulo wordsize +\ Only tested if the Forth system does wrap around, use of conditional +\ compilation deliberately avoided + +MAX-INT 1+ MIN-INT = CONSTANT +WRAP? +MIN-INT 1- MAX-INT = CONSTANT -WRAP? +MAX-UINT 1+ 0= CONSTANT +UWRAP? +0 1- MAX-UINT = CONSTANT -UWRAP? + +: GD9 ( n limit start step f result -- ) + >R IF GD8 ELSE 2DROP 2DROP R@ THEN -> R> }T +; + +T{ 0 0 0 USTEP +UWRAP? 256 GD9 +T{ 0 0 0 -USTEP -UWRAP? 1 GD9 +T{ 0 MIN-INT MAX-INT STEP +WRAP? 1 GD9 +T{ 0 MAX-INT MIN-INT -STEP -WRAP? 1 GD9 + +\ ------------------------------------------------------------------------------ +TESTING DO +LOOP with maximum and minimum increments + +: (-MI) MAX-INT DUP NEGATE + 0= IF MAX-INT NEGATE ELSE -32767 THEN ; +(-MI) CONSTANT -MAX-INT + +T{ 0 1 0 MAX-INT GD8 -> 1 }T +T{ 0 -MAX-INT NEGATE -MAX-INT OVER GD8 -> 2 }T + +T{ 0 MAX-INT 0 MAX-INT GD8 -> 1 }T +T{ 0 MAX-INT 1 MAX-INT GD8 -> 1 }T +T{ 0 MAX-INT -1 MAX-INT GD8 -> 2 }T +T{ 0 MAX-INT DUP 1- MAX-INT GD8 -> 1 }T + +T{ 0 MIN-INT 1+ 0 MIN-INT GD8 -> 1 }T +T{ 0 MIN-INT 1+ -1 MIN-INT GD8 -> 1 }T +T{ 0 MIN-INT 1+ 1 MIN-INT GD8 -> 2 }T +T{ 0 MIN-INT 1+ DUP MIN-INT GD8 -> 1 }T + +\ ------------------------------------------------------------------------------ +\ TESTING +LOOP setting I to an arbitrary value + +\ The specification for +LOOP permits the loop index I to be set to any value +\ including a value outside the range given to the corresponding DO. + +\ SET-I is a helper to set I in a DO ... +LOOP to a given value +\ n2 is the value of I in a DO ... +LOOP +\ n3 is a test value +\ If n2=n3 then return n1-n2 else return 1 +: SET-I ( n1 n2 n3 -- n1-n2 | 1 ) + OVER = IF - ELSE 2DROP 1 THEN +; + +: -SET-I ( n1 n2 n3 -- n1-n2 | -1 ) + SET-I DUP 1 = IF NEGATE THEN +; + +: PL1 20 1 DO I 18 I 3 SET-I +LOOP ; +T{ PL1 -> 1 2 3 18 19 }T +: PL2 20 1 DO I 20 I 2 SET-I +LOOP ; +T{ PL2 -> 1 2 }T +: PL3 20 5 DO I 19 I 2 SET-I DUP 1 = IF DROP 0 I 6 SET-I THEN +LOOP ; +T{ PL3 -> 5 6 0 1 2 19 }T +: PL4 20 1 DO I MAX-INT I 4 SET-I +LOOP ; +T{ PL4 -> 1 2 3 4 }T +: PL5 -20 -1 DO I -19 I -3 -SET-I +LOOP ; +T{ PL5 -> -1 -2 -3 -19 -20 }T +: PL6 -20 -1 DO I -21 I -4 -SET-I +LOOP ; +T{ PL6 -> -1 -2 -3 -4 }T +: PL7 -20 -1 DO I MIN-INT I -5 -SET-I +LOOP ; +T{ PL7 -> -1 -2 -3 -4 -5 }T +: PL8 -20 -5 DO I -20 I -2 -SET-I DUP -1 = IF DROP 0 I -6 -SET-I THEN +LOOP ; +T{ PL8 -> -5 -6 0 -1 -2 -20 }T + +\ ------------------------------------------------------------------------------ +TESTING multiple RECURSEs in one colon definition + +: ACK ( m n -- u ) \ Ackermann function, from Rosetta Code + OVER 0= IF NIP 1+ EXIT THEN \ ack(0, n) = n+1 + SWAP 1- SWAP ( -- m-1 n ) + DUP 0= IF 1+ RECURSE EXIT THEN \ ack(m, 0) = ack(m-1, 1) + 1- OVER 1+ SWAP RECURSE RECURSE \ ack(m, n) = ack(m-1, ack(m,n-1)) +; + +T{ 0 0 ACK -> 1 }T +T{ 3 0 ACK -> 5 }T +T{ 2 4 ACK -> 11 }T + +\ ------------------------------------------------------------------------------ +TESTING multiple ELSE's in an IF statement +\ Discussed on comp.lang.forth and accepted as valid ANS Forth + +: MELSE IF 1 ELSE 2 ELSE 3 ELSE 4 ELSE 5 THEN ; +T{ 0 MELSE -> 2 4 }T +T{ -1 MELSE -> 1 3 5 }T + +\ ------------------------------------------------------------------------------ +TESTING manipulation of >IN in interpreter mode + +T{ 12345 DEPTH OVER 9 < 34 AND + 3 + >IN ! -> 12345 2345 345 45 5 }T +T{ 14145 8115 ?DUP 0= 34 AND >IN +! TUCK MOD 14 >IN ! GCD CALCULATION -> 15 }T + +\ ------------------------------------------------------------------------------ +TESTING IMMEDIATE with CONSTANT VARIABLE and CREATE [ ... DOES> ] + +T{ 123 CONSTANT IW1 IMMEDIATE IW1 -> 123 }T +T{ : IW2 IW1 LITERAL ; IW2 -> 123 }T +T{ VARIABLE IW3 IMMEDIATE 234 IW3 ! IW3 @ -> 234 }T +T{ : IW4 IW3 [ @ ] LITERAL ; IW4 -> 234 }T +T{ :NONAME [ 345 ] IW3 [ ! ] ; DROP IW3 @ -> 345 }T +T{ CREATE IW5 456 , IMMEDIATE -> }T +T{ :NONAME IW5 [ @ IW3 ! ] ; DROP IW3 @ -> 456 }T +T{ : IW6 CREATE , IMMEDIATE DOES> @ 1+ ; -> }T +T{ 111 IW6 IW7 IW7 -> 112 }T +T{ : IW8 IW7 LITERAL 1+ ; IW8 -> 113 }T +T{ : IW9 CREATE , DOES> @ 2 + IMMEDIATE ; -> }T +: FIND-IW BL WORD FIND NIP ; ( -- 0 | 1 | -1 ) +T{ 222 IW9 IW10 FIND-IW IW10 -> -1 }T \ IW10 is not immediate +T{ IW10 FIND-IW IW10 -> 224 1 }T \ IW10 becomes immediate + +\ ------------------------------------------------------------------------------ +TESTING that IMMEDIATE doesn't toggle a flag + +VARIABLE IT1 0 IT1 ! +: IT2 1234 IT1 ! ; IMMEDIATE IMMEDIATE +T{ : IT3 IT2 ; IT1 @ -> 1234 }T + +\ ------------------------------------------------------------------------------ +TESTING parsing behaviour of S" ." and ( +\ which should parse to just beyond the terminating character no space needed + +T{ : GC5 S" A string"2DROP ; GC5 -> }T +T{ ( A comment)1234 -> 1234 }T +T{ : PB1 CR ." You should see 2345: "." 2345"( A comment) CR ; PB1 -> }T + +\ ------------------------------------------------------------------------------ +TESTING number prefixes # $ % and 'c' character input +\ Adapted from the Forth 200X Draft 14.5 document + +VARIABLE OLD-BASE +DECIMAL BASE @ OLD-BASE ! +T{ #1289 -> 1289 }T +T{ #-1289 -> -1289 }T +T{ $12eF -> 4847 }T +T{ $-12eF -> -4847 }T +T{ %10010110 -> 150 }T +T{ %-10010110 -> -150 }T +T{ 'z' -> 122 }T +T{ 'Z' -> 90 }T +\ Check BASE is unchanged +T{ BASE @ OLD-BASE @ = -> }T + +\ Repeat in Hex mode +16 OLD-BASE ! 16 BASE ! +T{ #1289 -> 509 }T +T{ #-1289 -> -509 }T +T{ $12eF -> 12EF }T +T{ $-12eF -> -12EF }T +T{ %10010110 -> 96 }T +T{ %-10010110 -> -96 }T +T{ 'z' -> 7a }T +T{ 'Z' -> 5a }T +\ Check BASE is unchanged +T{ BASE @ OLD-BASE @ = -> }T \ 2 + +DECIMAL +\ Check number prefixes in compile mode +T{ : nmp #8327 $-2cbe %011010111 ''' ; nmp -> 8327 -11454 215 39 }T + +\ ------------------------------------------------------------------------------ +TESTING definition names +\ should support {1..31} graphical characters +: !"#$%&'()*+,-./0123456789:;<=>? 1 ; +T{ !"#$%&'()*+,-./0123456789:;<=>? -> 1 }T +: @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^ 2 ; +T{ @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^ -> 2 }T +: _`abcdefghijklmnopqrstuvwxyz{|} 3 ; +T{ _`abcdefghijklmnopqrstuvwxyz{|} -> 3 }T +: _`abcdefghijklmnopqrstuvwxyz{|~ 4 ; \ Last character different +T{ _`abcdefghijklmnopqrstuvwxyz{|~ -> 4 }T +T{ _`abcdefghijklmnopqrstuvwxyz{|} -> 3 }T + +\ ------------------------------------------------------------------------------ +TESTING FIND with a zero length string and a non-existent word + +CREATE EMPTYSTRING 0 C, +: EMPTYSTRING-FIND-CHECK ( c-addr 0 | xt 1 | xt -1 -- t|f ) + DUP IF ." FIND returns a TRUE value for an empty string!" CR THEN + 0= SWAP EMPTYSTRING = = ; +T{ EMPTYSTRING FIND EMPTYSTRING-FIND-CHECK -> }T + +CREATE NON-EXISTENT-WORD \ Same as in exceptiontest.fth + 15 C, CHAR $ C, CHAR $ C, CHAR Q C, CHAR W C, CHAR E C, CHAR Q C, + CHAR W C, CHAR E C, CHAR Q C, CHAR W C, CHAR E C, CHAR R C, CHAR T C, + CHAR $ C, CHAR $ C, +T{ NON-EXISTENT-WORD FIND -> NON-EXISTENT-WORD 0 }T + +\ ------------------------------------------------------------------------------ +TESTING IF ... BEGIN ... REPEAT (unstructured) + +T{ : UNS1 DUP 0 > IF 9 SWAP BEGIN 1+ DUP 3 > IF EXIT THEN REPEAT ; -> }T +T{ -6 UNS1 -> -6 }T +T{ 1 UNS1 -> 9 4 }T + +\ ------------------------------------------------------------------------------ +TESTING DOES> doesn't cause a problem with a CREATEd address + +: MAKE-2CONST DOES> 2@ ; +T{ CREATE 2K 3 , 2K , MAKE-2CONST 2K -> ' 2K >BODY 3 }T + +\ ------------------------------------------------------------------------------ +TESTING ALLOT ( n -- ) where n <= 0 + +T{ HERE 5 ALLOT -5 ALLOT HERE = -> }T +T{ HERE 0 ALLOT HERE = -> }T + +\ ------------------------------------------------------------------------------ + +CR .( End of additional Core tests) CR From 461116744c722e70f8fcb2194c7d299f49e5076a Mon Sep 17 00:00:00 2001 From: Philip Zembrod Date: Thu, 25 Jun 2020 22:45:17 +0200 Subject: [PATCH 3/4] Make coreplustest.fth pass on VolksForth --- 6502/C64/tests/ans-shim.fth | 4 +++ 6502/C64/tests/coreplustest.fth | 43 +++++++++++++++++---------------- 6502/C64/tests/run-vf-tests.fth | 2 ++ 3 files changed, 28 insertions(+), 21 deletions(-) diff --git a/6502/C64/tests/ans-shim.fth b/6502/C64/tests/ans-shim.fth index 19018ee..8dceb75 100644 --- a/6502/C64/tests/ans-shim.fth +++ b/6502/C64/tests/ans-shim.fth @@ -43,3 +43,7 @@ >r count digit? WHILE accumulate r> 1- REPEAT 1- r> ; : accept expect span @ ; + +: tuck under ; + +: :noname here ['] tuck @ , 0 ] ; diff --git a/6502/C64/tests/coreplustest.fth b/6502/C64/tests/coreplustest.fth index d47e2b2..82b1be2 100644 --- a/6502/C64/tests/coreplustest.fth +++ b/6502/C64/tests/coreplustest.fth @@ -173,12 +173,12 @@ T{ 3 0 ACK -> 5 }T T{ 2 4 ACK -> 11 }T \ ------------------------------------------------------------------------------ -TESTING multiple ELSE's in an IF statement +\vf TESTING multiple ELSE's in an IF statement \ Discussed on comp.lang.forth and accepted as valid ANS Forth -: MELSE IF 1 ELSE 2 ELSE 3 ELSE 4 ELSE 5 THEN ; -T{ 0 MELSE -> 2 4 }T -T{ -1 MELSE -> 1 3 5 }T +\vf : MELSE IF 1 ELSE 2 ELSE 3 ELSE 4 ELSE 5 THEN ; +\vf T{ 0 MELSE -> 2 4 }T +\vf T{ -1 MELSE -> 1 3 5 }T \ ------------------------------------------------------------------------------ TESTING manipulation of >IN in interpreter mode @@ -225,33 +225,34 @@ TESTING number prefixes # $ % and 'c' character input VARIABLE OLD-BASE DECIMAL BASE @ OLD-BASE ! -T{ #1289 -> 1289 }T -T{ #-1289 -> -1289 }T +T{ &1289 -> 1289 }T \ vf: s/#/&/ +T{ -&1289 -> -1289 }T \ vf: s/#-/-&/ T{ $12eF -> 4847 }T -T{ $-12eF -> -4847 }T +T{ -$12eF -> -4847 }T \ vf: s/$-/-$/ T{ %10010110 -> 150 }T -T{ %-10010110 -> -150 }T -T{ 'z' -> 122 }T -T{ 'Z' -> 90 }T +T{ -%10010110 -> -150 }T \ vf: s/%-/-%/ +\vf T{ 'z' -> 122 }T +\vf T{ 'Z' -> 90 }T \ Check BASE is unchanged T{ BASE @ OLD-BASE @ = -> }T \ Repeat in Hex mode 16 OLD-BASE ! 16 BASE ! -T{ #1289 -> 509 }T -T{ #-1289 -> -509 }T +T{ &1289 -> 509 }T \ vf: s/#/&/ +T{ -&1289 -> -509 }T \ vf: s/#/&/ T{ $12eF -> 12EF }T -T{ $-12eF -> -12EF }T +T{ -$12eF -> -12EF }T \ vf: s/$-/-$/ T{ %10010110 -> 96 }T -T{ %-10010110 -> -96 }T -T{ 'z' -> 7a }T -T{ 'Z' -> 5a }T +T{ -%10010110 -> -96 }T \ vf: s/%-/-%/ +\vf T{ 'z' -> 7a }T +\vf T{ 'Z' -> 5a }T \ Check BASE is unchanged T{ BASE @ OLD-BASE @ = -> }T \ 2 DECIMAL \ Check number prefixes in compile mode -T{ : nmp #8327 $-2cbe %011010111 ''' ; nmp -> 8327 -11454 215 39 }T +\ vf: s/#/&/ s/$-/-$/ s/'''/ascii '/ +T{ : nmp &8327 -$2cbe %011010111 ascii ' ; nmp -> 8327 -11454 215 39 }T \ ------------------------------------------------------------------------------ TESTING definition names @@ -282,11 +283,11 @@ CREATE NON-EXISTENT-WORD \ Same as in exceptiontest.fth T{ NON-EXISTENT-WORD FIND -> NON-EXISTENT-WORD 0 }T \ ------------------------------------------------------------------------------ -TESTING IF ... BEGIN ... REPEAT (unstructured) +\vf TESTING IF ... BEGIN ... REPEAT (unstructured) -T{ : UNS1 DUP 0 > IF 9 SWAP BEGIN 1+ DUP 3 > IF EXIT THEN REPEAT ; -> }T -T{ -6 UNS1 -> -6 }T -T{ 1 UNS1 -> 9 4 }T +\vf T{ : UNS1 DUP 0 > IF 9 SWAP BEGIN 1+ DUP 3 > IF EXIT THEN REPEAT ; -> }T +\vf T{ -6 UNS1 -> -6 }T +\vf T{ 1 UNS1 -> 9 4 }T \ ------------------------------------------------------------------------------ TESTING DOES> doesn't cause a problem with a CREATEd address diff --git a/6502/C64/tests/run-vf-tests.fth b/6502/C64/tests/run-vf-tests.fth index 303f061..905c7a4 100644 --- a/6502/C64/tests/run-vf-tests.fth +++ b/6502/C64/tests/run-vf-tests.fth @@ -8,3 +8,5 @@ include tester.fth \ 1 verbose ! include core.fr + +include coreplustest.fth From 4d8b3e1ddc57a2a3d32286e44f0f8bd16b350cda Mon Sep 17 00:00:00 2001 From: Philip Zembrod Date: Thu, 25 Jun 2020 22:51:35 +0200 Subject: [PATCH 4/4] Remove duplicate \vf --- 6502/C64/tests/ans-shim.fth | 2 -- 1 file changed, 2 deletions(-) diff --git a/6502/C64/tests/ans-shim.fth b/6502/C64/tests/ans-shim.fth index 8dceb75..871e600 100644 --- a/6502/C64/tests/ans-shim.fth +++ b/6502/C64/tests/ans-shim.fth @@ -1,6 +1,4 @@ -: \vf [compile] \ ; - : cells 2* ; : s" [compile] " compile count ; immediate