;;; ARRAY1 -- One of the Kernighan and Van Wyk benchmarks.

(library (r6rs-benchmarks array1)
  (export main)
  (import (r6rs) (r6rs-benchmarks))
  
  (define (create-x n)
    (define result (make-vector n))
    (do ((i 0 (+ i 1)))
        ((>= i n) result)
      (vector-set! result i i)))
  
  (define (create-y x)
    (let* ((n (vector-length x))
           (result (make-vector n)))
      (do ((i (- n 1) (- i 1)))
          ((< i 0) result)
        (vector-set! result i (vector-ref x i)))))
  
  (define (my-try n)
    (vector-length (create-y (create-x n))))
  
  (define (go n)
    (let loop ((repeat 100)
               (result '()))
      (if (> repeat 0)
          (loop (- repeat 1) (my-try n))
          result)))
  
  (define (main . args)
    (run-benchmark
      "array1"
      array1-iters
      (lambda (result) (equal? result 200000))
      (lambda (n) (lambda () (go n)))
      200000)))