test for traverse + make it work in cljs
This commit is contained in:
parent
66d1ce65f3
commit
a687f4a0bc
2 changed files with 20 additions and 6 deletions
|
|
@ -684,10 +684,12 @@
|
|||
))
|
||||
|
||||
(defn do-compiled-traverse [apath structure]
|
||||
(reify clojure.lang.IReduce
|
||||
(reduce [this afn]
|
||||
(.reduce this afn (afn)))
|
||||
(reduce [this afn start]
|
||||
(reify #+clj clojure.lang.IReduce #+cljs cljs.core/IReduce
|
||||
(#+clj reduce #+cljs -reduce
|
||||
[this afn]
|
||||
(#+clj .reduce #+cljs -reduce this afn (afn)))
|
||||
(#+clj reduce #+cljs -reduce
|
||||
[this afn start]
|
||||
(let [cell (mutable-cell start)]
|
||||
(compiled-traverse*
|
||||
apath
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
:refer [paramsfn defprotocolpath defnav extend-protocolpath
|
||||
nav declarepath providepath select select-one select-one!
|
||||
select-first transform setval replace-in defnavconstructor
|
||||
select-any selected-any? collected?]])
|
||||
select-any selected-any? collected? traverse]])
|
||||
(:use
|
||||
#+clj [clojure.test :only [deftest is]]
|
||||
#+clj [clojure.test.check.clojure-test :only [defspec]]
|
||||
|
|
@ -17,7 +17,7 @@
|
|||
:only [paramsfn defprotocolpath defnav extend-protocolpath
|
||||
nav declarepath providepath select select-one select-one!
|
||||
select-first transform setval replace-in defnavconstructor
|
||||
select-any selected-any? collected?]]
|
||||
select-any selected-any? collected? traverse]]
|
||||
|
||||
)
|
||||
|
||||
|
|
@ -1256,3 +1256,15 @@
|
|||
inc
|
||||
data)
|
||||
))))
|
||||
|
||||
(defspec traverse-test
|
||||
(for-all+
|
||||
[v (gen/vector gen/int)
|
||||
p (gen/elements [odd? even?])
|
||||
i gen/int]
|
||||
(and
|
||||
(= (reduce + (traverse [s/ALL p] v))
|
||||
(reduce + (filter p v)))
|
||||
(= (reduce + i (traverse [s/ALL p] v))
|
||||
(reduce + i (filter p v)))
|
||||
)))
|
||||
|
|
|
|||
Loading…
Reference in a new issue