Exemple #1
0
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;
}
Exemple #2
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);
}
Exemple #3
0
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);
}