Code

Merged branch 'master' of git://git.tokkee.org/sysdb.
[sysdb.git] / t / utils / llist_test.c
index 9539c910bc9acbe3c73b8ba62d4f9c47e695380b..cc9954d98662c76f89ef32f4e9416ea178073017 100644 (file)
@@ -80,7 +80,7 @@ populate(void)
        }
 } /* populate */
 
-START_TEST(test_sdb_llist_clone)
+START_TEST(test_clone)
 {
        sdb_llist_t *clone;
        size_t i;
@@ -100,7 +100,7 @@ START_TEST(test_sdb_llist_clone)
 }
 END_TEST
 
-START_TEST(test_sdb_llist_destroy)
+START_TEST(test_destroy)
 {
        size_t i;
        populate();
@@ -115,7 +115,26 @@ START_TEST(test_sdb_llist_destroy)
 }
 END_TEST
 
-START_TEST(test_sdb_llist_append)
+START_TEST(test_clear)
+{
+       size_t i;
+       populate();
+       sdb_llist_clear(list);
+
+       for (i = 0; i < SDB_STATIC_ARRAY_LEN(golden_data); ++i) {
+               fail_unless(golden_data[i].ref_cnt == 1,
+                               "sdb_llist_clear() did not deref element %s",
+                               golden_data[i].name);
+       }
+
+       i = sdb_llist_len(list);
+       fail_unless(i == 0,
+                       "sdb_llist_clear() left %zu elements in the list; "
+                       "expected: 0", i);
+}
+END_TEST
+
+START_TEST(test_append)
 {
        size_t i;
 
@@ -138,7 +157,7 @@ START_TEST(test_sdb_llist_append)
 }
 END_TEST
 
-START_TEST(test_sdb_llist_insert)
+START_TEST(test_insert)
 {
        size_t i;
        for (i = 0; i < SDB_STATIC_ARRAY_LEN(golden_data); ++i) {
@@ -170,15 +189,15 @@ START_TEST(test_validate_insert)
 }
 END_TEST
 
-START_TEST(test_sdb_llist_get)
+START_TEST(test_get)
 {
        size_t i;
        populate();
        for (i = 0; i < SDB_STATIC_ARRAY_LEN(golden_data); ++i) {
                sdb_object_t *check = sdb_llist_get(list, i);
                fail_unless(check == &golden_data[i],
-                               "sdb_llist_get() = NULL; expected: %p",
-                               &golden_data[i]);
+                               "sdb_llist_get() = %p; expected: %p",
+                               check, &golden_data[i]);
                fail_unless(check->ref_cnt == 3,
                                "sdb_llist_get() didn't increment reference count; got: %i; "
                                "expected: 3", check->ref_cnt);
@@ -187,6 +206,35 @@ START_TEST(test_sdb_llist_get)
 }
 END_TEST
 
+START_TEST(test_remove_by_name)
+{
+       /* "random" indexes */
+       int indexes[] = { 4, 5, 3, 6, 2, 0, 1 };
+       size_t i;
+
+       populate();
+
+       for (i = 0; i < SDB_STATIC_ARRAY_LEN(indexes); ++i) {
+               sdb_object_t *check;
+
+               fail_unless((size_t)indexes[i] < SDB_STATIC_ARRAY_LEN(golden_data),
+                               "INTERNAL ERROR: invalid index %i", indexes[i]);
+
+               check = sdb_llist_remove_by_name(list, golden_data[indexes[i]].name);
+               fail_unless(check == &golden_data[indexes[i]],
+                               "sdb_llist_remove_by_name() = %p; expected: %p",
+                               check, &golden_data[indexes[i]]);
+               fail_unless(check->ref_cnt == 2,
+                               "sdb_llist_remove_by_name() returned unexpected reference "
+                               "count; got: %i; expected: 2", check->ref_cnt);
+
+               check = sdb_llist_remove_by_name(list, golden_data[indexes[i]].name);
+               fail_unless(check == NULL,
+                               "sdb_llist_remove_by_name() did not remove the element");
+       }
+}
+END_TEST
+
 static int
 dummy_lookup(const sdb_object_t __attribute__((unused)) *obj,
                const void __attribute__((unused)) *user_data)
@@ -194,7 +242,7 @@ dummy_lookup(const sdb_object_t __attribute__((unused)) *obj,
        return 0;
 } /* dummy_lookup */
 
-START_TEST(test_sdb_llist_search)
+START_TEST(test_search)
 {
        size_t i;
        populate();
@@ -238,7 +286,7 @@ START_TEST(test_sdb_llist_search)
 }
 END_TEST
 
-START_TEST(test_sdb_llist_shift)
+START_TEST(test_shift)
 {
        size_t i;
        populate();
@@ -258,7 +306,7 @@ START_TEST(test_sdb_llist_shift)
 }
 END_TEST
 
-START_TEST(test_sdb_llist_iter)
+START_TEST(test_iter)
 {
        sdb_llist_iter_t *iter;
        size_t i;
@@ -287,7 +335,7 @@ START_TEST(test_sdb_llist_iter)
 }
 END_TEST
 
-START_TEST(test_sdb_llist_iter_remove)
+START_TEST(test_iter_remove)
 {
        sdb_llist_iter_t *iter;
        sdb_object_t *check;
@@ -330,16 +378,18 @@ util_llist_suite(void)
 
        tc = tcase_create("core");
        tcase_add_checked_fixture(tc, setup, teardown);
-       tcase_add_test(tc, test_sdb_llist_clone);
-       tcase_add_test(tc, test_sdb_llist_destroy);
-       tcase_add_test(tc, test_sdb_llist_append);
-       tcase_add_test(tc, test_sdb_llist_insert);
+       tcase_add_test(tc, test_clone);
+       tcase_add_test(tc, test_destroy);
+       tcase_add_test(tc, test_clear);
+       tcase_add_test(tc, test_append);
+       tcase_add_test(tc, test_insert);
        tcase_add_test(tc, test_validate_insert);
-       tcase_add_test(tc, test_sdb_llist_get);
-       tcase_add_test(tc, test_sdb_llist_search);
-       tcase_add_test(tc, test_sdb_llist_shift);
-       tcase_add_test(tc, test_sdb_llist_iter);
-       tcase_add_test(tc, test_sdb_llist_iter_remove);
+       tcase_add_test(tc, test_get);
+       tcase_add_test(tc, test_remove_by_name);
+       tcase_add_test(tc, test_search);
+       tcase_add_test(tc, test_shift);
+       tcase_add_test(tc, test_iter);
+       tcase_add_test(tc, test_iter_remove);
        suite_add_tcase(s, tc);
 
        return s;