Fix issue with iterator
When there was only 1-item produced by an aggregating xform .hasNext was returning false.
This commit is contained in:
parent
da53490f20
commit
023ca6043e
3 changed files with 14 additions and 8 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
(defproject net.cgrand/xforms "0.12.1"
|
(defproject net.cgrand/xforms "0.12.2"
|
||||||
:description "Extra transducers for Clojure"
|
:description "Extra transducers for Clojure"
|
||||||
:url "https://github.com/cgrand/xforms"
|
:url "https://github.com/cgrand/xforms"
|
||||||
:license {:name "Eclipse Public License"
|
:license {:name "Eclipse Public License"
|
||||||
|
|
|
||||||
|
|
@ -479,13 +479,17 @@
|
||||||
rf (xform (fn ([acc] acc) ([acc x] (.push dq (if (some? x) x NULL)) acc)))
|
rf (xform (fn ([acc] acc) ([acc x] (.push dq (if (some? x) x NULL)) acc)))
|
||||||
vopen (volatile! true)
|
vopen (volatile! true)
|
||||||
ensure-next #(or (some? (.peek dq))
|
ensure-next #(or (some? (.peek dq))
|
||||||
(if (and @vopen (.hasNext src-iterator))
|
(and @vopen
|
||||||
(let [acc (rf nil (.next src-iterator))]
|
(if (.hasNext src-iterator)
|
||||||
(when (reduced? acc) (vreset! vopen false))
|
(let [acc (rf nil (.next src-iterator))]
|
||||||
(recur))
|
(when (reduced? acc)
|
||||||
(do
|
(rf nil)
|
||||||
(rf nil)
|
(vreset! vopen false))
|
||||||
false)))]
|
(recur))
|
||||||
|
(do
|
||||||
|
(rf nil)
|
||||||
|
(vreset! vopen false)
|
||||||
|
(recur)))))]
|
||||||
(reify java.util.Iterator
|
(reify java.util.Iterator
|
||||||
(hasNext [_]
|
(hasNext [_]
|
||||||
(ensure-next))
|
(ensure-next))
|
||||||
|
|
|
||||||
|
|
@ -92,6 +92,8 @@
|
||||||
|
|
||||||
#?(:clj
|
#?(:clj
|
||||||
(deftest iterator
|
(deftest iterator
|
||||||
|
(is (true? (.hasNext (x/iterator x/count (.iterator (range 5))))))
|
||||||
|
(is (is (= [5] (iterator-seq (x/iterator x/count (.iterator (range 5)))))))
|
||||||
(is (= [[0 1] [1 2] [2 3] [3 4] [4]] (iterator-seq (x/iterator (x/partition 2 1 nil) (.iterator (range 5)))))))
|
(is (= [[0 1] [1 2] [2 3] [3 4] [4]] (iterator-seq (x/iterator (x/partition 2 1 nil) (.iterator (range 5)))))))
|
||||||
|
|
||||||
(deftest window-by-time
|
(deftest window-by-time
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue