int main(void) { LinkedList* list = LinkedList_new(); char* elem1 = "cat"; LinkedList_add(list, &elem1); char* elem2 = "rat"; LinkedList_add(list, &elem2); char* elem3 = "dog"; LinkedList_add(list, &elem3); char* elem4 = "sheep"; LinkedList_add(list, &elem4); char* elem5 = "goat"; LinkedList_add(list, &elem5); char* elem6 = "kebab"; LinkedList_add(list, &elem6); char* elem7 = "pig"; LinkedList_add(list, &elem7); char* elem8 = "cow"; LinkedList_add(list, &elem8); char* elem9 = "chicken"; LinkedList_add(list, &elem9); char* elem10 = "duck"; LinkedList_add(list, &elem10); char* elem11 = "fox"; LinkedList_add(list, &elem11); char* elem12 = "rabbit"; LinkedList_add(list, &elem12); char* elem13 = "mouse"; LinkedList_add(list, &elem13); char* elem14 = "hedgehog"; LinkedList_add(list, &elem14); printf("list before: \n"); for (int i = 0; i < LinkedList_size(list); i++) { if (LinkedList_get(list, i) != NULL) { printf("%d: %s \n", i, *(char**)LinkedList_get(list, i)); } } printf("\nremoving element 5, %s\n", *(char**)LinkedList_get(list, 5)); LinkedList_remove(list, 5); printf("\nlist after: \n"); for (int i = 0; i < LinkedList_size(list); i++) { if (LinkedList_get(list, i) != NULL) { printf("%d: %s \n", i, *(char**)LinkedList_get(list, i)); } } LinkedList_destroy(list); free(list); }
END_TEST START_TEST(test_GettingANonExistentElementFromListReturnsNULL) { LinkedList* list = LinkedList_new(); int elem = 24; LinkedList_add(list, &elem); int elem1 = 25; LinkedList_add(list, &elem1); ck_assert_int_eq(*(int*) LinkedList_get(list, 1), 25); ck_assert_ptr_eq(LinkedList_get(list, 4), NULL); ck_assert_ptr_eq(LinkedList_get(list, -1), NULL); }
END_TEST START_TEST(test_GettingAStoredElementFromListWorks) { LinkedList* list = LinkedList_new(); int elem = 1337; LinkedList_add(list, &elem); ck_assert_int_eq(*(int*) LinkedList_get(list, 0), 1337); }
END_TEST START_TEST(test_StoringEvenMoreElementsToListWorks) { int i; for (i = 0; i < 10; i++) { LinkedList* list = LinkedList_new(); int elem1 = 1337; LinkedList_add(list, &elem1); char* elem2 = "theeta"; LinkedList_add(list, &elem2); int elem3 = 74; LinkedList_add(list, &elem3); char elem4 = 'a'; LinkedList_add(list, &elem4); int elem5 = 55; LinkedList_add(list, &elem5); int elem6 = 66; LinkedList_add(list, &elem6); int elem7 = 77; LinkedList_add(list, &elem7); int elem8 = 88; LinkedList_add(list, &elem8); int elem9 = 99; LinkedList_add(list, &elem9); int elem10 = 110; LinkedList_add(list, &elem10); int elem11 = 111; LinkedList_add(list, &elem11); int elem12 = 1212; LinkedList_add(list, &elem12); int elem13 = 1313; LinkedList_add(list, &elem13); int elem14 = 1414; LinkedList_add(list, &elem14); ck_assert_int_eq(*(int*) LinkedList_get(list, 0), 1337); ck_assert_str_eq(*(char**) LinkedList_get(list, 1), "theeta"); ck_assert_int_eq(*(int*) LinkedList_get(list, 2), 74); ck_assert_int_eq(*(char*) LinkedList_get(list, 3), 'a'); ck_assert_int_eq(*(int*) LinkedList_get(list, 9), 110); ck_assert_int_eq(*(int*) LinkedList_get(list, 10), 111); ck_assert_int_eq(*(int*) LinkedList_get(list, 11), 1212); ck_assert_int_eq(*(int*) LinkedList_get(list, 12), 1313); ck_assert_int_eq(*(int*) LinkedList_get(list, 13), 1414); ck_assert_int_eq(LinkedList_size(list), 14); } }
static iterator_item _next(iterator_iterate_on in, int * pos) { if (in == NULL || *pos < 0) { return NULL; } LinkedList * self = (LinkedList *) in; void * item = LinkedList_get(self, *pos); *pos += 1; return item; }
END_TEST START_TEST(test_StoringMultipleElementsToListWorks) { LinkedList* list = LinkedList_new(); int elem1 = 1337; LinkedList_add(list, &elem1); char* elem2 = "theeta"; LinkedList_add(list, &elem2); int elem3 = 74; LinkedList_add(list, &elem3); char elem4 = 'a'; LinkedList_add(list, &elem4); ck_assert_int_eq(*(int*) LinkedList_get(list, 0), 1337); ck_assert_str_eq(*(char**) LinkedList_get(list, 1), "theeta"); ck_assert_int_eq(*(int*) LinkedList_get(list, 2), 74); ck_assert_int_eq(*(char*) LinkedList_get(list, 3), 'a'); ck_assert_int_eq(LinkedList_size(list), 4); }
static _Bool _has_next(iterator_iterate_on in, int pos) { if (in == NULL || pos < 0) { return false; } void * item; LinkedList * self = (LinkedList *) in; item = LinkedList_get(self, pos); return item != NULL; }
END_TEST START_TEST(test_RemovingElementFromListDoesNotFreeItFromMemory) { LinkedList* list = LinkedList_new(); int* elem = malloc(sizeof (int)); *elem = 35; LinkedList_add(list, elem); ck_assert_int_eq(*(int*) LinkedList_get(list, 0), 35); LinkedList_remove(list, 0); ck_assert_int_eq(*elem, 35); }
END_TEST START_TEST(test_RemovingElementFromListWorks) { LinkedList* list = LinkedList_new(); int elem1 = 1337; LinkedList_add(list, &elem1); char* elem2 = "theeta"; LinkedList_add(list, &elem2); int elem3 = 74; LinkedList_add(list, &elem3); ck_assert_int_eq(*(int*) LinkedList_get(list, 0), 1337); ck_assert_str_eq(*(char**) LinkedList_get(list, 1), "theeta"); ck_assert_int_eq(*(int*) LinkedList_get(list, 2), 74); LinkedList_remove(list, 1); ck_assert_int_eq(*(int*) LinkedList_get(list, 0), 1337); ck_assert_int_eq(*(int*) LinkedList_get(list, 1), 74); ck_assert_int_eq(LinkedList_size(list), 2); }
_Bool LinkedList_contains(LinkedList * self, void * to_check, equalsFunction equals) { int size = *(self->size); void * var = NULL; for (int i=1; i <= size; i++) { var = LinkedList_get(self, i); if ((*equals)(var, to_check)) return true; } return false; }