From 737585091d0ba643fd19a4d5c3fbdd111988ad83 Mon Sep 17 00:00:00 2001
From: Will M. Farr <w-farr@northwestern.edu>
Date: Thu, 16 Sep 2010 17:34:42 -0500
Subject: [PATCH 4/5] Added flvector-copy (with tests and docs).

---
 collects/racket/flonum.rkt                   |    8 +++++++-
 collects/scribblings/reference/numbers.scrbl |    4 ++++
 collects/tests/racket/flonum.rktl            |   11 +++++++++++
 3 files changed, 22 insertions(+), 1 deletions(-)

diff --git a/collects/racket/flonum.rkt b/collects/racket/flonum.rkt
index e8275e2..0070576 100644
--- a/collects/racket/flonum.rkt
+++ b/collects/racket/flonum.rkt
@@ -9,6 +9,7 @@
          ->fl fl->exact-integer
          flvector? flvector make-flvector 
          flvector-length flvector-ref flvector-set!
+         flvector-copy
          flreal-part flimag-part make-flrectangular
          in-flvector for/flvector for*/flvector shared-flvector make-shared-flvector)
 
@@ -83,4 +84,9 @@
                 #:when (< i len))
              (flvector-set! v i (begin body ...))
              (add1 i))
-           v))))))
\ No newline at end of file
+           v))))))
+
+(define (flvector-copy flv)
+  (for/flvector #:length (flvector-length flv)
+                ((x (in-flvector flv)))
+                x))
\ No newline at end of file
diff --git a/collects/scribblings/reference/numbers.scrbl b/collects/scribblings/reference/numbers.scrbl
index f6cf558..3361c6a 100644
--- a/collects/scribblings/reference/numbers.scrbl
+++ b/collects/scribblings/reference/numbers.scrbl
@@ -1096,6 +1096,10 @@ Sets the inexact real number in slot @racket[pos] of @racket[vec]. The
 first slot is position @racket[0], and the last slot is one less than
 @racket[(flvector-length vec)].}
 
+@defproc[(flvector-copy (v flvector?)) flvector?]{
+
+Returns a fresh copy of @racket[v].}
+
 @defproc[(in-flvector (v flvector?)) sequence?]{
 
 Produces a sequence that gives the elements of @scheme[v] in order.
diff --git a/collects/tests/racket/flonum.rktl b/collects/tests/racket/flonum.rktl
index 3965341..18da10c 100644
--- a/collects/tests/racket/flonum.rktl
+++ b/collects/tests/racket/flonum.rktl
@@ -61,4 +61,15 @@
   (test (flvector 2.0 3.0 4.0) 'for/flvector-many-body flv2)
   (test (flvector 3.0 4.0 5.0) 'for/flvector-length-many-body flv3))
 
+;; flvector-copy test
+(let ((v (flvector 0.0 1.0 2.0 3.0)))
+  (let ((vc (flvector-copy v)))
+    (test (flvector-length v) 'flvector-copy (flvector-length vc))
+    (for ((vx (in-flvector v))
+          (vcx (in-flvector vc)))
+      (test vx 'flvector-copy vcx))
+    (flvector-set! vc 2 -10.0)
+    (test 2.0 'flvector-copy (flvector-ref v 2))
+    (test -10.0 'flvector-copy (flvector-ref vc 2))))
+
 (report-errs)
\ No newline at end of file
-- 
1.7.2.2

