]> git.ipfire.org Git - thirdparty/git.git/blame - t/t0011-hashmap.sh
Merge branch 'rs/imap-send-use-xsnprintf'
[thirdparty/git.git] / t / t0011-hashmap.sh
CommitLineData
6a364ced
KB
1#!/bin/sh
2
3test_description='test hashmap and string hash functions'
956d2e46
ÆAB
4
5TEST_PASSES_SANITIZE_LEAK=true
6a364ced
KB
6. ./test-lib.sh
7
8test_hashmap() {
7c18cbd5 9 echo "$1" | test-tool hashmap $3 > actual &&
6a364ced
KB
10 echo "$2" > expect &&
11 test_cmp expect actual
12}
13
6a364ced
KB
14test_expect_success 'put' '
15
16test_hashmap "put key1 value1
17put key2 value2
18put fooBarFrotz value3
19put foobarfrotz value4
20size" "NULL
21NULL
22NULL
23NULL
2464 4"
25
26'
27
28test_expect_success 'put (case insensitive)' '
29
30test_hashmap "put key1 value1
31put key2 value2
32put fooBarFrotz value3
33size" "NULL
34NULL
35NULL
3664 3" ignorecase
37
38'
39
40test_expect_success 'replace' '
41
42test_hashmap "put key1 value1
43put key1 value2
44put fooBarFrotz value3
45put fooBarFrotz value4
46size" "NULL
47value1
48NULL
49value3
5064 2"
51
52'
53
54test_expect_success 'replace (case insensitive)' '
55
56test_hashmap "put key1 value1
57put Key1 value2
58put fooBarFrotz value3
59put foobarfrotz value4
60size" "NULL
61value1
62NULL
63value3
6464 2" ignorecase
65
66'
67
68test_expect_success 'get' '
69
70test_hashmap "put key1 value1
71put key2 value2
72put fooBarFrotz value3
73put foobarfrotz value4
74get key1
75get key2
76get fooBarFrotz
77get notInMap" "NULL
78NULL
79NULL
80NULL
81value1
82value2
83value3
84NULL"
85
86'
87
88test_expect_success 'get (case insensitive)' '
89
90test_hashmap "put key1 value1
91put key2 value2
92put fooBarFrotz value3
93get Key1
94get keY2
95get foobarfrotz
96get notInMap" "NULL
97NULL
98NULL
99value1
100value2
101value3
102NULL" ignorecase
103
104'
105
106test_expect_success 'add' '
107
108test_hashmap "add key1 value1
109add key1 value2
110add fooBarFrotz value3
111add fooBarFrotz value4
112get key1
113get fooBarFrotz
114get notInMap" "value2
115value1
116value4
117value3
118NULL"
119
120'
121
122test_expect_success 'add (case insensitive)' '
123
124test_hashmap "add key1 value1
125add Key1 value2
126add fooBarFrotz value3
127add foobarfrotz value4
128get key1
129get Foobarfrotz
130get notInMap" "value2
131value1
132value4
133value3
134NULL" ignorecase
135
136'
137
138test_expect_success 'remove' '
139
140test_hashmap "put key1 value1
141put key2 value2
142put fooBarFrotz value3
143remove key1
144remove key2
145remove notInMap
146size" "NULL
147NULL
148NULL
149value1
150value2
151NULL
15264 1"
153
154'
155
156test_expect_success 'remove (case insensitive)' '
157
158test_hashmap "put key1 value1
159put key2 value2
160put fooBarFrotz value3
161remove Key1
162remove keY2
163remove notInMap
164size" "NULL
165NULL
166NULL
167value1
168value2
169NULL
17064 1" ignorecase
171
172'
173
174test_expect_success 'iterate' '
e1e7a771
JK
175 test-tool hashmap >actual.raw <<-\EOF &&
176 put key1 value1
177 put key2 value2
178 put fooBarFrotz value3
179 iterate
180 EOF
181
182 cat >expect <<-\EOF &&
183 NULL
184 NULL
185 NULL
186 fooBarFrotz value3
187 key1 value1
188 key2 value2
189 EOF
190
191 sort <actual.raw >actual &&
192 test_cmp expect actual
6a364ced
KB
193'
194
195test_expect_success 'iterate (case insensitive)' '
e1e7a771
JK
196 test-tool hashmap ignorecase >actual.raw <<-\EOF &&
197 put key1 value1
198 put key2 value2
199 put fooBarFrotz value3
200 iterate
201 EOF
202
203 cat >expect <<-\EOF &&
204 NULL
205 NULL
206 NULL
207 fooBarFrotz value3
208 key1 value1
209 key2 value2
210 EOF
211
212 sort <actual.raw >actual &&
213 test_cmp expect actual
6a364ced
KB
214'
215
216test_expect_success 'grow / shrink' '
217
218 rm -f in &&
219 rm -f expect &&
220 for n in $(test_seq 51)
221 do
222 echo put key$n value$n >> in &&
db5875aa 223 echo NULL >> expect || return 1
6a364ced
KB
224 done &&
225 echo size >> in &&
226 echo 64 51 >> expect &&
227 echo put key52 value52 >> in &&
99094a7a 228 echo NULL >> expect &&
6a364ced
KB
229 echo size >> in &&
230 echo 256 52 >> expect &&
231 for n in $(test_seq 12)
232 do
233 echo remove key$n >> in &&
db5875aa 234 echo value$n >> expect || return 1
6a364ced
KB
235 done &&
236 echo size >> in &&
237 echo 256 40 >> expect &&
238 echo remove key40 >> in &&
239 echo value40 >> expect &&
240 echo size >> in &&
241 echo 64 39 >> expect &&
74615c2a 242 test-tool hashmap <in >out &&
6a364ced
KB
243 test_cmp expect out
244
245'
246
7b64d42d
KB
247test_expect_success 'string interning' '
248
249test_hashmap "intern value1
250intern Value1
251intern value2
252intern value2
253" "value1
254Value1
255value2
256value2"
257
258'
259
6a364ced 260test_done