v0.8.3: fix #10 (and another bug in padded partition) and update doc

This commit is contained in:
Christophe Grand 2017-01-26 13:50:10 +01:00
parent d5e5aa3670
commit 8a9d383198
4 changed files with 14 additions and 8 deletions

View file

@ -21,7 +21,7 @@ Transducing contexts: `transjuxt` (for performing several transductions in a sin
Add this dependency to your project: Add this dependency to your project:
```clj ```clj
[net.cgrand/xforms "0.8.2"] [net.cgrand/xforms "0.8.3"]
``` ```
```clj ```clj
@ -127,16 +127,16 @@ It's worth noting that all transformed outputs are subsequently interleaved. See
```clj ```clj
=> (sequence (x/partition 2 1 identity) (range 8)) => (sequence (x/partition 2 1 identity) (range 8))
(0 1 1 2 2 3 3 4 4 5 5 6 6 7 7) (0 1 1 2 2 3 3 4 4 5 5 6 6 7)
=> (sequence (x/by-key odd? identity) (range 8)) => (sequence (x/by-key odd? identity) (range 8))
([false 0] [true 1] [false 2] [true 3] [false 4] [true 5] [false 6] [true 7]) ([false 0] [true 1] [false 2] [true 3] [false 4] [true 5] [false 6] [true 7])
``` ```
That's why most of the time the last stage of the sub-transducer will be a `x/reduce` or a `x/into`: That's why most of the time the last stage of the sub-transducer will be a 1-item transducer like `x/reduce` or `x/into`:
```clj ```clj
=> (sequence (x/partition 2 1 (x/into [])) (range 8)) => (sequence (x/partition 2 1 (x/into [])) (range 8))
([0 1] [1 2] [2 3] [3 4] [4 5] [5 6] [6 7] [7]) ([0 1] [1 2] [2 3] [3 4] [4 5] [5 6] [6 7])
=> (sequence (x/by-key odd? (x/into [])) (range 8)) => (sequence (x/by-key odd? (x/into [])) (range 8))
([false [0 2 4 6]] [true [1 3 5 7]]) ([false [0 2 4 6]] [true [1 3 5 7]])
``` ```

View file

@ -1,4 +1,4 @@
(defproject net.cgrand/xforms "0.8.2" (defproject net.cgrand/xforms "0.8.3"
: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"

View file

@ -321,7 +321,7 @@
(let [xform (comp cat (take n) xform) (let [xform (comp cat (take n) xform)
; don't use mxrf for completion: we want completion and don't want reduced-wrapping ; don't use mxrf for completion: we want completion and don't want reduced-wrapping
acc (transduce xform rf acc [(.getValues dq) pad])] acc (transduce xform rf acc [(.getValues dq) pad])]
(vreset! @barrier n) (vreset! barrier n)
(.clear dq) (.clear dq)
acc) acc)
acc)) acc))
@ -330,8 +330,8 @@
(when (< b n) (.add dq (if (nil? x) dq x))) (when (< b n) (.add dq (if (nil? x) dq x)))
(if (zero? b) (if (zero? b)
; this transduce may return a reduced because of mxrf wrapping reduceds coming from rf ; this transduce may return a reduced because of mxrf wrapping reduceds coming from rf
(let [acc (transduce xform mxrf acc (.getValues dq))] (let [acc (core/transduce xform mxrf acc (.getValues dq))]
(dotimes [_ (min n step)] (.poll dq)) (dotimes [_ (core/min n step)] (.poll dq))
(vswap! barrier + step) (vswap! barrier + step)
acc) acc)
acc))))))))) acc)))))))))

View file

@ -82,6 +82,12 @@
(is (= (into [] (comp (take 3) (x/reductions +)) (range)) [0 0 1 3])) (is (= (into [] (comp (take 3) (x/reductions +)) (range)) [0 0 1 3]))
(is (= (into [] (x/reductions (constantly (reduced 42)) 0) (range)) [0 42]))) (is (= (into [] (x/reductions (constantly (reduced 42)) 0) (range)) [0 42])))
(deftest partition
(is (= (into [] (x/partition 2 1 nil (x/into [])) (range 8))
[[0 1] [1 2] [2 3] [3 4] [4 5] [5 6] [6 7] [7]]))
(is (= (into [] (x/partition 2 1 (x/into [])) (range 8))
[[0 1] [1 2] [2 3] [3 4] [4 5] [5 6] [6 7]])))
#?(:clj #?(:clj
(deftest window-by-time (deftest window-by-time
(is (= (into (is (= (into