fix gvector on large argument list
This commit is contained in:
parent
ed4845b39b
commit
5ac4ab32b7
|
@ -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)
|
||||
|
|
|
@ -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))))
|
||||
|
|
Loading…
Reference in New Issue
Block a user