Skip to content

Commit 020db07

Browse files
authored
Test assoc (#781)
This closes #152.
1 parent b7882f5 commit 020db07

1 file changed

Lines changed: 79 additions & 0 deletions

File tree

test/clojure/core_test/assoc.cljc

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
(ns clojure.core-test.assoc
2+
(:require [clojure.test :refer [deftest testing is are]]
3+
[clojure.core-test.portability #?(:cljs :refer-macros :default :refer) [when-var-exists]]))
4+
5+
(when-var-exists assoc
6+
(deftest test-assoc
7+
8+
(testing "maps"
9+
(testing "maps - single value"
10+
(are [expected map key val] (= expected (assoc map key val))
11+
{nil nil} nil nil nil
12+
{:a 1} nil :a 1
13+
{:a 1} {} :a 1
14+
{:a 1 :b 2} {:a 1} :b 2
15+
{:a 3 :b 2} {:a 1 :b 2} :a 3))
16+
(testing "maps - multiple values"
17+
(are [expected map kvs] (= expected (apply assoc map kvs))
18+
{:a 1 :b 2} nil [:a 1 :b 2]
19+
{:a 1 :b 2} {} [:a 1 :b 2]
20+
{:a 1 :b 3} {} [:a 1 :b 2 :b 3]
21+
{:a 1 :b 3 :c 5 :d 7} {:a 1 :b 2} [:b 3 :c 5 :d 7]))
22+
(testing "maps - sorted type preservation"
23+
(is (sorted? (assoc (sorted-map) :a 1 :b 2)))
24+
(is (sorted? (assoc (sorted-map :a 1 :b 2) :b 3)))))
25+
26+
(testing "vectors"
27+
(testing "vectors - single value"
28+
(are [expected vec index val] (= expected (assoc vec index val))
29+
[nil] [] 0 nil
30+
[0] [] 0 0
31+
[0 3 2] [0 1 2] 1 3
32+
[0 1 2 3] [0 1 2] 3 3))
33+
(testing "vectors - multiple values"
34+
; assoc coll index-1 val-1 index-2 val-2 ...
35+
(are [expected vec ivs] (= expected (apply assoc vec ivs))
36+
[1] [] [0 1]
37+
[1 2] [] [0 1 1 2]
38+
[1 3 5 7] [1 2] [1 3 2 5 3 7]))
39+
(testing "vectors - out-of-bounds indices"
40+
(are [vec ivs] (thrown? #?(:cljs js/Error :default Exception) (apply assoc vec ivs))
41+
[] [-1 0]
42+
[] [1 0]
43+
[0 1 2] [-1 -1]
44+
[0 1 2] [4 4]
45+
[1 2] [1 3 3 5]
46+
[1 2] [-1 3 2 5]
47+
[1 2] [-1 3 3 5])))
48+
49+
(testing "meta preservation"
50+
(let [test-meta {:me "ta"}
51+
with-test-meta #(with-meta % test-meta)
52+
with-test-meta? #(= test-meta (meta %))]
53+
(are [coll kvs] (with-test-meta? (apply assoc (with-test-meta coll) kvs))
54+
{} [:a 1]
55+
{:a 1} [:a 3 :b 5]
56+
[] [0 1]
57+
[1] [0 3 1 5])))
58+
59+
(testing "bad shape"
60+
(testing "bad shape - odd number of args"
61+
(are [coll kvs] #?(; cljs seems to tolerate odd number of args and assume that missing value is nil
62+
:cljs (= (apply assoc coll (conj kvs nil)) (apply assoc coll kvs))
63+
; other implementations throw
64+
:default (thrown? Exception (apply assoc coll kvs)))
65+
{:a 1} [:b]
66+
{:a 1} [:b 2 :c]
67+
{:a 1} [:b 2 :c 3 :d]
68+
[1] [0]
69+
[1] [0 1 1]
70+
[1] [0 1 1 2 2]))
71+
(testing "bad shape - not a map nor a vector"
72+
(are [coll] (thrown? #?(:cljs js/Error :default Exception) (assoc coll 1 3))
73+
'(0 1 2)
74+
#{0 1 2}
75+
true
76+
false
77+
:k
78+
42
79+
3.14)))))

0 commit comments

Comments
 (0)