specter/test/com/rpl/specter/zipper_test.cljx
2016-04-25 17:47:10 -04:00

122 lines
3.5 KiB
Clojure

(ns com.rpl.specter.zipper-test
#+cljs (:require-macros
[cljs.test :refer [is deftest]]
[cljs.test.check.cljs-test :refer [defspec]]
[com.rpl.specter.cljs-test-helpers :refer [for-all+]]
[com.rpl.specter.macros
:refer [declarepath providepath]]
)
(:use
#+clj [clojure.test :only [deftest is]]
#+clj [clojure.test.check.clojure-test :only [defspec]]
#+clj [com.rpl.specter.test-helpers :only [for-all+]]
#+clj [com.rpl.specter.macros
:only [declarepath providepath]]
)
(:require #+clj [clojure.test.check.generators :as gen]
#+clj [clojure.test.check.properties :as prop]
#+cljs [cljs.test.check :as tc]
#+cljs [cljs.test.check.generators :as gen]
#+cljs [cljs.test.check.properties :as prop :include-macros true]
[com.rpl.specter :as s]
[com.rpl.specter.zipper :as z]))
(defspec zipper-end-equivalency-test
(for-all+
[v (gen/not-empty (gen/vector gen/int))
i (gen/vector gen/int)]
(= (s/setval s/END i v)
(s/setval [z/VECTOR-ZIP z/DOWN z/RIGHTMOST z/INNER-RIGHT] i v))
))
(deftest zipper-multi-insert-test
(is (= [1 2 :a :b 3 :a :b 4]
(s/setval [z/VECTOR-ZIP
z/DOWN
z/RIGHT
z/RIGHT
(s/multi-path z/INNER-RIGHT z/INNER-LEFT)
]
[:a :b]
[1 2 3 4]
)
(s/setval [z/VECTOR-ZIP
z/DOWN
z/RIGHT
z/RIGHT
(s/multi-path z/INNER-LEFT z/INNER-RIGHT)
]
[:a :b]
[1 2 3 4]
)
))
)
(deftest zipper-down-up-test
(is (= [1 [2 3 5] 6]
(s/transform [z/VECTOR-ZIP
z/DOWN
z/RIGHT
z/DOWN
z/RIGHT
z/RIGHT
(s/multi-path
s/STAY
[z/UP z/RIGHT])
z/NODE]
inc
[1 [2 3 4] 5]
)))
)
(deftest next-terminate-test
(is (= [2 [3 4 [5]] 6]
(s/transform [z/VECTOR-ZIP z/NEXT-WALK z/NODE number?]
inc
[1 [2 3 [4]] 5])))
(is (= [1 [3 [[]] 5]]
(s/setval [z/VECTOR-ZIP
z/NEXT-WALK
(s/selected? z/NODE number? even?)
z/NODE-SEQ]
[]
[1 2 [3 [[4]] 5] 6]
)
))
)
(deftest zipper-nav-stop-test
(is (= [1]
(s/transform [z/VECTOR-ZIP z/UP z/NODE] inc [1])))
(is (= [1]
(s/transform [z/VECTOR-ZIP z/DOWN z/LEFT z/NODE] inc [1])))
(is (= [1]
(s/transform [z/VECTOR-ZIP z/DOWN z/RIGHT z/NODE] inc [1])))
(is (= []
(s/transform [z/VECTOR-ZIP z/DOWN z/NODE] inc [])))
)
(deftest find-first-test
(is (= [1 [3 [[4]] 5] 6]
(s/setval [z/VECTOR-ZIP
(z/find-first #(and (number? %) (even? %)))
z/NODE-SEQ
]
[]
[1 2 [3 [[4]] 5] 6])
))
)
(deftest nodeseq-expand-test
(is (= [2 [2] [[4 4 4]] 4 4 4 6]
(s/transform [z/VECTOR-ZIP
z/NEXT-WALK
(s/selected? z/NODE number? odd?)
(s/collect-one z/NODE)
z/NODE-SEQ]
(fn [v _]
(repeat v (inc v)))
[1 [2] [[3]] 3 6]
)))
)