summaryrefslogtreecommitdiff
path: root/tests/test-hmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-hmap.c')
-rw-r--r--tests/test-hmap.c32
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);
}