diff --git a/collects/racket/private/for.rkt b/collects/racket/private/for.rkt index 1e3f17aa85..5e1712ee04 100644 --- a/collects/racket/private/for.rkt +++ b/collects/racket/private/for.rkt @@ -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))) diff --git a/collects/tests/racket/for.rktl b/collects/tests/racket/for.rktl index 9746da6bdd..b646b0e0bc 100644 --- a/collects/tests/racket/for.rktl +++ b/collects/tests/racket/for.rktl @@ -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)