diff options
-rw-r--r-- | src/jvm/clojure/lang/PersistentVector.java | 2 | ||||
-rw-r--r-- | test/clojure/test_clojure/transients.clj | 6 |
2 files changed, 5 insertions, 3 deletions
diff --git a/src/jvm/clojure/lang/PersistentVector.java b/src/jvm/clojure/lang/PersistentVector.java index b842fc43..460a4069 100644 --- a/src/jvm/clojure/lang/PersistentVector.java +++ b/src/jvm/clojure/lang/PersistentVector.java @@ -625,7 +625,7 @@ static final class TransientVector extends AFn implements ITransientVector, Coun } if(shift > 5 && newroot.array[1] == null) { - newroot = (Node) newroot.array[0]; + newroot = ensureEditable((Node) newroot.array[0]); newshift -= 5; } root = newroot; diff --git a/test/clojure/test_clojure/transients.clj b/test/clojure/test_clojure/transients.clj index 8444e2a3..97dfed0f 100644 --- a/test/clojure/test_clojure/transients.clj +++ b/test/clojure/test_clojure/transients.clj @@ -3,8 +3,10 @@ (deftest popping-off (testing "across a node boundary" - (let [v (-> (range 33) vec)] - (is (= (subvec v 0 31) (-> v transient pop! pop! persistent!))))) + (are [n] + (let [v (-> (range n) vec)] + (= (subvec v 0 (- n 2)) (-> v transient pop! pop! persistent!))) + 33 (+ 32 (inc (* 32 32))) (+ 32 (inc (* 32 32 32))))) (testing "off the end" (is (thrown-with-msg? IllegalStateException #"Can't pop empty vector" (-> [] transient pop!))))) |