summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Wolfe <jason@w01fe.com>2010-09-21 11:56:13 -0700
committerStuart Halloway <stu@thinkrelevance.com>2010-10-12 19:47:07 -0400
commit5ca0c1feb7f7260aad257e52f2ddb0d426e2db77 (patch)
tree518b40f3fec0c804e8d6acc3ab61f3fc56277dfb
parent351e05a242740cc415524d03e1d424de516eed75 (diff)
Fix clojure.set/subset? and superset? bugs with false/nil elements
Signed-off-by: Stuart Halloway <stu@thinkrelevance.com>
-rw-r--r--src/clj/clojure/set.clj4
-rw-r--r--test/clojure/test_clojure/clojure_set.clj25
2 files changed, 23 insertions, 6 deletions
diff --git a/src/clj/clojure/set.clj b/src/clj/clojure/set.clj
index af0f65f6..69233ad1 100644
--- a/src/clj/clojure/set.clj
+++ b/src/clj/clojure/set.clj
@@ -145,7 +145,7 @@
:tag Boolean}
[set1 set2]
(and (<= (count set1) (count set2))
- (every? set2 set1)))
+ (every? #(contains? set2 %) set1)))
(defn superset?
"Is set1 a superset of set2?"
@@ -153,7 +153,7 @@
:tag Boolean}
[set1 set2]
(and (>= (count set1) (count set2))
- (every? set1 set2)))
+ (every? #(contains? set1 %) set2)))
(comment
(refer 'set)
diff --git a/test/clojure/test_clojure/clojure_set.clj b/test/clojure/test_clojure/clojure_set.clj
index 1aa745a4..8d511af4 100644
--- a/test/clojure/test_clojure/clojure_set.clj
+++ b/test/clojure/test_clojure/clojure_set.clj
@@ -187,11 +187,19 @@
#{} #{1}
#{1} #{1}
#{1 2} #{1 2}
- #{1 2} #{1 2 42})
+ #{1 2} #{1 2 42}
+ #{false} #{false}
+ #{nil} #{nil}
+ #{nil} #{nil false}
+ #{1 2 nil} #{1 2 nil 4})
(are [notsub super] (not (set/subset? notsub super))
#{1} #{}
#{2} #{1}
- #{1 3} #{1}))
+ #{1 3} #{1}
+ #{nil} #{false}
+ #{false} #{nil}
+ #{false nil} #{nil}
+ #{1 2 nil} #{1 2}))
(deftest test-superset?
(are [super sub] (set/superset? super sub)
@@ -199,8 +207,17 @@
#{1} #{}
#{1} #{1}
#{1 2} #{1 2}
- #{1 2 42} #{1 2})
+ #{1 2 42} #{1 2}
+ #{false} #{false}
+ #{nil} #{nil}
+ #{false nil} #{false}
+ #{1 2 4 nil false} #{1 2 nil})
(are [notsuper sub] (not (set/superset? notsuper sub))
#{} #{1}
#{2} #{1}
- #{1} #{1 3}))
+ #{1} #{1 3}
+ #{nil} #{false}
+ #{false} #{nil}
+ #{nil} #{false nil}
+ #{nil 2 3} #{false nil 2 3}))
+