REBOL[ Title: "Benchmark program" Author: "Ladislav Mecir" Date: 23-Dec-2008/16:23:27+1:00 File: %bench.r Purpose: { Runs several benchmarks } ] ;** Expected results: ;** For the Eratosthenes Sieve Prime with size 8190: 1899 primes ;** For Four-Banger test: 1.000000000e1 (10.0) ;** For integral of sine(x): 1.000000000e0 (1.0) ;** For integral of exp(x): 1.718281828e0 (e-1) #include %timblk.r #include %sieve.r #include %fourbang.r #include %gqf2.r #include %msort.r #include %enum.r #include %autoround.r random/seed 1 use [computer precision os size flags t count result sinerad icount serf compare mcount] [ ;Announce yourself prin "Benchmark run " prin now prin ". Rebol " print Rebol/version prin "Computer: " computer: input prin "OS: " os: input precision: make decimal! ask "Precision: " prin "Empty block: " t: time-block [] precision print rejoin [autoround 1 / t 3 "Hz"] size: 8191 prin rejoin ["Eratosthenes Sieve Prime (size: " size "): "] t: time-block [flags: sieve size] precision ;Report results count: 0 foreach flag flags [ if flag [count: count + 1] ] print rejoin [ autoround 1 / t 3 "Hz, result: " count " primes" ] prin "Four-Banger test (+,-,*,/): " t: time-block [result: fourbang] precision print rejoin [ autoround 1 / t 3 "Hz, result: " result ] icount: 10000 prin rejoin ["Integral (icount: " icount ") of sin(x) 0<=x<=pi/2: "] sinerad: func [x] [sine (x * 180 / pi)] t: time-block [result: gqf2 :sinerad 0 (pi / 2) icount] precision print rejoin [ autoround 1 / t 3 "Hz, result: " result ] prin rejoin ["Integral (icount: " icount ") of exp(x) 0<=x<=1: "] t: time-block [result: gqf2 :exp 0 1 icount] precision print rejoin [ autoround 1 / t 3 "Hz, result: " result ] mcount: 500 prin rejoin [ "Merge Sort (" mcount " elements): " ] ; compare two elements compare: func [a b] [ return a <= b ] b: random enum 1 mcount t: time-block [msort copy b :compare] precision print rejoin [ autoround 1 / t 3 "Hz" ] ]