diff --git a/test/clojure/core_test/partial.cljc b/test/clojure/core_test/partial.cljc new file mode 100644 index 0000000..c9e49e9 --- /dev/null +++ b/test/clojure/core_test/partial.cljc @@ -0,0 +1,25 @@ +(ns clojure.core-test.partial + (:require [clojure.test :as t])) + +(defn test-fn [& args] + (into [] args)) + +(t/deftest test-partial + (let [simple-use (partial inc 2)] + (t/is (= 3 (simple-use)))) + (let [lazily-evaluated (partial inc 2 3)] + #?(:clj (t/is (thrown? Exception (lazily-evaluated))) + :cljs (t/is (thrown? js/Error (lazily-evaluated))))) + (let [variadic (partial test-fn 1 2 3)] + (t/is (= [1 2 3 4] (variadic 4))) + (t/is (= [1 2 3 4 5] (variadic 4 5)))) + (let [infinite-sequence (partial #(take %2 %1) (range))] + (t/is (= '(0 1 2 3 4) (infinite-sequence 5))) + (t/is (= '(0 1 2) (infinite-sequence 3)))) + (let [partial-partial ((partial partial) test-fn) + pppartial (partial partial-partial :inner)] + (t/is (= [:inner :outer] (partial-partial :inner :outer))) + (t/is (= [:inner :outer] (pppartial :outer)))) + (let [seq-of-partials (map #(partial * %1 %2) (range) (range))] + (t/is (= (map #(* % % %) (range 5)) + (map #(%1 %2) seq-of-partials (range 5))))))