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/14 01:47] 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\\ 260313 | PASS | '': #WORDS 0 $030003 P@ BEGIN DUP WHILE SWAP 1 + SWAP P@ REPEAT DROP . ." words" CR ;'' | Shows 72 words (see WORDS, which shows 71). |+| 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 53: 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.1773452869.txt.gz · Last modified: by appledog

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki