fix gvector on large argument list

This commit is contained in:
Ryan Culpepper 2014-11-19 13:56:34 -05:00
parent ed4845b39b
commit 5ac4ab32b7
2 changed files with 10 additions and 2 deletions

View File

@ -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)

View File

@ -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))))