X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=t%2Futils%2Fllist_test.c;h=9539c910bc9acbe3c73b8ba62d4f9c47e695380b;hb=8fae96642304f80a5ce343626970b1cff87123f2;hp=774520406b1c35833c89dee0f4a5f5b1756e3e93;hpb=293c2b1a5781e8e6569d4b91094f3ac0c7a4fa6a;p=sysdb.git diff --git a/t/utils/llist_test.c b/t/utils/llist_test.c index 7745204..9539c91 100644 --- a/t/utils/llist_test.c +++ b/t/utils/llist_test.c @@ -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() = %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() = %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,33 @@ START_TEST(test_insert_invalid) } END_TEST -START_TEST(test_search) +START_TEST(test_sdb_llist_get) { - int i; + 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]); + fail_unless(check->ref_cnt == 3, + "sdb_llist_get() didn't increment reference count; got: %i; " + "expected: 3", check->ref_cnt); + sdb_object_deref(check); + } +} +END_TEST + +static int +dummy_lookup(const sdb_object_t __attribute__((unused)) *obj, + const void __attribute__((unused)) *user_data) +{ + return 0; +} /* dummy_lookup */ + +START_TEST(test_sdb_llist_search) +{ + 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, @@ -181,12 +213,34 @@ START_TEST(test_search) "sdb_llist_search_by_name(%s) = %p; expected: NULL", unused_names[i], check); } + + for (i = 0; i < SDB_STATIC_ARRAY_LEN(golden_data); ++i) { + /* dummy_lookup always return 0, thus, this will always return the + * first element */ + sdb_object_t *check = sdb_llist_search(list, dummy_lookup, NULL); + fail_unless(check == &golden_data[i], + "sdb_llist_search() = %p (%s); expected: %p (%s)", + check, check->name, &golden_data[i], golden_data[i].name); + + /* => remove the first element */ + check = sdb_llist_remove(list, dummy_lookup, NULL); + fail_unless(check == &golden_data[i], + "sdb_llist_remove() = %p (%s); expected: %p (%s)", + check, check->name, &golden_data[i], golden_data[i].name); + fail_unless(check->ref_cnt == 2, + "sdb_llist_remove() changed reference count; got: %i; " + "expected: 2", check->ref_cnt); + } + /* should now be empty */ + fail_unless(sdb_llist_len(list) == 0, + "Still have %i elements in the list; expected: 0", + sdb_llist_len(list)); } 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 +258,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 +287,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 +330,16 @@ 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_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); suite_add_tcase(s, tc); return s;