fix INDEXED-VALS
This commit is contained in:
parent
09d00ac7e7
commit
8d5f39a861
3 changed files with 16 additions and 14 deletions
|
|
@ -1,3 +1,7 @@
|
||||||
|
## 1.0.4-SNAPSHOT
|
||||||
|
|
||||||
|
* Bug fix: Fix `INDEXED-VALS` invalidly overwriting elements in some transforms involving multiple index changes
|
||||||
|
|
||||||
## 1.0.3
|
## 1.0.3
|
||||||
|
|
||||||
* Added `before-index` navigator for inserting a single element into a sequence.
|
* Added `before-index` navigator for inserting a single element into a sequence.
|
||||||
|
|
|
||||||
|
|
@ -1008,23 +1008,19 @@
|
||||||
(next-fn [(i/get-cell i) e])
|
(next-fn [(i/get-cell i) e])
|
||||||
)))
|
)))
|
||||||
(transform* [this structure next-fn]
|
(transform* [this structure next-fn]
|
||||||
(let [i (i/mutable-cell 0)
|
(let [indices (i/mutable-cell (-> structure count range))]
|
||||||
indices (i/mutable-cell (-> structure count range vec))]
|
|
||||||
(reduce
|
(reduce
|
||||||
(fn [s e]
|
(fn [s e]
|
||||||
(let [curri (nth (i/get-cell indices) (i/get-cell i))
|
(let [curri (first (i/get-cell indices))
|
||||||
[newi newe] (next-fn [curri e])]
|
[newi newe] (next-fn [curri e])]
|
||||||
(if (> newi curri)
|
(i/update-cell!
|
||||||
(i/update-cell! indices
|
indices
|
||||||
(fn [ii]
|
(fn [ii]
|
||||||
(loop [j (inc curri)
|
(let [ii2 (next ii)]
|
||||||
s ii]
|
(if (> newi curri)
|
||||||
(let [news (update s j dec)]
|
(transform [ALL #(>= % (inc curri)) #(<= % newi)] dec ii2)
|
||||||
(if (< j newi)
|
ii2
|
||||||
(recur (inc j) news)
|
))))
|
||||||
news
|
|
||||||
))))))
|
|
||||||
(i/update-cell! i inc)
|
|
||||||
(->> s
|
(->> s
|
||||||
(setval (nthpath curri) newe)
|
(setval (nthpath curri) newe)
|
||||||
(setval (index-nav curri) newi)
|
(setval (index-nav curri) newi)
|
||||||
|
|
|
||||||
|
|
@ -1624,6 +1624,8 @@
|
||||||
(is (= [:a :b :e :d :c] (setval [s/INDEXED-VALS s/FIRST] 2 data)))
|
(is (= [:a :b :e :d :c] (setval [s/INDEXED-VALS s/FIRST] 2 data)))
|
||||||
(is (= [:b :a :d :c :e] (transform [s/INDEXED-VALS s/FIRST odd?] dec data)))
|
(is (= [:b :a :d :c :e] (transform [s/INDEXED-VALS s/FIRST odd?] dec data)))
|
||||||
(is (= [:a :b :c :d :e] (transform [s/INDEXED-VALS s/FIRST odd?] inc data)))
|
(is (= [:a :b :c :d :e] (transform [s/INDEXED-VALS s/FIRST odd?] inc data)))
|
||||||
|
(is (= [0 2 2 4] (transform [s/INDEXED-VALS s/LAST odd?] inc [0 1 2 3])))
|
||||||
|
(is (= [0 1 2 3] (transform [s/INDEXED-VALS (s/collect-one s/LAST) s/FIRST] (fn [i _] i) [2 1 3 0])))
|
||||||
))
|
))
|
||||||
|
|
||||||
#?(:clj
|
#?(:clj
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue