X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=t%2Futils%2Fllist_test.c;h=e8d366c2f103ccb244775c78bec7d5c9d2167ad5;hb=c3a9d2487c367c08dea76bde745d6de965c4c87b;hp=ede8200a42a325d3f22707eb001febdc8ac9b51e;hpb=57e2d5775d9571506773ec135662c6c788103669;p=sysdb.git diff --git a/t/utils/llist_test.c b/t/utils/llist_test.c index ede8200..e8d366c 100644 --- a/t/utils/llist_test.c +++ b/t/utils/llist_test.c @@ -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,9 +115,14 @@ START_TEST(test_sdb_llist_destroy) } END_TEST -START_TEST(test_sdb_llist_append) +START_TEST(test_append) { 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,11 +131,14 @@ START_TEST(test_sdb_llist_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_sdb_llist_insert) +START_TEST(test_insert) { size_t i; for (i = 0; i < SDB_STATIC_ARRAY_LEN(golden_data); ++i) { @@ -162,7 +170,60 @@ START_TEST(test_validate_insert) } END_TEST -START_TEST(test_sdb_llist_search) +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() = %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); + sdb_object_deref(check); + } +} +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) +{ + return 0; +} /* dummy_lookup */ + +START_TEST(test_search) { size_t i; populate(); @@ -181,10 +242,32 @@ START_TEST(test_sdb_llist_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_sdb_llist_shift) +START_TEST(test_shift) { size_t i; populate(); @@ -204,7 +287,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; @@ -233,7 +316,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; @@ -276,15 +359,17 @@ 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_append); + tcase_add_test(tc, test_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); + 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;