1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
/* libmisc/tests/test_map.c - Tests for <libmisc/map.h>
*
* Copyright (C) 2025 Luke T. Shumaker <lukeshu@lukeshu.com>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
#include <libmisc/map.h>
#include "test.h"
MAP_DECLARE(intmap, int, int);
int main() {
struct intmap m = {};
test_assert(map_len(&m) == 0);
int *v = map_store(&m, 3, 8);
test_assert(v && *v == 8);
test_assert(map_len(&m) == 1);
v = map_load(&m, 3);
test_assert(v);
test_assert(*v == 8);
v = NULL;
test_assert(map_del(&m, 3));
test_assert(map_len(&m) == 0);
test_assert(!map_del(&m, 3));
map_store(&m, 1, 11);
map_store(&m, 2, 12);
map_store(&m, 3, 13);
test_assert(map_len(&m) == 3);
bool seen_1 = false, seen_2 = false, seen_3 = false;
MAP_FOREACH(&m, ik, iv) {
switch (ik) {
case 1: seen_1 = true; break;
case 2: seen_2 = true; break;
case 3: seen_3 = true; break;
}
switch (ik) {
case 1: case 2: case 3:
map_store(&m, ik+20, (*iv)+20);
test_assert(map_del(&m, ik));
test_assert(!map_del(&m, ik));
test_assert(map_load(&m, ik) == NULL);
break;
}
}
test_assert(map_len(&m) == 3);
test_assert(seen_1); v = map_load(&m, 21); test_assert(v && *v == 31); v = map_load(&m, 1); test_assert(!v);
test_assert(seen_2); v = map_load(&m, 22); test_assert(v && *v == 32); v = map_load(&m, 2); test_assert(!v);
test_assert(seen_3); v = map_load(&m, 23); test_assert(v && *v == 33); v = map_load(&m, 3); test_assert(!v);
map_free(&m);
test_assert(map_len(&m) == 0);
return 0;
}
|