]> git.eshelyaron.com Git - emacs.git/commitdiff
Allow negative steps in stream-range
authorNicolas Petton <nicolas@petton.fr>
Mon, 10 Aug 2015 12:53:10 +0000 (14:53 +0200)
committerNicolas Petton <nicolas@petton.fr>
Mon, 10 Aug 2015 12:53:10 +0000 (14:53 +0200)
* lisp/emacs-lisp/stream.el (stream-range): Do not signal an error if
the step is negative.
* test/automated/stream-tests.el (stream-range-test): Add a regression
test for negative steps in stream-range.

lisp/emacs-lisp/stream.el
test/automated/stream-tests.el

index 0cf3e939015cc7c8a1a2288d3138af5cd649f554..eed436a58b48e393683346139342a21807e1cc28 100644 (file)
@@ -183,13 +183,11 @@ If START is nil, it defaults to 0. If STEP is nil, it defaults to
 range is infinite."
   (unless start (setq start 0))
   (unless step (setq step 1))
-  (cond
-   ((equal start end) (stream-empty))
-   ((and end (> start end)) (error "Invalid range boundaries"))
-   (t
+  (if (equal start end)
+      (stream-empty)
     (stream-cons
      start
-     (stream-range (+ start step) end step)))))
+     (stream-range (+ start step) end step))))
 
 (defun stream-seq (seq)
   "Return a stream built from the sequence SEQ.
index a7634106e4f043edd9c0393b7610c2ea824c8345..59a0770301c1d808a09bcb98bf57c321a64a3883 100644 (file)
 (ert-deftest stream-range-test ()
   (should (stream-empty-p (stream-range 0 0)))
   (should (stream-empty-p (stream-range 3 3)))
-  (should-error (stream-range 3 2))
   (should (= 0 (stream-first (stream-range 0 6 2))))
   (should (= 2 (stream-first (stream-rest (stream-range 0 6 2)))))
   (should (= 4 (stream-first (stream-rest (stream-rest (stream-range 0 6 2))))))
-  (should (stream-empty-p (stream-rest (stream-rest (stream-rest (stream-range 0 6 2)))))))
+  (should (stream-empty-p (stream-rest (stream-rest (stream-rest (stream-range 0 6 2))))))
+  (should (= -4 (stream-first (stream-rest (stream-rest (stream-range 0 nil -2)))))))
 
 (ert-deftest stream-list-test ()
   (dolist (list '(nil '(1 2 3) '(a . b)))