-(ert-deftest stream-rest-should-return-the-empty-stream-at-end-of-stream ()
- (should (stream-empty-p (stream-rest (stream-rest (stream nil))))))
-
-(ert-deftest seq-take-should-not-signal-exceptions-at-end-of-stream ()
- (should (equal (seq-into-sequence (seq-take (stream (list 1 2 3)) 4))
- '(1 2 3))))
+(ert-deftest stream-seq-map-should-not-consume-stream-elements ()
+ (let* (consumed
+ (stream (stream-cons (setq consumed t) (stream-empty))))
+ (seq-map #'identity stream)
+ (should-not consumed)))
+
+(ert-deftest stream-pop-test ()
+ (let* ((str (stream '(1 2 3)))
+ (first (stream-pop str))
+ (stream-empty (stream-empty)))
+ (should (= 1 first))
+ (should (= 2 (stream-first str)))
+ (should (null (stream-pop stream-empty)))))
+
+(ert-deftest stream-scan-test ()
+ (should (eq (seq-elt (stream-scan #'* 1 (stream-range 1)) 4) 24)))
+
+(ert-deftest stream-flush-test ()
+ (should (let* ((times 0)
+ (count (lambda () (cl-incf times))))
+ (letrec ((make-test-stream (lambda () (stream-cons (progn (funcall count) nil)
+ (funcall make-test-stream)))))
+ (stream-flush (seq-take (funcall make-test-stream) 5))
+ (eq times 5)))))
+
+(ert-deftest stream-iterate-function-test ()
+ (should (equal (list 0 1 2) (seq-into-sequence (seq-take (stream-iterate-function #'1+ 0) 3)))))
+
+(ert-deftest stream-concatenate-test ()
+ (should (equal (seq-into-sequence
+ (stream-concatenate
+ (stream (list (stream (list 1 2 3))
+ (stream (list))
+ (stream (list 4))
+ (stream (list 5 6 7 8 9))))))
+ (list 1 2 3 4 5 6 7 8 9))))