fix gvector on large argument list
This commit is contained in:
parent
ed4845b39b
commit
5ac4ab32b7
|
@ -7,7 +7,9 @@
|
||||||
racket/dict
|
racket/dict
|
||||||
racket/vector)
|
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))
|
(gvector (make-vector capacity #f) 0))
|
||||||
|
|
||||||
(define gvector*
|
(define gvector*
|
||||||
|
@ -46,7 +48,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 (max n 1)])
|
(let* ([nn (let loop ([nn (max DEFAULT-CAPACITY (vector-length v))])
|
||||||
(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)
|
||||||
|
|
|
@ -155,3 +155,9 @@
|
||||||
|
|
||||||
(test-case "gvector, not equal, extension"
|
(test-case "gvector, not equal, extension"
|
||||||
(check-not-equal? (gvector 1) (gvector 1 2)))
|
(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