From a687f4a0bc94a651f9c881f33344339de25b3356 Mon Sep 17 00:00:00 2001 From: Nathan Marz Date: Mon, 13 Jun 2016 14:51:20 -0400 Subject: [PATCH] test for traverse + make it work in cljs --- src/clj/com/rpl/specter/impl.cljx | 10 ++++++---- test/com/rpl/specter/core_test.cljx | 16 ++++++++++++++-- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/clj/com/rpl/specter/impl.cljx b/src/clj/com/rpl/specter/impl.cljx index b3f71a3..10aad44 100644 --- a/src/clj/com/rpl/specter/impl.cljx +++ b/src/clj/com/rpl/specter/impl.cljx @@ -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 diff --git a/test/com/rpl/specter/core_test.cljx b/test/com/rpl/specter/core_test.cljx index b4cb852..ec8c48b 100644 --- a/test/com/rpl/specter/core_test.cljx +++ b/test/com/rpl/specter/core_test.cljx @@ -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))) + )))