Пример #1
0
        public void ReplacementTest([Values(0, 1, 2, 3, 4, 5, 10, 100, 1000)] int pointAmount)
        {
            CreateTestData(pointAmount, out var points, out _);
            CreateTestData(pointAmount, out var replacementPoints, out var length);

            var polyline = new LinearPolyline(points);

            var replacementOrder = CollectionUtil.CreateArray(points.Length, 0, i => i + 1);

            replacementOrder.Shuffle();

            for (var i = 0; i < pointAmount; i++)
            {
                var index = replacementOrder[i];
                polyline[index] = replacementPoints[index];
            }

            if (pointAmount < 2)
            {
                Assert.AreEqual(polyline.Length, 0f, float.Epsilon);
            }
            else
            {
                Assert.AreEqual(polyline.Length / length, 1, 1e-5, length.ToString(CultureInfo.InvariantCulture));
            }
        }
Пример #2
0
        public void RemovalTest([Values(0, 1, 2, 3, 4, 5, 10, 100, 1000)] int pointAmount)
        {
            CreateTestData(pointAmount, out var points, out _);

            var polyline      = new LinearPolyline(points);
            var currentPoints = new List <Vector3>(points);

            for (var i = 0; i < pointAmount; i++)
            {
                var index = Random.Range(0, currentPoints.Count);
                polyline.RemoveAt(index);
                currentPoints.RemoveAt(index);

                if (currentPoints.Count < 2)
                {
                    Assert.AreEqual(polyline.Length, 0, 1e-6);
                }
                else
                {
                    var length = 0f;
                    for (var j = 1; j < currentPoints.Count; j++)
                    {
                        length += (currentPoints[j] - currentPoints[j - 1]).magnitude;
                    }

                    Assert.AreEqual(polyline.Length / length, 1, 1e-5, length.ToString(CultureInfo.InvariantCulture));
                }
            }
        }
Пример #3
0
        public void CreationTest([Values(0, 1, 2, 3, 4, 5, 10, 100, 1000, 10000)] int pointAmount)
        {
            CreateTestData(pointAmount, out var points, out var length);

            var polyline = new LinearPolyline();

            Assert.AreEqual(polyline.Length, 0f, float.Epsilon);

            polyline = new LinearPolyline(points);

            if (pointAmount < 2)
            {
                Assert.AreEqual(polyline.Length, 0f, float.Epsilon);
            }
            else
            {
                Assert.AreEqual(polyline.Length / length, 1, 1e-5, length.ToString(CultureInfo.InvariantCulture));
            }
        }
Пример #4
0
        public void InsertionTest([Values(0, 1, 2, 3, 4, 5, 10, 100, 1000)] int pointAmount)
        {
            CreateTestData(pointAmount, out var points, out _);

            var polyline     = new LinearPolyline();
            var randomPoints = new List <Vector3>(points);

            randomPoints.Shuffle();

            var insertedPoints = new List <Vector3>();

            while (randomPoints.Count > 0)
            {
                var point = randomPoints[randomPoints.Count - 1];
                randomPoints.RemoveAt(randomPoints.Count - 1);

                var index = Random.Range(0, insertedPoints.Count + 1);
                insertedPoints.Insert(index, point);
                polyline.Insert(index, point);
            }

            Assert.AreEqual(insertedPoints.Count, points.Length);
            Assert.AreEqual(polyline.Count, insertedPoints.Count);

            var length = 0.0;

            for (var i = 1; i < insertedPoints.Count; i++)
            {
                length += VectorUtil.PreciseDistance(insertedPoints[i], insertedPoints[i - 1]);
            }

            if (pointAmount < 2)
            {
                Assert.AreEqual(polyline.Length, 0f, float.Epsilon);
            }
            else
            {
                Assert.AreEqual(polyline.Length / length, 1, 1e-5, length.ToString(CultureInfo.InvariantCulture));
            }
        }