hashmap_free_free(m);
}
-static void test_hashmap_foreach_backwards(void) {
- Hashmap *m;
- Iterator i;
- char *val1, *val2, *val3, *val4, *s;
- bool value_found[] = { false, false, false, false };
-
- val1 = strdup("my val1");
- assert_se(val1);
- val2 = strdup("my val2");
- assert_se(val2);
- val3 = strdup("my val3");
- assert_se(val3);
- val4 = strdup("my val4");
- assert_se(val4);
-
- m = hashmap_new(&string_hash_ops);
- hashmap_put(m, "Key 1", val1);
- hashmap_put(m, "Key 2", val2);
- hashmap_put(m, "Key 3", val3);
- hashmap_put(m, "Key 4", val4);
-
- HASHMAP_FOREACH_BACKWARDS(s, m, i) {
- if (!value_found[0] && streq(s, val1))
- value_found[0] = true;
- else if (!value_found[1] && streq(s, val2))
- value_found[1] = true;
- else if (!value_found[2] && streq(s, val3))
- value_found[2] = true;
- else if (!value_found[3] && streq(s, val4))
- value_found[3] = true;
- }
-
- assert_se(m);
- assert_se(value_found[0] && value_found[1] && value_found[2] && value_found[3]);
-
- hashmap_free_free(m);
-}
-
static void test_hashmap_merge(void) {
Hashmap *m;
Hashmap *n;
assert_se(streq(hashmap_first_key(m), "key 2"));
}
-static void test_hashmap_last(void) {
+static void test_hashmap_steal_first_key(void) {
_cleanup_hashmap_free_ Hashmap *m = NULL;
m = hashmap_new(&string_hash_ops);
assert_se(m);
- assert_se(!hashmap_last(m));
- assert_se(hashmap_put(m, "key 1", (void *) (const char *) "val 1") == 1);
- assert_se(streq(hashmap_last(m), "val 1"));
- assert_se(hashmap_put(m, "key 2", (void *) (const char *) "bar") == 1);
- assert_se(streq(hashmap_last(m), "bar"));
- assert_se(hashmap_remove(m, "key 2"));
- assert_se(streq(hashmap_last(m), "val 1"));
+ assert_se(!hashmap_steal_first_key(m));
+ assert_se(hashmap_put(m, "key 1", NULL) == 1);
+ assert_se(streq(hashmap_steal_first_key(m), "key 1"));
+
+ assert_se(hashmap_isempty(m));
}
-static void test_hashmap_steal_first_key(void) {
+static void test_hashmap_steal_first(void) {
_cleanup_hashmap_free_ Hashmap *m = NULL;
+ int seen[3] = {};
+ char *val;
m = hashmap_new(&string_hash_ops);
assert_se(m);
- assert_se(!hashmap_steal_first_key(m));
- assert_se(hashmap_put(m, "key 1", NULL) == 1);
- assert_se(streq(hashmap_steal_first_key(m), "key 1"));
+ assert_se(hashmap_put(m, "key 1", (void*) "1") == 1);
+ assert_se(hashmap_put(m, "key 2", (void*) "22") == 1);
+ assert_se(hashmap_put(m, "key 3", (void*) "333") == 1);
+
+ while ((val = hashmap_steal_first(m)))
+ seen[strlen(val) - 1]++;
+
+ assert(seen[0] == 1 && seen[1] == 1 && seen[2] == 1);
assert_se(hashmap_isempty(m));
}
test_hashmap_remove_and_put();
test_hashmap_ensure_allocated();
test_hashmap_foreach();
- test_hashmap_foreach_backwards();
test_hashmap_foreach_key();
test_hashmap_contains();
test_hashmap_merge();
test_hashmap_size();
test_hashmap_many();
test_hashmap_first_key();
- test_hashmap_last();
test_hashmap_steal_first_key();
+ test_hashmap_steal_first();
test_hashmap_clear_free_free();
test_uint64_compare_func();
test_trivial_compare_func();