hashmap: allow NULL key in ordered_hashmap_next()
authorMichal Schmidt <mschmidt@redhat.com>
Tue, 16 Jun 2015 13:46:40 +0000 (15:46 +0200)
committerMichal Schmidt <mschmidt@redhat.com>
Wed, 17 Jun 2015 15:28:44 +0000 (17:28 +0200)
There is no reason to require key to be non-NULL.
Change test_ordered_hashmap_next() to use trivial_hash_ops in order to
test NULL key too.

src/basic/hashmap.c
src/test/test-hashmap.c

index 0ee2f3b..e5f05f3 100644 (file)
@@ -1798,8 +1798,6 @@ void *ordered_hashmap_next(OrderedHashmap *h, const void *key) {
         struct ordered_hashmap_entry *e;
         unsigned hash, idx;
 
-        assert(key);
-
         if (!h)
                 return NULL;
 
index 767cbd9..d0e6500 100644 (file)
@@ -24,38 +24,17 @@ void test_hashmap_funcs(void);
 void test_ordered_hashmap_funcs(void);
 
 static void test_ordered_hashmap_next(void) {
-        OrderedHashmap *m;
-        char *val1, *val2, *val3, *val4, *r;
-
-        m = ordered_hashmap_new(&string_hash_ops);
-        val1 = strdup("val1");
-        assert_se(val1);
-        val2 = strdup("val2");
-        assert_se(val2);
-        val3 = strdup("val3");
-        assert_se(val3);
-        val4 = strdup("val4");
-        assert_se(val4);
-
-        ordered_hashmap_put(m, "key 1", val1);
-        ordered_hashmap_put(m, "key 2", val2);
-        ordered_hashmap_put(m, "key 3", val3);
-        ordered_hashmap_put(m, "key 4", val4);
-
-        r = ordered_hashmap_next(m, "key 1");
-        assert_se(streq(r, val2));
-        r = ordered_hashmap_next(m, "key 2");
-        assert_se(streq(r, val3));
-        r = ordered_hashmap_next(m, "key 3");
-        assert_se(streq(r, val4));
-        r = ordered_hashmap_next(m, "key 4");
-        assert_se(!r);
-        r = ordered_hashmap_next(NULL, "key 1");
-        assert_se(!r);
-        r = ordered_hashmap_next(m, "key 5");
-        assert_se(!r);
-
-        ordered_hashmap_free_free(m);
+        _cleanup_ordered_hashmap_free_ OrderedHashmap *m = NULL;
+        int i;
+
+        assert_se(m = ordered_hashmap_new(NULL));
+        for (i = -2; i <= 2; i++)
+                assert_se(ordered_hashmap_put(m, INT_TO_PTR(i), INT_TO_PTR(i+10)) == 1);
+        for (i = -2; i <= 1; i++)
+                assert_se(ordered_hashmap_next(m, INT_TO_PTR(i)) == INT_TO_PTR(i+11));
+        assert_se(!ordered_hashmap_next(m, INT_TO_PTR(2)));
+        assert_se(!ordered_hashmap_next(NULL, INT_TO_PTR(1)));
+        assert_se(!ordered_hashmap_next(m, INT_TO_PTR(3)));
 }
 
 static void test_uint64_compare_func(void) {