summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/jvm/clojure/lang/PersistentVector.java2
-rw-r--r--test/clojure/test_clojure/transients.clj6
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!)))))