/* SPDX-License-Identifier: GPL-2.0-only */ #include #include #include #include struct test_container { int value; struct list_node list_node; }; void test_list_insert_after(void **state) { int i = 0; struct list_node root = { .prev = NULL, .next = NULL }; struct test_container *c1 = (struct test_container *)malloc(sizeof(*c1)); struct test_container *c2 = (struct test_container *)malloc(sizeof(*c2)); struct test_container *c3 = (struct test_container *)malloc(sizeof(*c2)); struct test_container *ptr; const int values[] = { 5, 10, 13 }; /* Random values */ memset(c1, 0, sizeof(*c1)); memset(c2, 0, sizeof(*c2)); memset(c2, 0, sizeof(*c3)); c1->value = values[0]; c2->value = values[1]; c3->value = values[2]; list_insert_after(&c1->list_node, &root); list_insert_after(&c2->list_node, &c1->list_node); list_insert_after(&c3->list_node, &c2->list_node); list_for_each(ptr, root, list_node) { assert_int_equal(values[i], ptr->value); i++; } assert_int_equal(3, i); free(c3); free(c2); free(c1); } void test_list_insert_before(void **state) { int i = 0; struct list_node root = { .prev = NULL, .next = NULL }; struct test_container *c1 = (struct test_container *)malloc(sizeof(*c1)); struct test_container *c2 = (struct test_container *)malloc(sizeof(*c2)); struct test_container *c3 = (struct test_container *)malloc(sizeof(*c2)); struct test_container *ptr; const int values[] = { 19, 71, 991 }; /* Random values */ memset(c1, 0, sizeof(*c1)); memset(c2, 0, sizeof(*c2)); memset(c2, 0, sizeof(*c3)); c1->value = values[0]; c2->value = values[1]; c3->value = values[2]; list_insert_after(&c3->list_node, &root); list_insert_before(&c2->list_node, &c3->list_node); list_insert_before(&c1->list_node, &c2->list_node); list_for_each(ptr, root, list_node) { assert_int_equal(values[i], ptr->value); i++; } assert_int_equal(3, i); free(c3); free(c2); free(c1); } void test_list_remove(void **state) { struct list_node root = { .prev = NULL, .next = NULL }; struct test_container *c1 = (struct test_container *)malloc(sizeof(*c1)); struct test_container *c2 = (struct test_container *)malloc(sizeof(*c2)); struct test_container *ptr; int len; list_insert_after(&c1->list_node, &root); list_insert_after(&c2->list_node, &c1->list_node); len = 0; list_for_each(ptr, root, list_node) { len++; } assert_int_equal(2, len); list_remove(&c1->list_node); len = 0; list_for_each(ptr, root, list_node) { len++; } assert_int_equal(1, len); list_remove(&c2->list_node); len = 0; list_for_each(ptr, root, list_node) { len++; } assert_int_equal(0, len); free(c2); free(c1); } void test_list_append(void **state) { size_t idx; struct test_container *node; struct list_node root = {}; struct test_container nodes[] = { {1}, {2}, {3} }; for (idx = 0; idx < ARRAY_SIZE(nodes); ++idx) list_append(&nodes[idx].list_node, &root); idx = 0; list_for_each(node, root, list_node) { assert_ptr_equal(node, &nodes[idx]); idx++; } } int main(void) { const struct CMUnitTest tests[] = { cmocka_unit_test(test_list_insert_after), cmocka_unit_test(test_list_insert_before), cmocka_unit_test(test_list_remove), cmocka_unit_test(test_list_append), }; return cb_run_group_tests(tests, NULL, NULL); }