예제 #1
0
        public void Pop_ThrowsIndexOutOfRangeException_OnZeroSize()
        {
            var    stack  = new TraverseStack <int>();
            Action action = () => stack.Pop();

            action.Should().Throw <IndexOutOfRangeException>();
        }
예제 #2
0
        public void TraverseToElementAndReturnBack_ReturnsCorrectSequence(params int[] elements)
        {
            var stack = new TraverseStack <int>();

            foreach (var element in elements)
            {
                stack.Push(element);
            }
            var traverseResults = elements
                                  .Select(element => stack.TraverseToElementAndReturnBack(element).ToList())
                                  .ToList();

            for (var i = 0; i < traverseResults.Count; i++)
            {
                var explicitTraverse = new List <int>();
                var index            = elements.Length - 1;
                while (index >= 0)
                {
                    explicitTraverse.Add(elements[index]);
                    if (elements[index] == elements[i])
                    {
                        break;
                    }
                    index--;
                }
                for (index = index + 1; index < elements.Length; index++)
                {
                    explicitTraverse.Add(elements[index]);
                }
                traverseResults[i].Should().BeEquivalentTo(explicitTraverse);
            }
        }
예제 #3
0
        public void Clear()
        {
            UpdateBuffer  = new SimplexWrap <VERTEX> [Dimension];
            UpdateIndices = new int[Dimension];

            InputVertices  = null;
            CurrentVertex  = null;
            FurthestVertex = null;
            MaxDistance    = float.NegativeInfinity;

            ConvexSimplexs.Clear();
            AffectedFaceBuffer.Clear();
            TraverseStack.Clear();
            SingularVertices.Clear();
            ConeFaceBuffer.Clear();
            ObjectManager.Clear();
            UnprocessedFaces.Clear();
            EmptyBuffer.Clear();
            BeyondBuffer.Clear();

            for (int i = 0; i < CONNECTOR_TABLE_SIZE; i++)
            {
                ConnectorTable[i].Clear();
            }
        }
예제 #4
0
        public void Push_ThrowsArgumentException_OnEqualElements()
        {
            var stack = new TraverseStack <int>();

            stack.Push(5);
            Action action = () => stack.Push(5);

            action.Should().Throw <ArgumentException>();
        }
예제 #5
0
        public void Remove_ThrowsArgumentException_OnInvalidElement()
        {
            var stack = new TraverseStack <int>();

            stack.Push(5);
            stack.Push(124);
            Action action = () => stack.Remove(1);

            action.Should().Throw <ArgumentException>();
        }
예제 #6
0
        public void Contains_ReturnsCorrectValues(int numberToCheck, bool expectedValue, params int[] numbers)
        {
            var stack = new TraverseStack <int>();

            foreach (var number in numbers)
            {
                stack.Push(number);
            }
            stack.Contains(numberToCheck).Should().Be(expectedValue);
        }
예제 #7
0
        public void TraverseToElementAndReturnBack_ThrowsArgumentException_OnInvalidElement()
        {
            var stack = new TraverseStack <int>();

            stack.Push(5);
            stack.Push(124);
            Action action = () => stack.TraverseToElementAndReturnBack(1).ToList();

            action.Should().Throw <ArgumentException>();
        }
예제 #8
0
        public void PushAndPop_ReturnsCorrectElementsInCorrectOrder(params int[] elements)
        {
            var stack = new TraverseStack <int>();

            foreach (var element in elements)
            {
                stack.Push(element);
            }
            foreach (var element in elements.Reverse())
            {
                stack.Pop().Should().Be(element);
            }
        }
예제 #9
0
        public void Remove_DeletesElementsCorrectly(int amountOfDeletions, params int[] elements)
        {
            var random = new Random();
            var stack  = new TraverseStack <int>();

            foreach (var t in elements)
            {
                stack.Push(t);
            }
            var reversedElements = elements.Reverse().ToList();

            for (var i = 0; i < amountOfDeletions; i++)
            {
                var randomValue = reversedElements[random.Next(reversedElements.Count)];
                reversedElements.Remove(randomValue);
                stack.Remove(randomValue);
                var stackAsList = stack.ToList();
                stackAsList.Should().BeEquivalentTo(reversedElements);
            }
        }
예제 #10
0
        /// <summary>
        /// Recursively traverse all the relevant faces.
        /// </summary>
        void TraverseAffectedFaces(int currentFace)
        {
            TraverseStack.Clear();
            TraverseStack.Push(currentFace);
            AffectedFaceFlags[currentFace] = true;

            while (TraverseStack.Count > 0)
            {
                var top = FacePool[TraverseStack.Pop()];
                for (int i = 0; i < Dimension; i++)
                {
                    var adjFace = top.AdjacentFaces[i];

                    if (!AffectedFaceFlags[adjFace] && MathHelper.GetVertexDistance(CurrentVertex, FacePool[adjFace]) >= PlaneDistanceTolerance)
                    {
                        AffectedFaceBuffer.Add(adjFace);
                        AffectedFaceFlags[adjFace] = true;
                        TraverseStack.Push(adjFace);
                    }
                }
            }
        }