From cb8fc0c11b8224577e216b7e10e9ce2646b18bc3 Mon Sep 17 00:00:00 2001 From: Antoine Belvire Date: Mon, 10 Nov 2025 21:26:26 +0100 Subject: [PATCH] Test pop! This closes #397. --- test/clojure/core_test/pop_bang.cljc | 35 ++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 test/clojure/core_test/pop_bang.cljc diff --git a/test/clojure/core_test/pop_bang.cljc b/test/clojure/core_test/pop_bang.cljc new file mode 100644 index 0000000..a626c67 --- /dev/null +++ b/test/clojure/core_test/pop_bang.cljc @@ -0,0 +1,35 @@ +(ns clojure.core-test.pop-bang + (:require [clojure.test :refer [are deftest is testing]] + [clojure.core-test.portability #?(:cljs :refer-macros :default :refer) [when-var-exists]])) + +(when-var-exists pop! + (deftest test-pop! + + (testing "nominal cases" + (are [expected vec] (= expected (persistent! (pop! (transient vec)))) + [] [nil] + [] [1] + [1 2] [1 2 3] + [:c :b] [:c :b :a])) + + (testing "cannot pop! empty vector" + (is (thrown? #?(:cljs js/Error :default Exception) (pop! (transient []))))) + + (testing "cannot pop! after call to persistent!" + (let [t (transient [0 1]), _ (persistent! t)] + (is (thrown? #?(:cljs js/Error :cljr Exception :default Error) (pop! t))))) + + (testing "bad shapes" + (are [arg] (thrown? #?(:cljs js/Error :default Exception) (pop! arg)) + (transient {:a 0}) + (transient #{0}) + [0] + '(0) + #{0} + (range 3) + true + false + "s" + 3.14 + 42 + nil))))