[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/stream 2b2ba28 14/36: update stream.el to the latest ve
From: |
Stefan Monnier |
Subject: |
[elpa] externals/stream 2b2ba28 14/36: update stream.el to the latest version |
Date: |
Tue, 1 Dec 2020 17:22:49 -0500 (EST) |
branch: externals/stream
commit 2b2ba281c6951c330c1610f9ee387c66c16ba135
Author: Nicolas Petton <nicolas@petton.fr>
Commit: Nicolas Petton <nicolas@petton.fr>
update stream.el to the latest version
* packages/stream/stream.el:
* packages/stream/tests/stream-tests.el: Add latest changes from the
github repository.
---
stream.el | 30 +++++++++++++++++++++++++++++-
tests/stream-tests.el | 37 +++++++++++++++++++++++++++++++++++++
2 files changed, 66 insertions(+), 1 deletion(-)
diff --git a/stream.el b/stream.el
index b03aa8a..567a9e3 100644
--- a/stream.el
+++ b/stream.el
@@ -113,6 +113,17 @@ The sequence starts at POS if non-nil, 1 otherwise."
(char-after (point)))))
(stream buffer (1+ pos)))))
+(declare-function iter-next "generator")
+
+(defun stream-from-iterator (iterator)
+ "Return a stream generating new elements through ITERATOR.
+ITERATOR is an iterator object in terms of the \"generator\"
+package."
+ (stream-make
+ (condition-case nil
+ (cons (iter-next iterator) (stream-from-iterator iterator))
+ (iter-end-of-sequence nil))))
+
(defun stream-regexp (buffer regexp)
(stream-make
(let (match)
@@ -137,7 +148,8 @@ range is infinite."
(defun streamp (stream)
"Return non-nil if STREAM is a stream, nil otherwise."
- (eq (car-safe stream) stream--identifier))
+ (and (consp stream)
+ (eq (car stream) stream--identifier)))
(defun stream-empty ()
"Return an empty stream."
@@ -156,6 +168,22 @@ range is infinite."
(or (cdr (thunk-force (cadr stream)))
(stream-empty)))
+(defun stream-append (&rest streams)
+ "Concatenate the STREAMS.
+Requesting elements from the resulting stream will request the
+elements in the STREAMS in order."
+ (if (null streams)
+ (stream-empty)
+ (stream-make
+ (let ((first (pop streams)))
+ (while (and (stream-empty-p first) streams)
+ (setq first (pop streams)))
+ (if (stream-empty-p first)
+ nil
+ (cons (stream-first first)
+ (if streams (apply #'stream-append (stream-rest first) streams)
+ (stream-rest first))))))))
+
(defmacro stream-pop (stream)
"Return the first element of STREAM and set the value of STREAM to its rest."
(unless (symbolp stream)
diff --git a/tests/stream-tests.el b/tests/stream-tests.el
index 1997202..88edf91 100644
--- a/tests/stream-tests.el
+++ b/tests/stream-tests.el
@@ -52,6 +52,35 @@
(should (= 4 (stream-first (stream-rest (stream-range 3)))))
(should (= 5 (stream-first (stream-rest (stream-rest (stream-range 3)))))))
+(ert-deftest stream-from-iterator-test ()
+ (skip-unless (require 'generator nil t))
+ (should (equal '(1 2)
+ (seq-into-sequence
+ (stream-from-iterator
+ (funcall (iter-lambda ()
+ (iter-yield 1)
+ (iter-yield 2))))))))
+
+(ert-deftest stream-append-test ()
+ (should (stream-empty-p (stream-append)))
+ (should (let ((list '(1 2)))
+ (equal list (seq-into-sequence (stream-append (stream list))))))
+ (should (= (seq-elt (stream-append
+ (stream (list 0 1))
+ (stream-range 2))
+ 4)
+ 4))
+ (should (let ((stream (stream (list 0))))
+ (and (= (seq-elt (stream-append stream (stream-range 1)) 10)
+ 10)
+ (stream-empty-p (stream-rest stream)))))
+ (should (equal (seq-into-sequence
+ (stream-append
+ (stream '(1))
+ (stream '())
+ (stream '(2 3))))
+ '(1 2 3))))
+
(ert-deftest stream-seqp-test ()
(should (seqp (stream-range))))
@@ -175,5 +204,13 @@
(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)))))
+
(provide 'stream-tests)
;;; stream-tests.el ends here
- [elpa] externals/stream 01fc059 03/36: * packages/stream/stream.el: Update stream to v 1.0.1., (continued)
- [elpa] externals/stream 01fc059 03/36: * packages/stream/stream.el: Update stream to v 1.0.1., Stefan Monnier, 2020/12/01
- [elpa] externals/stream 1a61660 11/36: * stream.el: Implement `seqp' instead of `seq-p', Stefan Monnier, 2020/12/01
- [elpa] externals/stream 5762f78 21/36: Pinpoint semantics of `seq-subseq's implementation for streams, Stefan Monnier, 2020/12/01
- [elpa] externals/stream f384660 22/36: Add systematic tests against bogus element generation, Stefan Monnier, 2020/12/01
- [elpa] externals/stream ec86243 24/36: Some details in the documentation, Stefan Monnier, 2020/12/01
- [elpa] externals/stream b0c8949 28/36: Implement `seq-mapn' method for streams, Stefan Monnier, 2020/12/01
- [elpa] externals/stream 7874a25 05/36: * packages/stream/tests/stream-tests.el: New tests., Stefan Monnier, 2020/12/01
- [elpa] externals/stream d77b733 09/36: Update stream.el to v2.0.2., Stefan Monnier, 2020/12/01
- [elpa] externals/stream fbe7ebd 06/36: Update stream.el to version 2.0.0, Stefan Monnier, 2020/12/01
- [elpa] externals/stream a8aa25c 07/36: * packages/stream/stream.el: Update stream.el to version 2.0.1., Stefan Monnier, 2020/12/01
- [elpa] externals/stream 2b2ba28 14/36: update stream.el to the latest version,
Stefan Monnier <=
- [elpa] externals/stream 00e523f 15/36: Add stream stream-delay and stream-of-directory-files, Stefan Monnier, 2020/12/01
- [elpa] externals/stream ac42cc1 18/36: Fix some quoting problems in doc strings, Stefan Monnier, 2020/12/01
- [elpa] externals/stream a36469b 17/36: Add some more basic stream operations, Stefan Monnier, 2020/12/01
- [elpa] externals/stream f8e6639 20/36: * stream/stream.el (stream--generalizer): Accept more arguments, Stefan Monnier, 2020/12/01
- [elpa] externals/stream 873ee4e 23/36: Fix errors detected by tests added in last commit, Stefan Monnier, 2020/12/01
- [elpa] externals/stream cbf7e78 30/36: * stream/stream-x.el: Update copyright, Stefan Monnier, 2020/12/01
- [elpa] externals/stream f1fce5e 35/36: * packages/stream/stream.el: Bump version to 2.2.5., Stefan Monnier, 2020/12/01
- [elpa] externals/stream 05b20e1 25/36: Add file "stream-x.el" to the stream package, Stefan Monnier, 2020/12/01
- [elpa] externals/stream 76ed94e 27/36: Fix seq-empty-p for streams, Stefan Monnier, 2020/12/01
- [elpa] externals/stream 89f61bf 33/36: * packages/stream/stream.el (stream--force): Small fix (Bug#37888)., Stefan Monnier, 2020/12/01