[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/stream 5762f78 21/36: Pinpoint semantics of `seq-subseq
From: |
Stefan Monnier |
Subject: |
[elpa] externals/stream 5762f78 21/36: Pinpoint semantics of `seq-subseq's implementation for streams |
Date: |
Tue, 1 Dec 2020 17:22:51 -0500 (EST) |
branch: externals/stream
commit 5762f78988471c41a82bdbc2b30f54fb1f9e601e
Author: Michael Heerdegen <michael_heerdegen@web.de>
Commit: Michael Heerdegen <michael_heerdegen@web.de>
Pinpoint semantics of `seq-subseq's implementation for streams
- Make argument END optional.
- Forbid negative index arguments.
- Add tests.
---
stream.el | 15 +++++++++++++--
tests/stream-tests.el | 10 ++++++++--
2 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/stream.el b/stream.el
index 8c156f1..9954fc8 100644
--- a/stream.el
+++ b/stream.el
@@ -229,8 +229,19 @@ This function will eagerly consume the entire stream."
(setq stream (stream-rest stream)))
len))
-(cl-defmethod seq-subseq ((stream stream) start end)
- (seq-take (seq-drop stream start) (- end start)))
+(cl-defmethod seq-subseq ((stream stream) start &optional end)
+ "Return a stream of elements of STREAM from START to END.
+
+END is exclusive. If END is omitted, include all elements from
+START on. Both START and END must be non-negative. Since
+streams are a delayed type of sequences, don't signal an error if
+START or END are larger than the number of elements (the returned
+stream will simply be accordingly shorter, or even empty)."
+ (when (or (< start 0) (and end (< end 0)))
+ (error "seq-subseq: only non-negative indexes allowed for streams"))
+ (let ((stream-from-start (seq-drop stream start)))
+ (if end (seq-take stream-from-start (- end start))
+ stream-from-start)))
(cl-defmethod seq-into-sequence ((stream stream))
"Convert STREAM into a sequence."
diff --git a/tests/stream-tests.el b/tests/stream-tests.el
index 16b5756..31c3530 100644
--- a/tests/stream-tests.el
+++ b/tests/stream-tests.el
@@ -112,8 +112,14 @@
(should (stream-empty-p (stream-rest (stream-rest rest))))))
(ert-deftest stream-seq-subseq-test ()
- ;; TODO
- )
+ (should (equal (seq-into (seq-subseq (stream (list 0 1 2 3 4)) 1 3) 'list)
+ (seq-subseq (list 0 1 2 3 4) 1 3)))
+ (should (= (stream-first (seq-subseq (stream-range 0) 5))
+ 5))
+ (should (= (stream-first (seq-subseq (seq-subseq (stream-range 0) 5) 5))
+ 10))
+
+ (should-error (seq-subseq (stream-range 0) -1)))
(ert-deftest stream-seq-into-test ()
(should (streamp (seq-into (stream-empty) 'stream)))
- [elpa] branch externals/stream created (now 0055487), Stefan Monnier, 2020/12/01
- [elpa] externals/stream 6a47b33 02/36: * packages/stream/stream.el: Require Emacs 25, Stefan Monnier, 2020/12/01
- [elpa] externals/stream 6bc197b 01/36: Add stream.el to ELPA, Stefan Monnier, 2020/12/01
- [elpa] externals/stream c92d3b4 08/36: * packages/stream/stream.el: Update to version 2.0.2., Stefan Monnier, 2020/12/01
- [elpa] externals/stream 11f19ab 10/36: Update stream.el to v2.0.5, Stefan Monnier, 2020/12/01
- [elpa] externals/stream 8af657a 12/36: * packages/stream/stream.el (streamp): Tiny optimization., Stefan Monnier, 2020/12/01
- [elpa] externals/stream 8239285 13/36: Fix compliler warnings in stream-tests.el, Stefan Monnier, 2020/12/01
- [elpa] externals/stream 18146ee 04/36: * packages/stream/stream.el: Update stream.el to v 1.1.0., Stefan Monnier, 2020/12/01
- [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 <=
- [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, 2020/12/01
- [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