X-Git-Url: https://code.delx.au/gnu-emacs-elpa/blobdiff_plain/68fe8117585c06b3eb53248b95c47c4700193a0b..8b3326ff7251ba402002dfcbb9272f59547f09ab:/packages/stream/tests/stream-tests.el diff --git a/packages/stream/tests/stream-tests.el b/packages/stream/tests/stream-tests.el index 88edf918c..16b5756ea 100644 --- a/packages/stream/tests/stream-tests.el +++ b/packages/stream/tests/stream-tests.el @@ -171,10 +171,40 @@ (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))) @@ -212,5 +242,28 @@ (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