summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/clj/clojure/data.clj15
-rw-r--r--test/clojure/test_clojure/data.clj4
2 files changed, 14 insertions, 5 deletions
diff --git a/src/clj/clojure/data.clj b/src/clj/clojure/data.clj
index f5730016..8f9a027d 100644
--- a/src/clj/clojure/data.clj
+++ b/src/clj/clojure/data.clj
@@ -72,12 +72,19 @@
java.util.Map
(equality-partition [x] :map))
+(defn- as-set-value
+ [s]
+ (if (set? s) s (into #{} s)))
+
(extend-protocol Diff
java.util.Set
- (diff-similar [a b]
- [(not-empty (set/difference a b))
- (not-empty (set/difference b a))
- (not-empty (set/intersection a b))])
+ (diff-similar
+ [a b]
+ (let [aval (as-set-value a)
+ bval (as-set-value b)]
+ [(not-empty (set/difference aval bval))
+ (not-empty (set/difference bval aval))
+ (not-empty (set/intersection aval bval))]))
java.util.List
(diff-similar [a b]
diff --git a/test/clojure/test_clojure/data.clj b/test/clojure/test_clojure/data.clj
index 5c96c86d..346983cf 100644
--- a/test/clojure/test_clojure/data.clj
+++ b/test/clojure/test_clojure/data.clj
@@ -7,7 +7,8 @@
; You must not remove this notice, or any other, from this software.
(ns clojure.test-clojure.data
- (:use clojure.data clojure.test))
+ (:use clojure.data clojure.test)
+ (import java.util.HashSet))
(deftest diff-test
(are [d x y] (= d (diff x y))
@@ -23,5 +24,6 @@
[#{:a} #{:b} #{:c :d}] #{:a :c :d} #{:b :c :d}
[nil nil {:a 1}] {:a 1} {:a 1}
[{:a #{2}} {:a #{4}} {:a #{3}}] {:a #{2 3}} {:a #{3 4}}
+ [#{1} #{3} #{2}] (HashSet. [1 2]) (HashSet. [2 3])
[{:a {:c [1]}} {:a {:c [0]}} {:a {:c [nil 2] :b 1}}] {:a {:b 1 :c [1 2]}} {:a {:b 1 :c [0 2]}}))