Handle empty gvectors when doubling size.

Closes PR 14843.
This commit is contained in:
Sam Tobin-Hochstadt 2014-11-19 14:08:11 -05:00
parent aad0fa5884
commit ed4845b39b
2 changed files with 8 additions and 1 deletions

View File

@ -46,7 +46,7 @@
(vector-set! v index item)) (vector-set! v index item))
(set-gvector-n! gv (+ n item-count))] (set-gvector-n! gv (+ n item-count))]
[else [else
(let* ([nn (let loop ([nn n]) (let* ([nn (let loop ([nn (max n 1)])
(if (<= (+ n item-count) nn) nn (loop (* 2 nn))))] (if (<= (+ n item-count) nn) nn (loop (* 2 nn))))]
[nv (make-vector nn #f)]) [nv (make-vector nn #f)])
(vector-copy! nv 0 v) (vector-copy! nv 0 v)

View File

@ -22,6 +22,13 @@
gv)) gv))
'#(1 2 3)) '#(1 2 3))
(test-equal? "gvector-add! (lots)"
(let ()
(define g (gvector))
(apply gvector-add! g (build-list 11 values))
(gvector->vector g))
(for/vector ([i 11]) i))
(test-equal? "gvector-ref" (test-equal? "gvector-ref"
(let ([gv (gvector 1 2 3)]) (let ([gv (gvector 1 2 3)])
;; 3 valid refs + 1 not-found ;; 3 valid refs + 1 not-found