fix `in-vector' range checking

This commit is contained in:
Matthew Flatt 2011-04-06 16:12:48 -06:00
parent 584f74a22b
commit 91cdfe9a7a
2 changed files with 10 additions and 2 deletions

View File

@ -640,8 +640,8 @@
;; the largest fixnum, after running these checks start,
;; stop, and step are guaranteed to be fixnums.
(define (check-ranges who start stop step len)
(unless (and (exact-nonnegative-integer? start) (< start len))
(raise-type-error who (format "exact non-negative integer in [0,~a)" len) start))
(unless (and (exact-nonnegative-integer? start) (<= start len))
(raise-type-error who (format "exact integer in [0,~a]" len) start))
(unless (and (integer? stop) (<= -1 stop) (<= stop len))
(raise-type-error who (format "exact integer in [-1,~a] or #f" len) stop))
(unless (and (exact-integer? step) (not (zero? step)))

View File

@ -228,4 +228,12 @@
(test 13 next)
(test #f more?))
;; check ranges on `in-vetcor', especially as a value
(test '() 'in-empty-vector (let ([v (in-vector '#())]) (for/list ([e v]) e)))
(test '() 'in-empty-vector (let ([v (in-vector '#() 0)]) (for/list ([e v]) e)))
(test '() 'in-empty-vector (let ([v (in-vector '#() 0 0)]) (for/list ([e v]) e)))
(test '() 'in-empty-vector (let ([v (in-vector '#(1) 1 1)]) (for/list ([e v]) e)))
(test '() 'in-empty-vector (let ([v (in-vector '#(1) 0 0)]) (for/list ([e v]) e)))
(test '(1) 'in-empty-vector (let ([v (in-vector '#(1) 0 1)]) (for/list ([e v]) e)))
(report-errs)