User Tools

Site Tools


sd:star_forth_test_suite

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
sd:star_forth_test_suite [2026/03/13 08:16] appledogsd:star_forth_test_suite [2026/03/14 13:20] (current) appledog
Line 17: Line 17:
 | 1.0\\ 260313 | PASS | '': SIMPLE 500000 0 DO LOOP ;''\\ ''SIMPLE'' | ~6 seconds (170,000 w/s) at 4MHz | | 1.0\\ 260313 | PASS | '': SIMPLE 500000 0 DO LOOP ;''\\ ''SIMPLE'' | ~6 seconds (170,000 w/s) at 4MHz |
 | 1.0\\ 260313 | PASS | '': BENCH 500000 0 DO I DUP * DROP LOOP ;''\\ ''BENCH'' | 22 seconds (140,000 w/s) at 4Mhz | | 1.0\\ 260313 | PASS | '': BENCH 500000 0 DO I DUP * DROP LOOP ;''\\ ''BENCH'' | 22 seconds (140,000 w/s) at 4Mhz |
 +| 1.0\\ 260314 | PASS | '': #WORDS 0 $030003 P@ BEGIN DUP WHILE SWAP 1 + SWAP P@ REPEAT DROP . ." words" CR ;'' | Shows 73 words (see WORDS, which shows 72). |
 +
 +Note that AS-IS, SD/FORTH 1.0 is not FORTH-79 compliant. That's fine, the following self-hosted words act as a sort of test suite, and also bring us up squarely into FORTH-79.
 +
 +<codify forth>
 +    : 1+ 1 + ;
 +    : 1- 1 - ;
 +    : 2+ 2 + ;
 +    : 2- 2 - ;
 +    : 0= 0 = ;
 +    : 0< 0 < ;
 +    : 0> 0 > ;
 +    : NEGATE 0 SWAP - ;
 +    : ABS DUP 0< IF NEGATE THEN ;
 +    : NIP SWAP DROP ;
 +    : TUCK SWAP OVER ;
 +    : ?DUP DUP IF DUP THEN ;
 +    : ROT >R SWAP R> SWAP ;
 +    : 2DUP OVER OVER ;
 +    : MAX 2DUP < IF SWAP THEN DROP ;
 +    : MIN 2DUP > IF SWAP THEN DROP ;
 +    : SPACE 32 EMIT ;
 +    : SPACES 0 DO SPACE LOOP ;
 +    : /MOD 2DUP MOD >R / R> SWAP ;
 +    : +! DUP @ ROT + SWAP ! ;
 +    : TYPE 0 DO DUP C@ EMIT 1 + LOOP DROP ;
 +    : TYPE ( addr len -- ) 0 DO DUP C@ EMIT 1 + LOOP DROP ;
 +    : MOVE CMOVE ;
 +</codify>
 +
 +== FORTH-79 TESTS
 +You could also try this; if you see all PASS and then ABC and then A on the next line underneath the space beside the C, it works!
 +
 +<codify Forth>
 +: TEST= = IF ." PASS " ELSE ." FAIL " THEN ;
 +
 +( Arithmetic )
 +5 1+ 6 TEST=
 +5 1- 4 TEST=
 +5 2+ 7 TEST=
 +5 2- 3 TEST=
 +5 NEGATE -5 TEST=
 +-7 NEGATE 7 TEST=
 +-5 ABS 5 TEST=
 +5 ABS 5 TEST=
 +
 +( Comparisons )
 +0 0= 1 TEST=
 +5 0= 0 TEST=
 +-1 0< 1 TEST=
 +5 0< 0 TEST=
 +5 0> 1 TEST=
 +-1 0> 0 TEST=
 +
 +( Stack ops )
 +1 2 NIP 2 TEST=
 +1 2 TUCK 2 TEST= DROP DROP
 +1 2 TUCK DROP 1 TEST= DROP
 +1 2 TUCK DROP DROP 2 TEST=
 +5 ?DUP + 10 TEST=
 +0 ?DUP 0 TEST=
 +1 2 3 ROT 1 TEST= DROP DROP
 +3 4 2DUP + >R + R> + 14 TEST=
 +
 +( Math )
 +7 3 MAX 7 TEST=
 +3 7 MAX 7 TEST=
 +7 3 MIN 3 TEST=
 +3 7 MIN 3 TEST=
 +7 3 /MOD SWAP 1 TEST=
 +7 3 /MOD 2 TEST=
 +DROP
 +
 +( Variable and +! )
 +VARIABLE TV
 +10 TV !
 +3 TV +!
 +TV @ 13 TEST=
 +
 +( SPACE and SPACES )
 +65 EMIT 66 EMIT 67 EMIT CR
 +3 SPACES 65 EMIT CR
 +
 +( Bit Shifting Ops )
 +1 0 LSHIFT 1 TEST=
 +1 1 LSHIFT 2 TEST=
 +1 4 LSHIFT 16 TEST=
 +1 8 LSHIFT 256 TEST=
 +$FF 4 LSHIFT $FF0 TEST=
 +16 1 RSHIFT 8 TEST=
 +256 8 RSHIFT 1 TEST=
 +$FF0 4 RSHIFT $FF TEST=
 +1 1 RSHIFT 0 TEST=
 +</codify>
  
 == Benchmarking == Benchmarking
Line 52: Line 146:
 === FIZZBENCH === FIZZBENCH
 <codify Forth> <codify Forth>
 +    : FIZZBUZZ 21 1 DO I 15 MOD 0 = IF ." FizzBuzz" ELSE I 3 MOD
 +          0 = IF ." Fizz" ELSE I 5 MOD
 +          0 = IF ." Buzz" ELSE I . THEN THEN THEN CR LOOP ;
     : FIZZBENCH 0 10000 0     : FIZZBENCH 0 10000 0
         DO I 15 MOD 0 = IF 1 + ELSE         DO I 15 MOD 0 = IF 1 + ELSE
sd/star_forth_test_suite.1773389808.txt.gz · Last modified: by appledog

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki