;;; SUM1 -- One of the Kernighan and Van Wyk benchmarks. (library (rnrs-benchmarks sum1) (export main) (import (rnrs) (rnrs arithmetic flonums) (rnrs-benchmarks)) (define inport #f) (define (sumport port sum-so-far) (let ((x (read port))) (if (eof-object? x) sum-so-far (sumport port (fl+ x sum-so-far))))) (define (sum port) (sumport port 0.0)) (define (go) (set! inport (open-input-file "rn100")) (let ((result (sum inport))) (close-input-port inport) result)) (define (main . args) (run-benchmark "sum1" sum1-iters (lambda (result) (display result) (newline) (and (fl>=? result 15794.974999999) (fl<=? result 15794.975000001))) (lambda () (lambda () (go))))))