make sequence/c preserve streamness

This commit is contained in:
Robby Findler 2015-04-07 11:51:10 -05:00
parent 23ec573e51
commit 7e089f3d7f
2 changed files with 31 additions and 5 deletions

View File

@ -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))))
(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))

View File

@ -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])))))