From df8b3492f28dee9ca8692c11c3934f6b3eaeb933 Mon Sep 17 00:00:00 2001 From: Andy Fingerhut Date: Fri, 9 Mar 2012 06:58:14 -0800 Subject: [PATCH 1/2] Correct disj! so it can remove multiple items Signed-off-by: Stuart Halloway --- src/clj/clojure/core.clj | 2 +- test/clojure/test_clojure/transients.clj | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/clj/clojure/core.clj b/src/clj/clojure/core.clj index e05a263..0410756 100644 --- a/src/clj/clojure/core.clj +++ b/src/clj/clojure/core.clj @@ -2998,7 +2998,7 @@ ([^clojure.lang.ITransientSet set key] (. set (disjoin key))) ([set key & ks] - (let [ret (disj set key)] + (let [ret (. set (disjoin key))] (if ks (recur ret (first ks) (next ks)) ret)))) diff --git a/test/clojure/test_clojure/transients.clj b/test/clojure/test_clojure/transients.clj index 1545c10..2a88bdd 100644 --- a/test/clojure/test_clojure/transients.clj +++ b/test/clojure/test_clojure/transients.clj @@ -23,4 +23,8 @@ (is (= [0 {}] (let [ks (concat (range 7) [(hash-obj 42) (hash-obj 42)]) m (zipmap ks ks) dm (persistent! (reduce dissoc! (transient m) (keys m)))] - [(count dm) dm]))))) \ No newline at end of file + [(count dm) dm]))))) + +(deftest test-disj! + (testing "disjoin multiple items in one call" + (is (= #{5 20} (-> #{5 10 15 20} transient (disj! 10 15) persistent!))))) -- 1.7.3.5 From cd138d41d78b1fe139aa9dcac8aa839d0d424580 Mon Sep 17 00:00:00 2001 From: Stuart Halloway Date: Fri, 8 Jun 2012 11:34:47 -0400 Subject: [PATCH 2/2] corrected disj! needs to be nonreflective --- src/clj/clojure/core.clj | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/src/clj/clojure/core.clj b/src/clj/clojure/core.clj index 0410756..448be68 100644 --- a/src/clj/clojure/core.clj +++ b/src/clj/clojure/core.clj @@ -2997,7 +2997,7 @@ ([set] set) ([^clojure.lang.ITransientSet set key] (. set (disjoin key))) - ([set key & ks] + ([^clojure.lang.ITransientSet set key & ks] (let [ret (. set (disjoin key))] (if ks (recur ret (first ks) (next ks)) -- 1.7.3.5