From 669bdde12222c4a6ba6a2238a9a0e580570421e7 Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Wed, 10 Apr 2019 16:12:13 -0400 Subject: [PATCH] Expanding test Added test where data is a struct --- src/util/list.c | 27 ++++++++++++++---- src/util/list.h | 16 ++--------- tests/util/test_list.cpp | 60 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 84 insertions(+), 19 deletions(-) diff --git a/src/util/list.c b/src/util/list.c index 1f37bad..96d4ad7 100644 --- a/src/util/list.c +++ b/src/util/list.c @@ -27,6 +27,21 @@ #include "list.h" +typedef struct list_node_s { + void *data; + list_node_t *next; +} list_node_t; + + +typedef struct list_s { + int logicalLength; + size_t elementSize; + list_node_t *head; + list_node_t *tail; + freeFunction freeFn; +} list_t; + + list_t *create_list(size_t elementSize, freeFunction freeFn) { list_t *list; @@ -42,7 +57,7 @@ list_t *create_list(size_t elementSize, freeFunction freeFn) void delete_list(list_t *list) { - listNode *current; + list_node_t *current; while(list->head != NULL) { current = list->head; @@ -59,7 +74,7 @@ void delete_list(list_t *list) void prepend_list(list_t *list, void *element) { - listNode *node = malloc(sizeof(listNode)); + list_node_t *node = malloc(sizeof(list_node_t)); node->data = malloc(list->elementSize); memcpy(node->data, element, list->elementSize); @@ -76,7 +91,7 @@ void prepend_list(list_t *list, void *element) void append_list(list_t *list, void *element) { - listNode *node = malloc(sizeof(listNode)); + list_node_t *node = malloc(sizeof(list_node_t)); node->data = malloc(list->elementSize); node->next = NULL; @@ -96,7 +111,7 @@ void for_each_list(list_t *list, listIterator iterator) { assert(iterator != NULL); - listNode *node = list->head; + list_node_t *node = list->head; bool result = true; while(node != NULL && result) { result = iterator(node->data); @@ -111,7 +126,7 @@ void *head_list(list_t *list, bool removeFromList) { assert(list->head != NULL); - listNode *node = list->head; + list_node_t *node = list->head; // Allocating and copying pointer to node data void *element = (void *)malloc(list->elementSize); memcpy(element, node->data, list->elementSize); @@ -137,7 +152,7 @@ void *tail_list(list_t *list) { assert(list->tail != NULL); - listNode *node = list->tail; + list_node_t *node = list->tail; // Allocating and copying pointer to node data void *element = (void *)malloc(list->elementSize); memcpy(element, node->data, list->elementSize); diff --git a/src/util/list.h b/src/util/list.h index 5a1ded7..7f4ed57 100644 --- a/src/util/list.h +++ b/src/util/list.h @@ -28,19 +28,9 @@ typedef void(*freeFunction)(void *); typedef bool (*listIterator)(void *); -typedef struct _listNode { - void *data; - struct _listNode *next; -} listNode; - - -typedef struct { - int logicalLength; - size_t elementSize; - listNode *head; - listNode *tail; - freeFunction freeFn; -} list_t; +// forward declarations +typedef struct list_node_s list_node_t; +typedef struct list_s list_t; /** diff --git a/tests/util/test_list.cpp b/tests/util/test_list.cpp index f242106..89ee0c4 100644 --- a/tests/util/test_list.cpp +++ b/tests/util/test_list.cpp @@ -129,4 +129,64 @@ BOOST_FIXTURE_TEST_CASE(test_tail_list, FixtureStrings) { } +typedef struct test_data_s { + int num; + char *name; +} test_data_t; + +test_data_t *create_test_data(int number, char *name){ + + test_data_t *data = (test_data_t *)malloc(sizeof(test_data_t)); + data->num = number; + if (name) + data->name = _strdup(name); + else + data->name = NULL; + + return data; +} + +void delete_test_data(void *data) { + + test_data_t *test_data = *(test_data_t **)data; + + if (test_data->name) + free(test_data->name); + + free(test_data); +} + +bool iterate_test_data(void *data) +{ + test_data_t *test_data = *(test_data_t **)data; + + printf("Found number: %i name: %s\n", + test_data->num, test_data->name); + return true; +} + +BOOST_AUTO_TEST_CASE(test_struct_list){ + + list_t *list = NULL; + list = create_list(sizeof(test_data_t *), delete_test_data); + + + test_data_t *data = create_test_data(1, "David"); + append_list(list, &data); + + data = create_test_data(2, "Kevin"); + append_list(list, &data); + + data = create_test_data(3, "Michael"); + append_list(list, &data); + + + BOOST_CHECK(size_list(list) == 3); + + for_each_list(list, iterate_test_data); + + delete_list(list); +} + + BOOST_AUTO_TEST_SUITE_END()