int testInit() {
  LinkedList list;
  linkedListInit(&list, INTEGER);
  _assert(list.head == NULL);
  _assert(list.tail == NULL);
  _assert(list.valueType == INTEGER);

  LinkedList doubleList;
  linkedListInit(&doubleList, DOUBLE);
  _assert(doubleList.head == NULL);
  _assert(doubleList.tail == NULL);
  _assert(doubleList.valueType == DOUBLE);
  return 0;
}
int main(){

    struct linkedList *deque;
    linkedListInit(&deque);


    linkedListAddFront(&deque, 1);
    linkedListAddFront(&deque, 2);
    linkedListAddFront(&deque, 3);


    printf("front: %d\n", linkedListFront(&deque));
    printf("back: %d\n", linkedListBack(&deque));

    linkedListAddBack(&deque, 8);
    linkedListAddBack(&deque, 7);
    linkedListAddBack(&deque, 6);

    printf("front: %d\n", linkedListFront(&deque));
    printf("back: %d\n", linkedListBack(&deque));

    linkedListRemoveBack(&deque);

    printf("front: %d\n", linkedListFront(&deque));
    printf("back: %d\n", linkedListBack(&deque));

    print(&deque);

return 0;
}
int testAppend() {
  LinkedList list;
  linkedListInit(&list, INTEGER);
  linkedListAppend(&list, (mixed)1);
  _assert(linkedListIndexOf(&list, (mixed)1) == 0);
  linkedListAppend(&list, (mixed)2);
  _assert(linkedListIndexOf(&list, (mixed)2) == 1);
  return 0;
}
Beispiel #4
0
int main(void) {
  //USB initializing
  SystemInit();
  USBD_Init(  &USB_OTG_dev,
              USB_OTG_HS_CORE_ID,
              &USR_desc,
              &USBD_CDC_cb,
              &USR_cb);

  //receiverQueue
  LinkedList receiverQueue;
  linkedListInit(&receiverQueue);
  
  //senderQueue
  LinkedList senderQueue;
  linkedListInit(&senderQueue);

  //init allocator
  TlvElement tlvEle[noOfTlv]={};
  initTlvAllocator(tlvEle,noOfTlv);

  //initialize receive tlv structure
  TlvPacket buffer={};
  TlvInfo tlvReceiveInfo={PROCESS_READY,IDLE_RECEIVE,0,&buffer,&receiverQueue};

  //initialize flash structure
  FlashObject flashObj={OBJ_IDLE,NULL,0,0,NULL,&senderQueue};
  FlashInfo flashInfo={FLASH_IDLE,PROCESS_READY,NULL,tlvReceiveInfo.list,&flashObj};

  //initialize send tlv structure
  TlvInfo tlvSendingInfo={PROCESS_READY,TYPE1_SEND,0,flashInfo.obj->tlv,&senderQueue};
  
  while(1){
    tlvReceivePacket(&tlvReceiveInfo);
    tlvInterpreter(&flashInfo);
    tlvSendPacket(&tlvSendingInfo);
  }
}
int testInsert() {
  LinkedList list;
  linkedListInit(&list, INTEGER);

  _assert(linkedListInsert(&list, 1, (mixed)1) == 1); // it succeeds
  // 1
  _assert(linkedListIndexOf(&list, (mixed)1) == 0);
  _assert(linkedListInsert(&list, 0, (mixed)2) == 1); // it succeeds
  // 2 -> 1
  _assert(linkedListIndexOf(&list, (mixed)2) == 0);
  _assert(linkedListInsert(&list, 1, (mixed)3) == 1); // it succeeds
  // 2 -> 3 -> 1
  _assert(linkedListIndexOf(&list, (mixed)2) == 0);
  _assert(linkedListIndexOf(&list, (mixed)3) == 1);
  _assert(linkedListIndexOf(&list, (mixed)1) == 2);
  return 0;
}
Beispiel #6
0
static void aStar( const BNavmesh *navmesh, const BTriangle *startTriangle, const BTriangle *endTriangle, const BVector *destination, BAStarOutput *output )
{
	assert( navmesh != NULL );
	assert( startTriangle != NULL );
	assert( endTriangle != NULL );
	assert( destination != NULL );
	assert( output != NULL );
	assert( isPointInsideNavmeshTriangle( navmesh, destination, endTriangle) );
	assert( startTriangle->connectedComponent == endTriangle->connectedComponent );

	BLinkedList openList, closedList;
	linkedListInit( &openList, sizeof( BAStarNode ), NULL );
	linkedListInit( &closedList, sizeof( BAStarNode ), NULL );

	BAStarNode startNode;
	startNode.cost = 0;
	startNode.previousTriangle = NULL;
	startNode.triangle = startTriangle;
	startNode.heuristic = heuristic( startNode.triangle, destination );
	linkedListPrepend( &openList, &startNode );

	BAStarNode arrivalNode;
	while ( 1 )
	{
		BAStarNode current;
		assert( !linkedListIsEmpty( &openList ) ); // TODO Handle case where no path exists
		linkedListGetHead( &openList, &current );
		linkedListRemoveHead( &openList );
		linkedListPrepend( &closedList, &current );

		if ( current.triangle == endTriangle )
		{
			arrivalNode = current;
			break;
		}

		for ( int neighborIndex = 0; neighborIndex < 3; neighborIndex++ )
		{
			const int neighborTriangleIndex = current.triangle->neighbours[neighborIndex];
			assert( neighborTriangleIndex < navmesh->numTriangles );
			if ( neighborTriangleIndex < 0 )
			{
				continue;
			}
			const BTriangle *neighborTriangle = &navmesh->triangles[neighborTriangleIndex];

			const float newCost = current.cost + movementCost( current.triangle, neighborTriangle );

			BAStarNode occurenceInOpenList;
			int inOpenList = linkedListFind( &openList, isTriangle, ( void * ) neighborTriangle, &occurenceInOpenList );
			if ( inOpenList )
			{
				if ( newCost < occurenceInOpenList.cost )
				{
					linkedListRemove( &openList, isTriangle, ( void * ) &current.triangle );
					inOpenList = 0;
				}
			}
			const int inClosedList = linkedListFind( &closedList, isTriangle, ( void * ) neighborTriangle, NULL );
			if ( !inOpenList && !inClosedList )
			{
				BAStarNode newNode;
				newNode.cost = newCost;
				newNode.triangle = neighborTriangle;
				newNode.heuristic = heuristic( newNode.triangle, destination );
				newNode.previousTriangle = current.triangle;
				linkedListInsertBefore( &openList, &newNode, hasBetterRank );
			}
		}
	}

	output->numTriangles = 0;
	{
		const BTriangle *currentTriangle = endTriangle;
		while ( currentTriangle != NULL )
		{
			assert( currentTriangle >= 0 );
			BAStarNode node;
			verify( linkedListFind( &closedList, isTriangle, ( void * ) currentTriangle, &node ) );
			currentTriangle = node.previousTriangle;
			output->numTriangles++;
		}
	}

	output->triangles = malloc( sizeof( BTriangle * ) * output->numTriangles );
	{
		int nextPathTriangleIndex = output->numTriangles - 1;
		const BTriangle *currentTriangle = endTriangle;
		while ( currentTriangle != NULL )
		{
			assert( currentTriangle >= 0 );
			assert( nextPathTriangleIndex >= 0 );
			assert( nextPathTriangleIndex < output->numTriangles );
			output->triangles[nextPathTriangleIndex] = currentTriangle;

			BAStarNode node;
			verify( linkedListFind( &closedList, isTriangle, ( void * ) currentTriangle, &node ) );
			currentTriangle = node.previousTriangle;
			nextPathTriangleIndex--;
		}
	}

	linkedListFree( &openList );
	linkedListFree( &closedList );

	assert( output->triangles[0] == startTriangle );
	assert( output->triangles[output->numTriangles - 1] == endTriangle );
}