;;; STRING -- One of the Kernighan and Van Wyk benchmarks.
  
(library (rnrs-benchmarks string)
  (export main)
  (import (rnrs) (rnrs r5rs) (rnrs-benchmarks))

  (define s "abcdef")
  
  (define (grow)
    (set! s (string-append "123" s "456" s "789"))
    (set! s (string-append
             (substring s (quotient (string-length s) 2) (string-length s))
             (substring s 0 (+ 1 (quotient (string-length s) 2)))))
    s)
  
  (define (trial n)
    (do ((i 0 (+ i 1)))
        ((> (string-length s) n) (string-length s))
      (grow)))
  
  (define (my-try n)
    (do ((i 0 (+ i 1)))
        ((>= i 10) (string-length s))
      (set! s "abcdef")
      (trial n)))
  
  (define (main . args)
    (run-benchmark
     "string"
     string-iters
     (lambda (result) (equal? result 524278))
     (lambda (n) (lambda () (my-try n)))
     500000)))
