This commit is contained in:
Justin Ethier 2018-10-16 13:22:16 -04:00
parent 94b22440ac
commit 0ac84a6b17
2 changed files with 2061 additions and 3 deletions

1988
tests/experimental/diviter.c Normal file

File diff suppressed because it is too large Load diff

View file

@ -13,9 +13,9 @@
((null? l) a))) ((null? l) a)))
(define (main) (define (main)
(let* ((count 1000000) (let* ((count (read))
(input1 1000) (input1 (read))
(output 500) (output (read))
(s2 (number->string count)) (s2 (number->string count))
(s1 (number->string input1)) (s1 (number->string input1))
(ll (create-n (hide count input1))) (ll (create-n (hide count input1)))
@ -26,3 +26,73 @@
(lambda () (lambda ()
(iterative-div2 ll)) (iterative-div2 ll))
(lambda (result) (equal? (length result) output))))) (lambda (result) (equal? (length result) output)))))
;;; The following code is appended to all benchmarks.
;;; Given an integer and an object, returns the object
;;; without making it too easy for compilers to tell
;;; the object will be returned.
(define (hide r x)
(call-with-values
(lambda ()
(values (vector values (lambda (x) x))
(if (< r 100) 0 1)))
(lambda (v i)
((vector-ref v i) x))))
;;; Given the name of a benchmark,
;;; the number of times it should be executed,
;;; a thunk that runs the benchmark once,
;;; and a unary predicate that is true of the
;;; correct results the thunk may return,
;;; runs the benchmark for the number of specified iterations.
(define (run-r7rs-benchmark name count thunk ok?)
;; Rounds to thousandths.
(define (rounded x)
(/ (round (* 1000 x)) 1000))
(display "Running ")
(display name)
(newline)
(flush-output-port (current-output-port))
(let* ((j/s (jiffies-per-second))
(t0 (current-second))
(j0 (current-jiffy)))
(let loop ((i 0)
(result #f))
(cond ((< i count)
(loop (+ i 1) (thunk)))
((ok? result)
(let* ((j1 (current-jiffy))
(t1 (current-second))
(jifs (- j1 j0))
(secs (inexact (/ jifs j/s)))
(secs2 (rounded (- t1 t0))))
(display "Elapsed time: ")
(write secs)
(display " seconds (")
(write secs2)
(display ") for ")
(display name)
(newline)
(display "+!CSVLINE!+")
(display (this-scheme-implementation-name))
(display ",")
(display name)
(display ",")
(display secs)
(newline)
(flush-output-port (current-output-port)))
result)
(else
(display "ERROR: returned incorrect result: ")
(write result)
(newline)
(flush-output-port (current-output-port))
result)))))
(define (this-scheme-implementation-name)
(string-append "cyclone-" (Cyc-version)))
(main)