From: Nicolas Petton Date: Mon, 10 Aug 2015 12:53:10 +0000 (+0200) Subject: Allow negative steps in stream-range X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=8c111a86bcd310df347822552969444e5b48dc45;p=emacs.git Allow negative steps in stream-range * 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. --- diff --git a/lisp/emacs-lisp/stream.el b/lisp/emacs-lisp/stream.el index 0cf3e939015..eed436a58b4 100644 --- a/lisp/emacs-lisp/stream.el +++ b/lisp/emacs-lisp/stream.el @@ -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. diff --git a/test/automated/stream-tests.el b/test/automated/stream-tests.el index a7634106e4f..59a0770301c 100644 --- a/test/automated/stream-tests.el +++ b/test/automated/stream-tests.el @@ -103,11 +103,11 @@ (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)))