parent
0f39ee9b72
commit
fa96375742
|
@ -232,9 +232,21 @@ each element in the sequence.
|
||||||
greater or equal to @racket[end] if @racket[step] is non-negative,
|
greater or equal to @racket[end] if @racket[step] is non-negative,
|
||||||
or less or equal to @racket[end] if @racket[step] is negative.
|
or less or equal to @racket[end] if @racket[step] is negative.
|
||||||
|
|
||||||
If @racket[start] is not a valid index, or @racket[stop] is not in
|
If @racket[start] is not a valid index, then the
|
||||||
[-1, @racket[(vector-length vec)]] then the
|
@exnraise[exn:fail:contract], except when @racket[start], @racket[stop], and
|
||||||
@exnraise[exn:fail:contract]. If @racket[start] is less than
|
@racket[(vector-length vec)] are equal, in which case the result is an
|
||||||
|
empty sequence.
|
||||||
|
|
||||||
|
@examples[#:eval sequence-evaluator
|
||||||
|
(for ([x (in-vector (vector 1) 1)]) x)
|
||||||
|
(eval:error (for ([x (in-vector (vector 1) 2)]) x))
|
||||||
|
(for ([x (in-vector (vector) 0 0)]) x)
|
||||||
|
(for ([x (in-vector (vector 1) 1 1)]) x)]
|
||||||
|
|
||||||
|
If @racket[stop] is not in [-1, @racket[(vector-length vec)]],
|
||||||
|
then the @exnraise[exn:fail:contract].
|
||||||
|
|
||||||
|
If @racket[start] is less than
|
||||||
@racket[stop] and @racket[step] is negative, then the
|
@racket[stop] and @racket[step] is negative, then the
|
||||||
@exnraise[exn:fail:contract:mismatch]. Similarly, if @racket[start]
|
@exnraise[exn:fail:contract:mismatch]. Similarly, if @racket[start]
|
||||||
is more than @racket[stop] and @racket[step] is positive, then the
|
is more than @racket[stop] and @racket[step] is positive, then the
|
||||||
|
|
|
@ -369,6 +369,7 @@
|
||||||
(test '() 'in-empty-vector (let ([v (in-vector '#())]) (for/list ([e v]) e)))
|
(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)]) (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 '#() 0 0)]) (for/list ([e v]) e)))
|
||||||
|
(test '() 'in-empty-vector (let ([v (in-vector '#(1) 1)]) (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) 1 1)]) (for/list ([e v]) e)))
|
||||||
(test '() 'in-empty-vector (let ([v (in-vector '#(1) 0 0)]) (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)))
|
(test '(1) 'in-empty-vector (let ([v (in-vector '#(1) 0 1)]) (for/list ([e v]) e)))
|
||||||
|
@ -523,6 +524,28 @@
|
||||||
exn:fail:contract:arity?
|
exn:fail:contract:arity?
|
||||||
#rx"expected number of values not received")
|
#rx"expected number of values not received")
|
||||||
|
|
||||||
|
(err/rt-test (for/sum ([x (in-vector (vector 1 2) 2 -1 -1)]) x) ; pr 15227
|
||||||
|
exn:fail:contract?
|
||||||
|
#rx"starting index is out of range")
|
||||||
|
(err/rt-test (for/sum ([x (in-vector (vector) -1 -1 -1)]) x)
|
||||||
|
exn:fail:contract?
|
||||||
|
#rx"starting index is out of range")
|
||||||
|
(err/rt-test (for/sum ([x (in-vector (vector) 1 1 1)]) x)
|
||||||
|
exn:fail:contract?
|
||||||
|
#rx"starting index is out of range")
|
||||||
|
(err/rt-test (for/sum ([x (in-vector (vector 1) 1 2)]) x)
|
||||||
|
exn:fail:contract?
|
||||||
|
#rx"starting index is out of range")
|
||||||
|
(err/rt-test (for/sum ([x (in-vector (vector 1) 0 2)]) x)
|
||||||
|
exn:fail:contract?
|
||||||
|
#rx"stopping index is out of range")
|
||||||
|
(err/rt-test (for/sum ([x (in-vector (vector 1) 0 -1)]) x)
|
||||||
|
exn:fail:contract?
|
||||||
|
#rx"starting index more than stopping index, but given a positive step")
|
||||||
|
(err/rt-test (for/sum ([x (in-vector (vector 1) 0 1 -1)]) x)
|
||||||
|
exn:fail:contract?
|
||||||
|
#rx"starting index less than stopping index, but given a negative step")
|
||||||
|
|
||||||
;; for/fold syntax checking
|
;; for/fold syntax checking
|
||||||
(syntax-test #'(for/fold () bad 1) #rx".*bad sequence binding clauses.*")
|
(syntax-test #'(for/fold () bad 1) #rx".*bad sequence binding clauses.*")
|
||||||
|
|
||||||
|
|
|
@ -809,21 +809,22 @@
|
||||||
;; the largest fixnum, after running these checks start,
|
;; the largest fixnum, after running these checks start,
|
||||||
;; stop, and step are guaranteed to be fixnums.
|
;; stop, and step are guaranteed to be fixnums.
|
||||||
(define (check-ranges who vec start stop step len)
|
(define (check-ranges who vec start stop step len)
|
||||||
(unless (and (exact-nonnegative-integer? start) (<= start len))
|
(unless (and (exact-nonnegative-integer? start)
|
||||||
(raise-range-error who "vector" "starting " start vec 0 len))
|
(or (< start len) (= len start stop)))
|
||||||
|
(raise-range-error who "vector" "starting " start vec 0 (sub1 len)))
|
||||||
(unless (and (exact-integer? stop) (<= -1 stop) (<= stop len))
|
(unless (and (exact-integer? stop) (<= -1 stop) (<= stop len))
|
||||||
(raise-range-error who "vector" "stopping " stop vec -1 len))
|
(raise-range-error who "vector" "stopping " stop vec -1 len))
|
||||||
(unless (and (exact-integer? step) (not (zero? step)))
|
(unless (and (exact-integer? step) (not (zero? step)))
|
||||||
(raise-argument-error who "(and/c exact-integer? (not/c zero?))" step))
|
(raise-argument-error who "(and/c exact-integer? (not/c zero?))" step))
|
||||||
(when (and (< start stop) (< step 0))
|
(when (and (< start stop) (< step 0))
|
||||||
(raise-arguments-error who
|
(raise-arguments-error who
|
||||||
"starting index less then stopping index, but given a negative step"
|
"starting index less than stopping index, but given a negative step"
|
||||||
"starting index" start
|
"starting index" start
|
||||||
"stopping index" stop
|
"stopping index" stop
|
||||||
"step" step))
|
"step" step))
|
||||||
(when (and (< stop start) (> step 0))
|
(when (and (< stop start) (> step 0))
|
||||||
(raise-arguments-error who
|
(raise-arguments-error who
|
||||||
"starting index more then stopping index, but given a positive step"
|
"starting index more than stopping index, but given a positive step"
|
||||||
"starting index" start
|
"starting index" start
|
||||||
"stopping index" stop
|
"stopping index" stop
|
||||||
"step" step)))
|
"step" step)))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user