diff --git a/CHANGES.md b/CHANGES.md index 075b59e..c64a822 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,7 @@ +## 1.0.2-SNAPSHOT + +* Added `pred=`, `pred<`, `pred>`, `pred<=`, `pred>=` for filtering using common comparisons + ## 1.0.1 * `subselect`/`filterer` can remove entries in source by transforming to a smaller sequence diff --git a/README.md b/README.md index 1e7119f..8cab172 100644 --- a/README.md +++ b/README.md @@ -192,7 +192,7 @@ user> (transform [(srange 4 11) (filterer even?)] Append [:c :d] to every subsequence that has at least two even numbers: ```clojure user> (setval [ALL - (selected? (filterer even?) (view count) #(>= % 2)) + (selected? (filterer even?) (view count) (pred>= 2)) END] [:c :d] [[1 2 3 4 5 6] [7 0 -1] [8 8] []]) diff --git a/src/clj/com/rpl/specter.cljc b/src/clj/com/rpl/specter.cljc index 94404f4..7c5f3d6 100644 --- a/src/clj/com/rpl/specter.cljc +++ b/src/clj/com/rpl/specter.cljc @@ -996,6 +996,13 @@ pred i/pred*) + +(defn ^:direct-nav pred= [v] (pred #(= % v))) +(defn ^:direct-nav pred< [v] (pred #(< % v))) +(defn ^:direct-nav pred> [v] (pred #(> % v))) +(defn ^:direct-nav pred<= [v] (pred #(<= % v))) +(defn ^:direct-nav pred>= [v] (pred #(>= % v))) + (extend-type nil ImplicitNav (implicit-nav [this] STAY)) diff --git a/test/com/rpl/specter/core_test.cljc b/test/com/rpl/specter/core_test.cljc index 44b3887..1b6de84 100644 --- a/test/com/rpl/specter/core_test.cljc +++ b/test/com/rpl/specter/core_test.cljc @@ -1518,6 +1518,15 @@ (is (= [1 :a 3 5] (setval (s/filterer even?) [:a] [1 2 3 4 5]))) ) +(deftest helper-preds-test + (let [data [1 2 2 3 4 0]] + (is (= [2 2] (select [s/ALL (s/pred= 2)] data))) + (is (= [1 2 2 0] (select [s/ALL (s/pred< 3)] data))) + (is (= [1 2 2 3 0] (select [s/ALL (s/pred<= 3)] data))) + (is (= [4] (select [s/ALL (s/pred> 3)] data))) + (is (= [3 4] (select [s/ALL (s/pred>= 3)] data))) + )) + #?(:clj (do (defprotocolpath FooPP)