( Benchmark 1 - Copyright Marcel Hendrix )
: X 30000 0 do loop ;
: XX 5 0 do X loop ;
( Benchmark 3 - Copyright Marcel Hendrix )
: N: ;
: Z 30000 0 do N: N: N: N: N: N: loop ;
: ZZ 5 0 do Z loop ;
( Benchmark 4 - Copyright Marcel Hendrix )
: W1 ;
: W2 W1 ;
: W3 W2 ;
: W4 W3 ;
: W5 W4 ;
: W6 W5 ;
: W 30000 0 do W6 loop ;
: WW 5 0 do W loop ;
( Benchmark 5 - Copyright Marcel Hendrix )
variable LOC
10 constant TEN
: NULL TEN dup LOC swap over ! @ + drop ;
: Y 30000 0 do NULL loop ;
: YY 5 0 do Z loop ;
( Benchmark 6 - Copyright Marcel Hendrix )
8190 constant size
size string flags
: do-prime
flags size 1 fill
0 size 0 do flags i +
c@ if i dup + 3 +
dup i +
begin dup size <
while 0 over flags + c!
over +
repeat
drop drop 1+
then
loop ( count) drop ;
: rr 10 0 do do-prime loop ;
( Execute tests )
[needs lib/timer.4th]
[needs lib/ansfacil.4th]
: do-test cr ." *** Benchmark from FD March/April 1992, Guy Kelly *** "
cr ." Empty : " timer-reset XX .elapsed
cr ." Thread : -- "
cr ." Nest1 : " timer-reset ZZ .elapsed
cr ." Nest2 : " timer-reset WW .elapsed
cr ." Prims : " timer-reset YY .elapsed
cr ." Sieve : " timer-reset RR .elapsed
cr ." Loads : -- "
cr cr 5000 ms
;
do-test \ execute Marcel Hendrix tests
variable lines \ prime program from Forth
: test mod 0= ;
: pprint dup 5 .r lines @ dup 0= if cr drop 4 else 1- then lines ! ;
: ptest dup 2/ 2
do dup i test
if 0 leave then
1 +loop
dup if pprint else drop then drop ;
: prime cr 4 lines ! do i ptest 1 +loop cr ;
: .4th# base @ hex 4th# <# # # [char] . hold # #> type base ! ;
: chart \ shows all previous tests
." Platform OS Forth Compiler Cell Time" cr
." -------- -- ----- -------- ------ ----" cr
." Spectrum 48K ZX-BASIC Artic Forth Z80 assembler 16 bit 53:50 mins" cr
." Sun Sp Ultra1 Solaris 4tH V3.2 GCC 32 bit 0:18 mins" cr
." RS/6000 250 AIX V3 4tH V3.2 XL C V1.3 32 bit 0:30 mins" cr
." P5/600 DOS V5 4tH V3.3 DJGPP V2.72 32 bit 0:05 mins" cr
." P5/600 Win 3.1 4tH V3.3 Turbo C++ V3.0 32 bit 0:06 mins" cr
." P5/166 DOS V5 4tH V3.2 DJGPP V2.72 32 bit 0:09 mins" cr
." P5/166 Win 3.1 4tH V3.2 Turbo C++ V3.0 32 bit 0:21 mins" cr
." 486/33 DOS V5 4tH V3.2 Turbo C V2.0 32 bit 2:45 mins" cr
." 486/33 DOS V5 4tH V3.2 DJGPP V2.72 32 bit 1:11 mins" cr
." 486/33 DOS V5 FPC V3.55 8086 assembler 16 bit 0:29 mins" cr
." 486/33 DOS V5 PFE V09.12 Unknown 32 bit 0:45 mins" cr
." 486/33 DOS V5 CForth Turbo C V2.0 16 bit 11:26 mins" cr
." 486/66 DOS V5 NIB Forth Unknown 16 bit 10:55 mins" cr
." 486/66 Win V3.1 AtLast Turbo C++ V3.0 16 bit 5:08 mins" cr
." 486/66 Win V3.1 4tH V3.2 Turbo C++ V3.0 32 bit 1:23 mins" cr
." 486/66 DOS V5 CForth Turbo C V2.0 16 bit 5:45 mins" cr
." 486/66 DOS V5 4tH V3.2 Turbo C V2.0 32 bit 1:22 mins" cr
." THIS COMPUTER Unknown 4tH V" .4th# ." Unknown 32 bit "
;
: do-sieve \ execute the sieve test
timer-reset 9999 1 prime cr
chart .elapsed cr cr
;
:noname <# # 6 base ! # decimal 58 hold # #> type ." mins" ; is timer-stop
do-sieve
|