diff options
Diffstat (limited to 'tests/test-hmap.c')
-rw-r--r-- | tests/test-hmap.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/tests/test-hmap.c b/tests/test-hmap.c index 47b475538..e50c7c380 100644 --- a/tests/test-hmap.c +++ b/tests/test-hmap.c @@ -275,6 +275,38 @@ test_hmap_for_each_safe(hash_func *hash) } } assert(n == n_remaining); + hmap_destroy(&hmap); + + /* Test short version (without next variable). */ + make_hmap(&hmap, elements, values, n, hash); + + i = 0; + n_remaining = n; + HMAP_FOR_EACH_SAFE (e, node, &hmap) { + assert(i < n); + if (pattern & (1ul << e->value)) { + size_t j; + hmap_remove(&hmap, &e->node); + for (j = 0; ; j++) { + assert(j < n_remaining); + if (values[j] == e->value) { + values[j] = values[--n_remaining]; + break; + } + } + } + check_hmap(&hmap, values, n_remaining, hash); + i++; + } + assert(i == n); + assert(e == NULL); + + for (i = 0; i < n; i++) { + if (pattern & (1ul << i)) { + n_remaining++; + } + } + assert(n == n_remaining); hmap_destroy(&hmap); } |