From 5ac4ab32b7387a822b1a37292736b78576f9ac2e Mon Sep 17 00:00:00 2001 From: Ryan Culpepper Date: Wed, 19 Nov 2014 13:56:34 -0500 Subject: [PATCH] fix gvector on large argument list --- pkgs/data-pkgs/data-lib/data/gvector.rkt | 6 ++++-- pkgs/data-pkgs/data-test/tests/data/gvector.rkt | 6 ++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/pkgs/data-pkgs/data-lib/data/gvector.rkt b/pkgs/data-pkgs/data-lib/data/gvector.rkt index 3e56c19a34..5589d7ab3f 100644 --- a/pkgs/data-pkgs/data-lib/data/gvector.rkt +++ b/pkgs/data-pkgs/data-lib/data/gvector.rkt @@ -7,7 +7,9 @@ racket/dict racket/vector) -(define (make-gvector #:capacity [capacity 10]) +(define DEFAULT-CAPACITY 10) + +(define (make-gvector #:capacity [capacity DEFAULT-CAPACITY]) (gvector (make-vector capacity #f) 0)) (define gvector* @@ -46,7 +48,7 @@ (vector-set! v index item)) (set-gvector-n! gv (+ n item-count))] [else - (let* ([nn (let loop ([nn (max n 1)]) + (let* ([nn (let loop ([nn (max DEFAULT-CAPACITY (vector-length v))]) (if (<= (+ n item-count) nn) nn (loop (* 2 nn))))] [nv (make-vector nn #f)]) (vector-copy! nv 0 v) diff --git a/pkgs/data-pkgs/data-test/tests/data/gvector.rkt b/pkgs/data-pkgs/data-test/tests/data/gvector.rkt index 6b7af08bc1..7b3288e57b 100644 --- a/pkgs/data-pkgs/data-test/tests/data/gvector.rkt +++ b/pkgs/data-pkgs/data-test/tests/data/gvector.rkt @@ -155,3 +155,9 @@ (test-case "gvector, not equal, extension" (check-not-equal? (gvector 1) (gvector 1 2))) + +(test-case "gvector on large list" + (let ([g (apply gvector (for/list ([i 100]) i))]) + (check-pred gvector? g) + (for ([i 100]) + (check-equal? (gvector-ref g i) i))))