aboutsummaryrefslogtreecommitdiff
path: root/src/clojure/contrib/test_contrib
diff options
context:
space:
mode:
authorStuart Sierra <mail@stuartsierra.com>2009-06-02 20:25:00 +0000
committerStuart Sierra <mail@stuartsierra.com>2009-06-02 20:25:00 +0000
commit016af1ddecea945f0ae9e6354e2bd006efcd7a04 (patch)
tree4e91bbe3500231802b7ebf4dea6989937ce001dc /src/clojure/contrib/test_contrib
parent62976a684da2984bec184324dfb3269b7de916e5 (diff)
fnmap.clj: added new library; maps with custom implementations
Diffstat (limited to 'src/clojure/contrib/test_contrib')
-rw-r--r--src/clojure/contrib/test_contrib/fnmap.clj39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/clojure/contrib/test_contrib/fnmap.clj b/src/clojure/contrib/test_contrib/fnmap.clj
new file mode 100644
index 00000000..ccd7a54a
--- /dev/null
+++ b/src/clojure/contrib/test_contrib/fnmap.clj
@@ -0,0 +1,39 @@
+(ns clojure.contrib.test-contrib.fnmap
+ (:use clojure.contrib.fnmap
+ clojure.contrib.test-is))
+
+(deftest acts-like-map
+ (let [m1 (fnmap get assoc :key1 1 :key2 2)]
+ (are (= _2 (get m1 _1))
+ :key1 1
+ :key2 2
+ :nonexistent-key nil)
+ (are (= _2 (_1 m1))
+ :key1 1
+ :key2 2
+ :nonexistent-key nil)
+ (let [m2 (assoc m1 :key3 3 :key4 4)]
+ (are (= _2 (get m2 _1))
+ :key1 1
+ :key2 2
+ :key3 3
+ :key4 4
+ :nonexistent-key nil))))
+
+(defn assoc-validate [m key value]
+ (if (integer? value)
+ (assoc m key value)
+ (throw (Exception. "Only integers allowed in this map!"))))
+
+(deftest validators
+ (let [m (fnmap get assoc-validate)]
+ (is (= 2 (:key2 (assoc m :key2 2))))
+ (is (thrown? Exception (assoc m :key3 3.14)))))
+
+(defn get-transform [m key]
+ (when-let [value (m key)]
+ (- value)))
+
+(deftest transforms
+ (let [m (fnmap get-transform assoc)]
+ (is (= -2 (:key2 (assoc m :key2 2))))))