add VOID selector

This commit is contained in:
Nathan Marz 2016-01-10 10:35:18 -05:00
parent 732a6422e6
commit c9b78ce0d6
2 changed files with 23 additions and 0 deletions

View file

@ -135,6 +135,17 @@
;; Built-in pathing and context operations
(defpath
^{:doc "Stops navigation at this point. For selection returns nothing and for
transformation returns the structure unchanged"}
VOID
[]
(select* [this structure next-fn]
nil )
(transform* [this structure next-fn]
structure
))
(def ALL (comp-paths (i/->AllStructurePath)))
(def VAL (i/->ValCollect))

View file

@ -566,6 +566,18 @@
(s/setval [:a s/NIL->VECTOR s/END] [:b] nil)))
)
(defspec void-test
(for-all+
[s1 (gen/vector (limit-size 5 gen/int))]
(and
(empty? (s/select s/VOID s1))
(empty? (s/select [s/VOID s/ALL s/ALL s/ALL s/ALL] s1))
(= s1 (s/transform s/VOID inc s1))
(= s1 (s/transform [s/ALL s/VOID s/ALL] inc s1))
(= (s/transform [s/ALL (s/cond-path even? nil odd? s/VOID)] inc s1)
(s/transform [s/ALL even?] inc s1))
)))
#+clj
(deftest large-params-test
(let [path (apply s/comp-paths (repeat 25 s/keypath))