Ejemplo n.º 1
0
Archivo: test.c Proyecto: bibhas2/Cute
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;
}
Ejemplo n.º 2
0
static int connectionSubmitRequests(externalServer_t* pServer, connectionContext_t* pCContext) {
	//we have a free connection
	int  count = MAX_MULTI_GET_REQUESTS;
	while (count-- > 0) {
		request_t* pRequest = listRemoveFirst(pServer->unassignedRequests);
		if (!pRequest) {
			break;
		}
		listAddLast(pCContext->currentRequests, pRequest);
	}
	if (listGetSize(pCContext->currentRequests) > 0) {
		listAddLast(pServer->activeConnections, pCContext);
		int bytesWritten = connectionMakeGetRequest(pCContext);
		if (bytesWritten > 0) {
			int err = completeWrite(pCContext);
			if (err == 0) {
				pCContext->status = status_waiting_read;
				connectionWaitForRead(pCContext->connection, getGlobalEventBase());
			}else {
				if (err == 1) {
					pCContext->status = status_waiting_write;
					connectionWaitForWrite(pCContext->connection, getGlobalEventBase());
				}else {
					// error writing to server/ connection closed ?
					listRemove(pServer->activeConnections, pCContext);
					connectionContextDelete(pCContext, 1);
				}
			}
		}
	}else {
		//pooled connections also wait for read, incase they are close by the server
		pCContext->status = status_pooled;
		listAddLast(pServer->freeConnections, pCContext);
		connectionWaitForRead(pCContext->connection, getGlobalEventBase());
	}
	return 0;
}
Ejemplo n.º 3
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);
}
Ejemplo n.º 4
0
static int externalServerSubmit(externalServer_t* pServer, request_t* pRequest) {
	int                  returnValue   = 0;
	connectionContext_t* pCContext     = 0;
	connection_t         newConnection = 0;

	listAddLast(pServer->unassignedRequests, pRequest);
	pCContext = listRemoveFirst(pServer->freeConnections);

	if (pCContext) {
		connectionWaitCancel(pCContext->connection, getGlobalEventBase());
	}

	if (!pCContext) {
		//check if we have reached max concurrent connections limit
		// if not, create a new connection
		if (listGetSize(pServer->activeConnections) < MAX_CONCURRENT_CONNECTIONS) {
			LOG(DEBUG, "creating new external connection");
			newConnection = connectionClientCreate(pServer->serverIP,
												pServer->serverPort,
												createConnectionHandler());
			IfTrue(newConnection, ERR, "Error creating new connection to %s", pServer->serverName);
			//got a new connection
			pCContext = connectionContextCreate(newConnection, pServer);
			IfTrue(pCContext, ERR, "Error allocting memory for connection context");
			connectionSetContext(newConnection, pCContext);
			newConnection = 0;

			int err = connectionConnect(pCContext->connection);
			IfTrue(err >= 0, ERR, "connect failed");

			if (err == 1) {
				LOG(DEBUG, "waiting for connect to complete");
				pCContext->status = status_connecting;
				connectionWaitForConnect(pCContext->connection, getGlobalEventBase());
				goto OnSuccess;
			}
		}else {
			//if we have reached max connection limit, we will let the request rest
			//in the queue. Whenever one of the current connections get free, we will
			//use that to send the request.
			returnValue = 1;
			goto OnSuccess;
		}
	}

	if (pCContext) {
		pCContext->status = status_active;
		connectionSubmitRequests(pServer, pCContext);
	}
	goto OnSuccess;
OnError:
	if (newConnection) {
		connectionClose(newConnection);
	}
	if (pCContext) {
		connectionContextDelete(pCContext, 0);
	}
	returnValue = 1;
OnSuccess:
	return returnValue;
}
Ejemplo n.º 5
0
/**
	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);
}
Ejemplo n.º 6
0
void treeChildAdd(tree *t, tree *c) {
  if (t != NULL && c != NULL)
    t->child = (tree *) listNode(listAddLast((t->child != NULL) ?
    t->child->lnode : NULL,
    c->lnode));
}