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)); } }
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)); } } }
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)); } }
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)); } }