From 737585091d0ba643fd19a4d5c3fbdd111988ad83 Mon Sep 17 00:00:00 2001 From: Will M. Farr 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