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] (defn do-compiled-traverse [apath structure]
(reify clojure.lang.IReduce (reify #+clj clojure.lang.IReduce #+cljs cljs.core/IReduce
(reduce [this afn] (#+clj reduce #+cljs -reduce
(.reduce this afn (afn))) [this afn]
(reduce [this afn start] (#+clj .reduce #+cljs -reduce this afn (afn)))
(#+clj reduce #+cljs -reduce
[this afn start]
(let [cell (mutable-cell start)] (let [cell (mutable-cell start)]
(compiled-traverse* (compiled-traverse*
apath apath

View file

@ -8,7 +8,7 @@
:refer [paramsfn defprotocolpath defnav extend-protocolpath :refer [paramsfn defprotocolpath defnav extend-protocolpath
nav declarepath providepath select select-one select-one! nav declarepath providepath select select-one select-one!
select-first transform setval replace-in defnavconstructor select-first transform setval replace-in defnavconstructor
select-any selected-any? collected?]]) select-any selected-any? collected? traverse]])
(:use (:use
#+clj [clojure.test :only [deftest is]] #+clj [clojure.test :only [deftest is]]
#+clj [clojure.test.check.clojure-test :only [defspec]] #+clj [clojure.test.check.clojure-test :only [defspec]]
@ -17,7 +17,7 @@
:only [paramsfn defprotocolpath defnav extend-protocolpath :only [paramsfn defprotocolpath defnav extend-protocolpath
nav declarepath providepath select select-one select-one! nav declarepath providepath select select-one select-one!
select-first transform setval replace-in defnavconstructor select-first transform setval replace-in defnavconstructor
select-any selected-any? collected?]] select-any selected-any? collected? traverse]]
) )
@ -1256,3 +1256,15 @@
inc inc
data) 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)))
)))