diff --git a/pkgs/racket-test/tests/racket/contract/sequence.rkt b/pkgs/racket-test/tests/racket/contract/sequence.rkt index 5e775ed2eb..750ecfcc2a 100644 --- a/pkgs/racket-test/tests/racket/contract/sequence.rkt +++ b/pkgs/racket-test/tests/racket/contract/sequence.rkt @@ -48,9 +48,30 @@ #\x) (test/pos-blame - 'sequence/c7 + 'sequence/c8 '(let ([s (sequence->stream (contract (sequence/c #:min-count 2 any/c) "x" 'pos 'neg))]) - (stream-first (stream-rest s))))) + (stream-first (stream-rest s)))) - - \ No newline at end of file + (test/spec-passed/result + 'sequence/c9 + '(contract (sequence/c integer?) (list 1 2 3 4) 'pos 'neg) + '(1 2 3 4)) + + (test/spec-passed/result + 'sequence-stream/c1 + '(stream? (contract (sequence/c integer?) (stream #f #f #f) 'pos 'neg)) + #t) + + (test/pos-blame + 'sequence-stream/c2 + '(stream-first (contract (sequence/c integer?) (stream #f #f #f) 'pos 'neg))) + + (test/spec-passed/result + 'sequence-stream/c3 + '(stream-first (contract (sequence/c integer?) '(1 2 3) 'pos 'neg)) + 1) + + (test/spec-passed/result + 'sequence-stream/c4 + '(stream-first (contract (sequence/c integer?) (in-range 10) 'pos 'neg)) + 0)) diff --git a/racket/collects/racket/sequence.rkt b/racket/collects/racket/sequence.rkt index 16e54c44d6..5aa738d81e 100644 --- a/racket/collects/racket/sequence.rkt +++ b/racket/collects/racket/sequence.rkt @@ -200,6 +200,7 @@ orig-blame seq '(expected: "a sequence" given: "~e") seq)) + (define result-seq (make-do-sequence (lambda () (let*-values ([(more? next) (sequence-generate seq)]) @@ -233,4 +234,8 @@ seq))) ans) (lambda elems #t) - (lambda (idx . elems) #t))))))))) + (lambda (idx . elems) #t)))))) + (cond + [(list? seq) (sequence->list result-seq)] + [(stream? seq) (sequence->stream result-seq)] + [else result-seq])))))