test for traverse + make it work in cljs

This commit is contained in:
Nathan Marz 2016-06-13 14:51:20 -04:00
parent 66d1ce65f3
commit a687f4a0bc
2 changed files with 20 additions and 6 deletions

View file

@ -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

View file

@ -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)))
)))