예제 #1
0
        public void IndexMinHeap_RemoveFirst(IntHeapItem[] items)
        {
            //Create the heap and add the items.
            var heap = new IndexMinHeap <IntHeapItem>(items);

            for (var i = 0; i < items.Length; i++)
            {
                heap.Add(i);
            }

            //Check if the items are in the correct order.
            var previousValue = int.MinValue;

            for (var i = 0; i < items.Length; i++)
            {
                var value = items[heap.RemoveFirst()].Value;
                if (value >= previousValue)
                {
                    previousValue = value;
                }
                else
                {
                    Assert.Fail($"Value {value} is smaller than previous value {previousValue}");
                }
            }
        }
예제 #2
0
        public bool Step(int stepsToRun = 1)
        {
            while (_openSet.Count > 0 && stepsToRun != 0)
            {
                if (stepsToRun > 0)
                {
                    stepsToRun--;
                }
                var currentNodeIndex = _openSet.RemoveFirst();
                if (currentNodeIndex == TargetNodeIndex)
                {
                    return(true);
                }

                ref var currentNode           = ref _pathfindingNetwork[currentNodeIndex];
                ref var currentDefinitionNode = ref _definitionNodes[currentNodeIndex];
예제 #3
0
        public bool FindPath(AstarNode[] pathfindingNetwork, DefinitionNode[] definitionNodes, int targetNodeIndex, float neededClearance, PathfindaxCollisionCategory collisionCategory, int stepsToRun = -1)
        {
            while (_openSet.Count > 0 && stepsToRun != 0)
            {
                if (stepsToRun > 0)
                {
                    stepsToRun--;
                }
                var currentNodeIndex = _openSet.RemoveFirst();
                if (currentNodeIndex == targetNodeIndex)
                {
                    return(true);
                }

                ref var currentNode           = ref pathfindingNetwork[currentNodeIndex];
                ref var currentDefinitionNode = ref definitionNodes[currentNodeIndex];
예제 #4
0
        public void IndexMinHeap_RemoveFirst_LIFO()
        {
            var items = new[] { new IntHeapItem(1), new IntHeapItem(1), new IntHeapItem(1) };
            //Create the heap and add the items.
            var heap = new IndexMinHeap <IntHeapItem>(items);

            for (var i = 0; i < items.Length; i++)
            {
                heap.Add(i);
            }

            //Check if the elements are returned in LIFO order
            for (var i = items.Length - 1; i >= 0; i--)
            {
                var index = heap.RemoveFirst();
                Assert.IsTrue(index == i);
            }
        }
예제 #5
0
        public void IndexMinHeap_Contains_AddAndRemoveAll(IntHeapItem[] items)
        {
            //Create the heap and add the items except the last one.
            var heap = new IndexMinHeap <IntHeapItem>(items);

            for (var i = 0; i < items.Length; i++)
            {
                heap.Add(i);
            }

            while (heap.Count > 0)
            {
                heap.RemoveFirst();
            }

            for (var i = 0; i < items.Length; i++)
            {
                Assert.IsFalse(heap.Contains(i), $"Contains returned true for index {i}");
            }
        }
 public IntHeapItem RemoveFirst()
 {
     return(_values[_removeFirstMinHeap.RemoveFirst()]);
 }