/* libmisc/tests/test_map.c - Tests for * * Copyright (C) 2025 Luke T. Shumaker * SPDX-License-Identifier: AGPL-3.0-or-later */ #include #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; }