aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/clojure/clojure/contrib/priority_map.clj17
1 files changed, 5 insertions, 12 deletions
diff --git a/src/main/clojure/clojure/contrib/priority_map.clj b/src/main/clojure/clojure/contrib/priority_map.clj
index 0a1ad51a..6ccf5fd0 100644
--- a/src/main/clojure/clojure/contrib/priority_map.clj
+++ b/src/main/clojure/clojure/contrib/priority_map.clj
@@ -207,18 +207,10 @@ to Clojure's assortment of built-in maps (hash-map and sorted-map).
; cons defines conj behavior
(cons [this e] (let [[item priority] e] (.assoc this item priority)))
- ;This implementation of equiv is a direct translation of the one found in APersistentMap
- (equiv [this o]
- (cond
- (not (instance? Map o)) false
- (not= (count this) (count o)) false
- :else (loop [s (.seq this)]
- (if (nil? s) true
- (let [^java.util.Map$Entry e (first s),
- found (.containsKey ^Map o (.getKey e))]
- (if (or (not found) (not (clojure.lang.Util/equiv (.getValue e) (.get ^Map o (.getKey e)))))
- false
- (recur (next s))))))))
+ ; Like sorted maps, priority maps are equal to other maps provided
+ ; their key-value pairs are the same.
+ (equiv [this o] (= item->priority o))
+ (hashCode [this] (.hashCode item->priority))
;containsKey implements (contains? pm k) behavior
(containsKey [this item] (contains? item->priority item))
@@ -328,6 +320,7 @@ Returns a new priority map with supplied mappings"
h {:a 2 :b 1 :c 3 :d 5 :e 4 :f 3}]
(are [x y] (= x y)
p {:a 2 :b 1 :c 3 :d 5 :e 4 :f 3}
+ (.hashCode p) (.hashCode {:a 2 :b 1 :c 3 :d 5 :e 4 :f 3})
(assoc p :g 1) (assoc h :g 1)
(assoc p :g 0) (assoc h :g 0)
(assoc p :c 4) (assoc h :c 4)