LIST_TYPE list_remove(int index, List *list){ if(index >= list->size || index < 0){ printf("index is out of bounds.\n"); assert(0); return NULL; } if(list->size == 1){ list->head == NULL; list->tail == NULL; list->size--; return NULL; } if(index == 0){ return list_removeFirst(list); } else if(index == list->size-1){ return list_removeLast(list); } else{ int counter = 0; Node* ptr; for(ptr = list->head; ptr != NULL; ptr = ptr->next){ if(counter == index){ Node* left = ptr->prev; Node* right = ptr->next; left->next = right; right->prev = left; list->size--; return ptr; } counter++; } return NULL; } }
void test_list_removeLast_should_remove_last_element_testing_with_no_element(){ LinkedList *list; list = createLinkedList(); Element arrayElem[] = {}; list->length = 0; list->head = NULL; list->tail = NULL; TEST_ASSERT_NULL(list_removeLast(list));//Test for returned address TEST_ASSERT_NULL(list->head); TEST_ASSERT_NULL(list->tail); TEST_ASSERT_EQUAL(0, list->length); }
TEST_ASSERT_EQUAL(0, list->length); } void test_list_removeLast_should_remove_last_element_testing_with_1_element(){ LinkedList *list; list = createLinkedList(); Element arrayElem[] = {{.next = NULL, .data = 1}}; list->length = 1; list->head = &arrayElem[0]; list->tail = &arrayElem[0]; //printf("Addr of arrayElem[0]: %p\n", &arrayElem[0]); //Address of returned element TEST_ASSERT_EQUAL_PTR(&arrayElem[0], list_removeLast(list));//Test for returned address TEST_ASSERT_NULL(list->head); TEST_ASSERT_NULL(list->tail); TEST_ASSERT_EQUAL(0, list->length); } void test_list_removeLast_should_remove_last_element_testing_with_2_elements(){ LinkedList *list; list = createLinkedList(); Element arrayElem[] = {{.next = &arrayElem[1], .data = 1}, {.next = NULL, .data = 2}}; list->length = 2; list->head = &arrayElem[0]; list->tail = &arrayElem[1];