(should (= 3 (stream-first (stream-rest (seq-filter #'cl-oddp (stream-range 0 4))))))
(should (stream-empty-p (stream-rest (stream-rest (seq-filter #'cl-oddp (stream-range 0 4)))))))
+(ert-deftest stream-delay-test ()
+ (should (streamp (stream-delay (stream-range))))
+ (should (= 0 (stream-first (stream-delay (stream-range)))))
+ (should (= 1 (stream-first (stream-rest (stream-delay (stream-range))))))
+ (should (let ((stream (stream-range 3 7)))
+ (equal (seq-into (stream-delay stream) 'list)
+ (seq-into stream 'list))))
+ (should (null (seq-into (stream-delay (stream-empty)) 'list)))
+ (should (let* ((evaluated nil)
+ (one-plus (lambda (el)
+ (setq evaluated t)
+ (1+ el)))
+ (stream (seq-map one-plus (stream '(1)))))
+ (equal '(nil 2 t)
+ (list evaluated (stream-first stream) evaluated))))
+ (should (let* ((a 0)
+ (set-a (lambda (x) (setq a x)))
+ (s (stream-delay (stream (list a))))
+ res1 res2)
+ (funcall set-a 5)
+ (setq res1 (stream-first s))
+ (funcall set-a 11)
+ (setq res2 (stream-first s))
+ (and (equal res1 5)
+ (equal res2 5)))))
+
(ert-deftest stream-seq-copy-test ()
(should (streamp (seq-copy (stream-range))))
(should (= 0 (stream-first (seq-copy (stream-range)))))
- (should (= 1 (stream-first (stream-rest (seq-copy (stream-range)))))))
+ (should (= 1 (stream-first (stream-rest (seq-copy (stream-range))))))
+ (should (let ((stream (stream-range 3 7)))
+ (equal (seq-into (seq-copy stream) 'list)
+ (seq-into stream 'list))))
+ (should (null (seq-into (seq-copy (stream-empty)) 'list))))
(ert-deftest stream-range-test ()
(should (stream-empty-p (stream-range 0 0)))
(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))))
+
(provide 'stream-tests)
;;; stream-tests.el ends here