;;; SUMLOOP -- One of the Kernighan and Van Wyk benchmarks.
  
(library (rnrs-benchmarks sumloop)
  (export main)
  (import (rnrs) (rnrs-benchmarks))

  (define sum 0)
  
  (define (tail-rec-aux i n)
    (if (< i n)
        (begin (set! sum (+ sum 1)) (tail-rec-aux (+ i 1) n))
        sum))
  
  (define (tail-rec-loop n)
    (set! sum 0)
    (tail-rec-aux 0 n)
    sum)
  
  (define (do-loop n)
    (set! sum 0)
    (do ((i 0 (+ i 1)))
        ((>= i n) sum)
      (set! sum (+ sum 1))))
  
  (define (main . args)
    (run-benchmark
     "sumloop"
     sumloop-iters
     (lambda (result) (equal? result 100000000))
     (lambda (n) (lambda () (do-loop n)))
     100000000)))