int main() { List *list = newList(); listAddLast(list, "One"); listAddLast(list, "Two"); listAddLast(list, "Three"); listAddFirst(list, "One"); listAddFirst(list, "Two"); listAddFirst(list, "Three"); print_list(list); listRemoveFirst(list); print_list(list); listRemoveLast(list); print_list(list); listClear(list); listAddLast(list, "One"); listRemoveFirst(list); print_list(list); listAddFirst(list, "One"); listAddLast(list, "One"); listAddFirst(list, "Two"); listAddLast(list, "Two"); listAddFirst(list, "Three"); listAddLast(list, "Three"); print_list(list); deleteList(list); return 0; }
/*==============================================================================*/ felist *listAddSorted(felist *root, felist *l, int (*comp)(void *, void *)) { felist *tmp; tmp = root; if (l == NULL) return tmp; while (tmp != NULL) { if (comp(listNode(tmp), listNode(l)) >= 0) { listAddFirst(tmp, l); if (tmp == root) return l; else return root; } tmp = listNext(tmp); } return listAddLast(root, l); }
static void connectionContextDelete(connectionContext_t* pContext, int move) { if (pContext) { externalServer_t* pServer = pContext->pExternalServer; clusterMapImpl_t* pCMap = pServer->pClusterMap; request_t* pRequest = 0; LOG(DEBUG, "deleting connection context"); while ((pRequest = listRemoveLast(pContext->currentRequests)) != 0) { if (move) { //move the existing requests to another socket listAddFirst(pServer->unassignedRequests, pRequest); }else { //report error pCMap->resultHandler(pRequest->luaContext, pRequest->keyContext, -1, NULL); deleteRequest(pRequest); } } if (pContext->connection) { connectionClose(pContext->connection); } if (pContext->readStream) { dataStreamDelete(pContext->readStream); pContext->readStream = 0; } if (pContext->writeStream) { dataStreamDelete(pContext->writeStream); pContext->writeStream = 0; } if (pContext->parser) { responseParserDelete(pContext->parser); pContext->parser = 0; } if (pContext->currentRequests) { listFree(pContext->currentRequests); pContext->currentRequests = 0; } if (pContext->fallocator) { fallocatorDelete(pContext->fallocator); } FREE(pContext); } }
/** Add first element into linkedlist HEAD HEAD ------- -------- ------- | NULL | ----> | ele1 |-----| NULL | ------- -------- ------- **/ void test_listAddFirst_should_add_first_element_into_linkedList() { LinkedList *list = createLinkedList(); Element ele1 = {.next = (Element *)NULL, .data = (Element *)1}; listAddFirst(&ele1,list); TEST_ASSERT_EQUAL(1,ele1.data); TEST_ASSERT_EQUAL(1,list->head->data); TEST_ASSERT_EQUAL(1,list->tail->data); TEST_ASSERT_EQUAL(list->head,list->tail); TEST_ASSERT_EQUAL(1,list->length); TEST_ASSERT_NULL(list->head->next); } /** Add elements into linkedlist HEAD HEAD TAIL ------- ------ ----- ----- ------ ------ ----- | NULL | ----> |ele5|-----|ele4|-----|ele3|-----|ele2|-----|ele1|-----|NULL| ------- ------ ----- ------ ------ ------ ------ **/ void test_listAddFirst_should_add_elements_into_linkedList() { LinkedList *list = createLinkedList(); Element ele1 = {.next = (Element *)NULL, .data = (Element *)1}; Element ele2 = {.next = (Element *)NULL, .data = (Element *)5}; Element ele3 = {.next = (Element *)NULL, .data = (Element *)10}; Element ele4 = {.next = (Element *)NULL, .data = (Element *)15}; Element ele5 = {.next = (Element *)NULL, .data = (Element *)20}; listAddFirst(&ele1,list); TEST_ASSERT_EQUAL(1,ele1.data); TEST_ASSERT_EQUAL(1,list->head->data); TEST_ASSERT_EQUAL(1,list->tail->data); TEST_ASSERT_EQUAL(list->head,list->tail); TEST_ASSERT_EQUAL(1,list->length); TEST_ASSERT_NULL(list->head->next); TEST_ASSERT_NULL(list->tail->next); listAddFirst(&ele2,list); TEST_ASSERT_EQUAL(5,ele2.data); TEST_ASSERT_EQUAL(5,list->head->data); TEST_ASSERT_EQUAL(1,list->tail->data); TEST_ASSERT_NOT_EQUAL(list->head,list->tail); TEST_ASSERT_EQUAL(2,list->length); TEST_ASSERT_NOT_NULL(list->head->next); TEST_ASSERT_NULL(list->tail->next); listAddFirst(&ele3,list); TEST_ASSERT_EQUAL(10,ele3.data); TEST_ASSERT_EQUAL(10,list->head->data); TEST_ASSERT_EQUAL(1,list->tail->data); TEST_ASSERT_NOT_EQUAL(list->head,list->tail); TEST_ASSERT_EQUAL(3,list->length); TEST_ASSERT_NOT_NULL(list->head->next); TEST_ASSERT_NULL(list->tail->next); listAddFirst(&ele4,list); TEST_ASSERT_EQUAL(15,ele4.data); TEST_ASSERT_EQUAL(15,list->head->data); TEST_ASSERT_EQUAL(1,list->tail->data); TEST_ASSERT_NOT_EQUAL(list->head,list->tail); TEST_ASSERT_EQUAL(4,list->length); TEST_ASSERT_NOT_NULL(list->head->next); TEST_ASSERT_NULL(list->tail->next); listAddFirst(&ele5,list); TEST_ASSERT_EQUAL(20,ele5.data); TEST_ASSERT_EQUAL(20,list->head->data); TEST_ASSERT_EQUAL(15,list->head->next->data); TEST_ASSERT_EQUAL(10,list->head->next->next->data); TEST_ASSERT_EQUAL(5,list->head->next->next->next->data); TEST_ASSERT_EQUAL(1,list->head->next->next->next->next->data); TEST_ASSERT_EQUAL(1,list->tail->data); TEST_ASSERT_NOT_EQUAL(list->head->data,list->tail->data); TEST_ASSERT_EQUAL(list->head->next->next->next->next->data,list->tail->data); TEST_ASSERT_EQUAL(5,list->length); TEST_ASSERT_NOT_NULL(list->head->next); TEST_ASSERT_NULL(list->tail->next); } /** Remove elements into linkedlist Add ele1 HEAD HEAD ------- ------ ----- | NULL | ----> |ele1|----|NULL| ------- ------ ------ Remove ele1 HEAD ------ |NULL| ------ **/ void test_listRemoveFirst_should_remove_first_element_from_linkedList() { LinkedList *list = createLinkedList(); Element ele1 = {.next = (Element *)NULL, .data = (Element *)1}; listAddFirst(&ele1,list); TEST_ASSERT_EQUAL(1,ele1.data); TEST_ASSERT_EQUAL(1,list->head->data); TEST_ASSERT_EQUAL(1,list->tail->data); TEST_ASSERT_EQUAL(list->head,list->tail); TEST_ASSERT_EQUAL(1,list->length); TEST_ASSERT_NULL(list->head->next); TEST_ASSERT_NULL(list->tail->next); listRemoveFirst(list); TEST_ASSERT_EQUAL(1,ele1.data); TEST_ASSERT_EQUAL(NULL,list->head); TEST_ASSERT_EQUAL(NULL,list->tail); TEST_ASSERT_EQUAL(list->head,list->tail); TEST_ASSERT_EQUAL(0,list->length); TEST_ASSERT_NULL(list->head); TEST_ASSERT_NULL(list->tail); } /** Add elements into linkedlist HEAD HEAD TAIL ------- ------ ----- ----- ------ ------ ----- | NULL | ----> |ele5|-----|ele4|-----|ele3|-----|ele2|-----|ele1|-----|NULL| ------- ------ ----- ------ ------ ------ ------ Remove element 5 from head HEAD TAIL ------ ----- ----- ------ ----- |ele4|-----|ele3|-----|ele2|-----|ele1|-----|NULL| ------ ----- ------ ------ ------ Remove element 4 from head HEAD TAIL ------ ----- ----- ----- |ele3|-----|ele2|-----|ele1|-----|NULL| ------ ----- ------ ------ Remove element 3 from head HEAD TAIL ------ ----- ----- |ele2|-----|ele1|-----|NULL| ------ ----- ------ Remove element 2 from head HEAD ------ ----- |ele1|-----|NULL| ------ ------ Remove element 1 from head HEAD ------ |NULL| ------ **/ void test_listRemoveFirst_should_remove_elements_from_linkedList() { LinkedList *list = createLinkedList(); Element ele1 = {.next = (Element *)NULL, .data = (Element *)1}; Element ele2 = {.next = (Element *)NULL, .data = (Element *)5}; Element ele3 = {.next = (Element *)NULL, .data = (Element *)10}; Element ele4 = {.next = (Element *)NULL, .data = (Element *)15}; Element ele5 = {.next = (Element *)NULL, .data = (Element *)20}; listAddFirst(&ele1,list); TEST_ASSERT_EQUAL(1,ele1.data); TEST_ASSERT_EQUAL(1,list->head->data); TEST_ASSERT_EQUAL(1,list->tail->data); TEST_ASSERT_EQUAL(list->head,list->tail); TEST_ASSERT_EQUAL(1,list->length); TEST_ASSERT_NULL(list->head->next); TEST_ASSERT_NULL(list->tail->next); listAddFirst(&ele2,list); TEST_ASSERT_EQUAL(5,ele2.data); TEST_ASSERT_EQUAL(5,list->head->data); TEST_ASSERT_EQUAL(1,list->tail->data); TEST_ASSERT_NOT_EQUAL(list->head,list->tail); TEST_ASSERT_EQUAL(2,list->length); TEST_ASSERT_NOT_NULL(list->head->next); TEST_ASSERT_NULL(list->tail->next); listAddFirst(&ele3,list); TEST_ASSERT_EQUAL(10,ele3.data); TEST_ASSERT_EQUAL(10,list->head->data); TEST_ASSERT_EQUAL(1,list->tail->data); TEST_ASSERT_NOT_EQUAL(list->head,list->tail); TEST_ASSERT_EQUAL(3,list->length); TEST_ASSERT_NOT_NULL(list->head->next); TEST_ASSERT_NULL(list->tail->next); listAddFirst(&ele4,list); TEST_ASSERT_EQUAL(15,ele4.data); TEST_ASSERT_EQUAL(15,list->head->data); TEST_ASSERT_EQUAL(1,list->tail->data); TEST_ASSERT_NOT_EQUAL(list->head,list->tail); TEST_ASSERT_EQUAL(4,list->length); TEST_ASSERT_NOT_NULL(list->head->next); TEST_ASSERT_NULL(list->tail->next); listAddFirst(&ele5,list); TEST_ASSERT_EQUAL(20,ele5.data); TEST_ASSERT_EQUAL(20,list->head->data); TEST_ASSERT_EQUAL(15,list->head->next->data); TEST_ASSERT_EQUAL(10,list->head->next->next->data); TEST_ASSERT_EQUAL(5,list->head->next->next->next->data); TEST_ASSERT_EQUAL(1,list->head->next->next->next->next->data); TEST_ASSERT_EQUAL(1,list->tail->data); TEST_ASSERT_NOT_EQUAL(list->head->data,list->tail->data); TEST_ASSERT_EQUAL(list->head->next->next->next->next->data,list->tail->data); TEST_ASSERT_EQUAL(5,list->length); TEST_ASSERT_NOT_NULL(list->head->next); TEST_ASSERT_NULL(list->tail->next); listRemoveFirst(list); //Removed 20 from the head TEST_ASSERT_EQUAL(1,ele1.data); TEST_ASSERT_EQUAL(5,ele2.data); TEST_ASSERT_EQUAL(10,ele3.data); TEST_ASSERT_EQUAL(15,ele4.data); TEST_ASSERT_EQUAL(20,ele5.data); TEST_ASSERT_EQUAL(15,list->head->data); TEST_ASSERT_EQUAL(1,list->tail->data); TEST_ASSERT_EQUAL(4,list->length); TEST_ASSERT_NOT_NULL(list->head); TEST_ASSERT_NOT_NULL(list->tail); listRemoveFirst(list); //Removed 15 from the head TEST_ASSERT_EQUAL(1,ele1.data); TEST_ASSERT_EQUAL(5,ele2.data); TEST_ASSERT_EQUAL(10,ele3.data); TEST_ASSERT_EQUAL(15,ele4.data); TEST_ASSERT_EQUAL(20,ele5.data); TEST_ASSERT_EQUAL(10,list->head->data); TEST_ASSERT_EQUAL(1,list->tail->data); TEST_ASSERT_EQUAL(3,list->length); TEST_ASSERT_NOT_NULL(list->head); TEST_ASSERT_NOT_NULL(list->tail); listRemoveFirst(list); //Removed 10 from the head TEST_ASSERT_EQUAL(1,ele1.data); TEST_ASSERT_EQUAL(5,ele2.data); TEST_ASSERT_EQUAL(10,ele3.data); TEST_ASSERT_EQUAL(15,ele4.data); TEST_ASSERT_EQUAL(20,ele5.data); TEST_ASSERT_EQUAL(5,list->head->data); TEST_ASSERT_EQUAL(1,list->tail->data); TEST_ASSERT_EQUAL(2,list->length); TEST_ASSERT_NOT_NULL(list->head); TEST_ASSERT_NOT_NULL(list->tail); listRemoveFirst(list); //Removed 5 from the head TEST_ASSERT_EQUAL(1,ele1.data); TEST_ASSERT_EQUAL(5,ele2.data); TEST_ASSERT_EQUAL(10,ele3.data); TEST_ASSERT_EQUAL(15,ele4.data); TEST_ASSERT_EQUAL(20,ele5.data); TEST_ASSERT_EQUAL(1,list->head->data); TEST_ASSERT_EQUAL(1,list->tail->data); TEST_ASSERT_EQUAL(1,list->length); TEST_ASSERT_NOT_NULL(list->head); TEST_ASSERT_NOT_NULL(list->tail); listRemoveFirst(list); //Removed 1 from the head TEST_ASSERT_EQUAL(1,ele1.data); TEST_ASSERT_EQUAL(NULL,list->head); TEST_ASSERT_EQUAL(NULL,list->tail); TEST_ASSERT_EQUAL(list->head,list->tail); TEST_ASSERT_EQUAL(0,list->length); TEST_ASSERT_NULL(list->head); TEST_ASSERT_NULL(list->tail); } /** Add first element into linkedlist HEAD HEAD ------- -------- ------- | NULL | ----> | ele1 |-----| NULL | ------- -------- ------- **/ void test_listAddLast_should_add_first_element_into_linkedList() { LinkedList *list = createLinkedList(); Element ele1 = {.next = (Element *)NULL, .data = (Element *)1}; listAddLast(&ele1,list); TEST_ASSERT_EQUAL(1,ele1.data); TEST_ASSERT_EQUAL(1,list->head->data); TEST_ASSERT_EQUAL(1,list->tail->data); TEST_ASSERT_EQUAL(list->head,list->tail); TEST_ASSERT_EQUAL(1,list->length); TEST_ASSERT_NULL(list->head->next); TEST_ASSERT_NULL(list->tail->next); } /** Add elements into linkedlist HEAD HEAD TAIL ------- ------ ----- ----- ------ ------ ----- | NULL | ----> |ele1|-----|ele2|-----|ele3|-----|ele4|-----|ele5|-----|NULL| ------- ------ ----- ------ ------ ------ ------ **/ void test_listAddLast_should_add_elements_into_linkedList() { LinkedList *list = createLinkedList(); Element ele1 = {.next = (Element *)NULL, .data = (Element *)1}; Element ele2 = {.next = (Element *)NULL, .data = (Element *)5}; Element ele3 = {.next = (Element *)NULL, .data = (Element *)10}; Element ele4 = {.next = (Element *)NULL, .data = (Element *)15}; Element ele5 = {.next = (Element *)NULL, .data = (Element *)20}; listAddLast(&ele1,list); TEST_ASSERT_EQUAL(1,ele1.data); TEST_ASSERT_EQUAL(1,list->head->data); TEST_ASSERT_EQUAL(1,list->tail->data); TEST_ASSERT_EQUAL(list->head,list->tail); TEST_ASSERT_EQUAL(1,list->length); TEST_ASSERT_NULL(list->head->next); TEST_ASSERT_NULL(list->tail->next); listAddLast(&ele2,list); TEST_ASSERT_EQUAL(5,ele2.data); TEST_ASSERT_EQUAL(1,list->head->data); TEST_ASSERT_EQUAL(5,list->tail->data); TEST_ASSERT_NOT_EQUAL(list->head,list->tail); TEST_ASSERT_EQUAL(2,list->length); TEST_ASSERT_NULL(list->head->next); TEST_ASSERT_NOT_NULL(list->tail->next); listAddLast(&ele3,list); TEST_ASSERT_EQUAL(10,ele3.data); TEST_ASSERT_EQUAL(1,list->head->data); TEST_ASSERT_EQUAL(10,list->tail->data); TEST_ASSERT_NOT_EQUAL(list->head,list->tail); TEST_ASSERT_EQUAL(3,list->length); TEST_ASSERT_NULL(list->head->next); TEST_ASSERT_NOT_NULL(list->tail->next); listAddLast(&ele4,list); TEST_ASSERT_EQUAL(15,ele4.data); TEST_ASSERT_EQUAL(1,list->head->data); TEST_ASSERT_EQUAL(15,list->tail->data); TEST_ASSERT_NOT_EQUAL(list->head,list->tail); TEST_ASSERT_EQUAL(4,list->length); TEST_ASSERT_NULL(list->head->next); TEST_ASSERT_NOT_NULL(list->tail->next); listAddLast(&ele5,list); TEST_ASSERT_EQUAL(20,ele5.data); TEST_ASSERT_EQUAL(1,list->head->data); TEST_ASSERT_EQUAL(20,list->tail->data); TEST_ASSERT_EQUAL(15,list->tail->next->data); TEST_ASSERT_EQUAL(10,list->tail->next->next->data); TEST_ASSERT_EQUAL(5,list->tail->next->next->next->data); TEST_ASSERT_EQUAL(1,list->tail->next->next->next->next->data); TEST_ASSERT_NOT_EQUAL(list->head->data,list->tail->data); TEST_ASSERT_EQUAL(list->head->data,list->tail->next->next->next->next->data); TEST_ASSERT_EQUAL(5,list->length); TEST_ASSERT_NULL(list->head->next); TEST_ASSERT_NOT_NULL(list->tail->next); } void test_listRemoveLast_should_remove_first_element_from_linkedList() { LinkedList *list = createLinkedList(); Element ele1 = {.next = (Element *)NULL, .data = (Element *)1}; listAddLast(&ele1,list); TEST_ASSERT_EQUAL(1,ele1.data); TEST_ASSERT_EQUAL(1,list->head->data); TEST_ASSERT_EQUAL(1,list->tail->data); TEST_ASSERT_EQUAL(list->head,list->tail); TEST_ASSERT_EQUAL(1,list->length); TEST_ASSERT_NULL(list->head->next); TEST_ASSERT_NULL(list->tail->next); listRemoveLast(list); TEST_ASSERT_EQUAL(1,ele1.data); TEST_ASSERT_EQUAL(NULL,list->head); TEST_ASSERT_EQUAL(NULL,list->tail); TEST_ASSERT_EQUAL(list->head,list->tail); TEST_ASSERT_EQUAL(0,list->length); TEST_ASSERT_NULL(list->head); TEST_ASSERT_NULL(list->tail); } /** Add elements into linkedlist HEAD HEAD TAIL ------- ------ ----- ----- ------ ------ ----- | NULL | ----> |ele1|-----|ele2|-----|ele3|-----|ele4|-----|ele5|-----|NULL| ------- ------ ----- ------ ------ ------ ------ Remove element 5 from tail HEAD TAIL ------ ----- ----- ------ ----- |ele1|-----|ele2|-----|ele3|-----|ele4|-----|NULL| ------ ----- ------ ------ ------ Remove element 4 from tail HEAD TAIL ------ ----- ----- ----- |ele1|-----|ele2|-----|ele3|-----|NULL| ------ ----- ------ ------ Remove element 3 from tail HEAD TAIL ------ ----- ----- |ele1|-----|ele2|-----|NULL| ------ ----- ------ Remove element 2 from tail HEAD ------ ----- |ele1|-----|NULL| ------ ------ Remove element 1 from tail HEAD ------ |NULL| ------ **/ void test_listRemoveLast_should_remove_elements_from_linkedList() { LinkedList *list = createLinkedList(); Element ele1 = {.next = (Element *)NULL, .data = (Element *)1}; Element ele2 = {.next = (Element *)NULL, .data = (Element *)5}; Element ele3 = {.next = (Element *)NULL, .data = (Element *)10}; Element ele4 = {.next = (Element *)NULL, .data = (Element *)15}; Element ele5 = {.next = (Element *)NULL, .data = (Element *)20}; listAddLast(&ele1,list); TEST_ASSERT_EQUAL(1,ele1.data); TEST_ASSERT_EQUAL(1,list->head->data); TEST_ASSERT_EQUAL(1,list->tail->data); TEST_ASSERT_EQUAL(list->head,list->tail); TEST_ASSERT_EQUAL(1,list->length); TEST_ASSERT_NULL(list->head->next); TEST_ASSERT_NULL(list->tail->next); listAddLast(&ele2,list); TEST_ASSERT_EQUAL(5,ele2.data); TEST_ASSERT_EQUAL(1,list->head->data); TEST_ASSERT_EQUAL(5,list->tail->data); TEST_ASSERT_NOT_EQUAL(list->head,list->tail); TEST_ASSERT_EQUAL(2,list->length); TEST_ASSERT_NULL(list->head->next); TEST_ASSERT_NOT_NULL(list->tail->next); listAddLast(&ele3,list); TEST_ASSERT_EQUAL(10,ele3.data); TEST_ASSERT_EQUAL(1,list->head->data); TEST_ASSERT_EQUAL(10,list->tail->data); TEST_ASSERT_NOT_EQUAL(list->head,list->tail); TEST_ASSERT_EQUAL(3,list->length); TEST_ASSERT_NULL(list->head->next); TEST_ASSERT_NOT_NULL(list->tail->next); listAddLast(&ele4,list); TEST_ASSERT_EQUAL(15,ele4.data); TEST_ASSERT_EQUAL(1,list->head->data); TEST_ASSERT_EQUAL(15,list->tail->data); TEST_ASSERT_NOT_EQUAL(list->head,list->tail); TEST_ASSERT_EQUAL(4,list->length); TEST_ASSERT_NULL(list->head->next); TEST_ASSERT_NOT_NULL(list->tail->next); listAddLast(&ele5,list); TEST_ASSERT_EQUAL(20,ele5.data); TEST_ASSERT_EQUAL(1,list->head->data); TEST_ASSERT_EQUAL(20,list->tail->data); TEST_ASSERT_EQUAL(15,list->tail->next->data); TEST_ASSERT_EQUAL(10,list->tail->next->next->data); TEST_ASSERT_EQUAL(5,list->tail->next->next->next->data); TEST_ASSERT_EQUAL(1,list->tail->next->next->next->next->data); TEST_ASSERT_NOT_EQUAL(list->head->data,list->tail->data); TEST_ASSERT_EQUAL(list->head->data,list->tail->next->next->next->next->data); TEST_ASSERT_EQUAL(5,list->length); TEST_ASSERT_NULL(list->head->next); TEST_ASSERT_NOT_NULL(list->tail->next); listRemoveLast(list); //Removed 20 from the tail TEST_ASSERT_EQUAL(1,ele1.data); TEST_ASSERT_EQUAL(5,ele2.data); TEST_ASSERT_EQUAL(10,ele3.data); TEST_ASSERT_EQUAL(15,ele4.data); TEST_ASSERT_EQUAL(20,ele5.data); TEST_ASSERT_EQUAL(15,list->tail->data); TEST_ASSERT_EQUAL(10,list->tail->next->data); TEST_ASSERT_EQUAL(5,list->tail->next->next->data); TEST_ASSERT_EQUAL(1,list->tail->next->next->next->data); TEST_ASSERT_EQUAL(1,list->head->data); TEST_ASSERT_EQUAL(list->head->data,list->tail->next->next->next->data); TEST_ASSERT_EQUAL(4,list->length); TEST_ASSERT_NOT_NULL(list->head); TEST_ASSERT_NOT_NULL(list->tail); listRemoveLast(list); //Removed 15 from the tail TEST_ASSERT_EQUAL(1,ele1.data); TEST_ASSERT_EQUAL(5,ele2.data); TEST_ASSERT_EQUAL(10,ele3.data); TEST_ASSERT_EQUAL(15,ele4.data); TEST_ASSERT_EQUAL(20,ele5.data); TEST_ASSERT_EQUAL(10,list->tail->data); TEST_ASSERT_EQUAL(5,list->tail->next->data); TEST_ASSERT_EQUAL(1,list->tail->next->next->data); TEST_ASSERT_EQUAL(1,list->head->data); TEST_ASSERT_EQUAL(list->head->data,list->tail->next->next->data); TEST_ASSERT_EQUAL(3,list->length); TEST_ASSERT_NOT_NULL(list->head); TEST_ASSERT_NOT_NULL(list->tail); listRemoveLast(list); //Removed 10 from the tail TEST_ASSERT_EQUAL(1,ele1.data); TEST_ASSERT_EQUAL(5,ele2.data); TEST_ASSERT_EQUAL(10,ele3.data); TEST_ASSERT_EQUAL(15,ele4.data); TEST_ASSERT_EQUAL(20,ele5.data); TEST_ASSERT_EQUAL(5,list->tail->data); TEST_ASSERT_EQUAL(1,list->tail->next->data); TEST_ASSERT_EQUAL(1,list->head->data); TEST_ASSERT_EQUAL(list->head->data,list->tail->next->data); TEST_ASSERT_EQUAL(2,list->length); TEST_ASSERT_NOT_NULL(list->head); TEST_ASSERT_NOT_NULL(list->tail); listRemoveLast(list); //Removed 5 from the tail TEST_ASSERT_EQUAL(1,ele1.data); TEST_ASSERT_EQUAL(5,ele2.data); TEST_ASSERT_EQUAL(10,ele3.data); TEST_ASSERT_EQUAL(15,ele4.data); TEST_ASSERT_EQUAL(20,ele5.data); TEST_ASSERT_EQUAL(1,list->tail->data); TEST_ASSERT_EQUAL(1,list->head->data); TEST_ASSERT_EQUAL(list->head->data,list->tail->data); TEST_ASSERT_EQUAL(1,list->length); TEST_ASSERT_NOT_NULL(list->head); TEST_ASSERT_NOT_NULL(list->tail); listRemoveLast(list); //Removed 1 from the tail TEST_ASSERT_EQUAL(1,ele1.data); TEST_ASSERT_EQUAL(5,ele2.data); TEST_ASSERT_EQUAL(10,ele3.data); TEST_ASSERT_EQUAL(15,ele4.data); TEST_ASSERT_EQUAL(20,ele5.data); TEST_ASSERT_EQUAL(NULL,list->tail); TEST_ASSERT_EQUAL(NULL,list->head); TEST_ASSERT_EQUAL(list->head,list->tail); TEST_ASSERT_EQUAL(0,list->length); TEST_ASSERT_NULL(list->head); TEST_ASSERT_NULL(list->tail); }