Code

utils llist: Added sdb_llist_len().
[sysdb.git] / t / utils / llist_test.c
index 774520406b1c35833c89dee0f4a5f5b1756e3e93..ae9655ac46ec46ace6410363adfdccb8e1b5466e 100644 (file)
@@ -71,7 +71,7 @@ teardown(void)
 static void
 populate(void)
 {
-       int i;
+       size_t i;
        for (i = 0; i < SDB_STATIC_ARRAY_LEN(golden_data); ++i) {
                int check = sdb_llist_append(list, &golden_data[i]);
                fail_unless(check == 0,
@@ -80,10 +80,10 @@ populate(void)
        }
 } /* populate */
 
-START_TEST(test_clone)
+START_TEST(test_sdb_llist_clone)
 {
        sdb_llist_t *clone;
-       int i;
+       size_t i;
 
        populate();
 
@@ -100,9 +100,9 @@ START_TEST(test_clone)
 }
 END_TEST
 
-START_TEST(test_destroy)
+START_TEST(test_sdb_llist_destroy)
 {
-       int i;
+       size_t i;
        populate();
        sdb_llist_destroy(list);
        list = NULL;
@@ -115,9 +115,14 @@ START_TEST(test_destroy)
 }
 END_TEST
 
-START_TEST(test_append)
+START_TEST(test_sdb_llist_append)
 {
-       int i;
+       size_t i;
+
+       fail_unless(sdb_llist_len(list) == 0,
+                       "sdb_llist_len(<empty list>) = %zu; expected: 0",
+                       sdb_llist_len(list));
+
        for (i = 0; i < SDB_STATIC_ARRAY_LEN(golden_data); ++i) {
                int check = sdb_llist_append(list, &golden_data[i]);
                fail_unless(check == 0,
@@ -126,13 +131,16 @@ START_TEST(test_append)
                fail_unless(golden_data[i].ref_cnt == 2,
                                "sdb_llist_append(%s) did not take ownership",
                                golden_data[i].name);
+               fail_unless(sdb_llist_len(list) == i + 1,
+                               "sdb_llist_len(<empty list>) = %zu; expected: zu",
+                               sdb_llist_len(list), i + 1);
        }
 }
 END_TEST
 
-START_TEST(test_insert)
+START_TEST(test_sdb_llist_insert)
 {
-       int i;
+       size_t i;
        for (i = 0; i < SDB_STATIC_ARRAY_LEN(golden_data); ++i) {
                int check = sdb_llist_insert(list, &golden_data[i], 0);
                fail_unless(check == 0,
@@ -145,9 +153,9 @@ START_TEST(test_insert)
 }
 END_TEST
 
-START_TEST(test_insert_invalid)
+START_TEST(test_validate_insert)
 {
-       int i;
+       size_t i;
        for (i = 0; i < SDB_STATIC_ARRAY_LEN(golden_data); ++i) {
                /* none of these operations will succeed
                 * => 1 is invalid for each case */
@@ -162,9 +170,9 @@ START_TEST(test_insert_invalid)
 }
 END_TEST
 
-START_TEST(test_search)
+START_TEST(test_sdb_llist_search)
 {
-       int i;
+       size_t i;
        populate();
        for (i = 0; i < SDB_STATIC_ARRAY_LEN(golden_data); ++i) {
                sdb_object_t *check = sdb_llist_search_by_name(list,
@@ -184,9 +192,9 @@ START_TEST(test_search)
 }
 END_TEST
 
-START_TEST(test_shift)
+START_TEST(test_sdb_llist_shift)
 {
-       int i;
+       size_t i;
        populate();
        for (i = 0; i < SDB_STATIC_ARRAY_LEN(golden_data); ++i) {
                sdb_object_t *check = sdb_llist_shift(list);
@@ -204,10 +212,10 @@ START_TEST(test_shift)
 }
 END_TEST
 
-START_TEST(test_iter)
+START_TEST(test_sdb_llist_iter)
 {
        sdb_llist_iter_t *iter;
-       int i;
+       size_t i;
 
        populate();
 
@@ -233,6 +241,41 @@ START_TEST(test_iter)
 }
 END_TEST
 
+START_TEST(test_sdb_llist_iter_remove)
+{
+       sdb_llist_iter_t *iter;
+       sdb_object_t *check;
+       size_t i;
+
+       populate();
+
+       iter = sdb_llist_get_iter(list);
+       fail_unless(iter != NULL,
+                       "sdb_llist_get_iter() did not return an iterator");
+
+       i = 0;
+       while (sdb_llist_iter_has_next(iter)) {
+               check = sdb_llist_iter_get_next(iter);
+               fail_unless(check == &golden_data[i],
+                               "sdb_llist_iter_get_next() = %p; expected: %p",
+                               check, &golden_data[i]);
+
+               sdb_llist_iter_remove_current(iter);
+               ++i;
+       }
+       sdb_llist_iter_destroy(iter);
+
+       fail_unless(i == (size_t)SDB_STATIC_ARRAY_LEN(golden_data),
+                       "iterated for %zu steps; expected: %i",
+                       i, SDB_STATIC_ARRAY_LEN(golden_data));
+
+       /* all elements should be removed */
+       check = sdb_llist_shift(list);
+       fail_unless(check == NULL,
+                       "sdb_llist_shift() = %p; expected: NULL", check);
+}
+END_TEST
+
 Suite *
 util_llist_suite(void)
 {
@@ -241,14 +284,15 @@ util_llist_suite(void)
 
        tc = tcase_create("core");
        tcase_add_checked_fixture(tc, setup, teardown);
-       tcase_add_test(tc, test_clone);
-       tcase_add_test(tc, test_destroy);
-       tcase_add_test(tc, test_append);
-       tcase_add_test(tc, test_insert);
-       tcase_add_test(tc, test_insert_invalid);
-       tcase_add_test(tc, test_search);
-       tcase_add_test(tc, test_shift);
-       tcase_add_test(tc, test_iter);
+       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_validate_insert);
+       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);
        suite_add_tcase(s, tc);
 
        return s;