public void KdTree2D_NearestNeighbour_Smoke_Test() { var distanceCalculator = new DistanceCalculator2D(); var testPts = new List <int[]> { new int[2] { 3, 6 }, new int[2] { 17, 15 }, new int[2] { 13, 15 }, new int[2] { 6, 12 }, new int[2] { 9, 1 }, new int[2] { 2, 7 }, new int[2] { 10, 19 } }; var tree = new KDTree <int>(2); foreach (var pt in testPts) { tree.Insert(pt); } //IEnumerable tests using linq. Assert.AreEqual(tree.Count, tree.Count()); int j = testPts.Count - 1; while (testPts.Count > 0) { var testPoint = new int[] { 10, 20 }; var nearestNeigbour = tree.NearestNeighbour(new DistanceCalculator2D(), testPoint); var actualNeigbour = GetActualNearestNeighbour(testPts, testPoint); Assert.IsTrue(distanceCalculator.Compare(actualNeigbour, nearestNeigbour, testPoint) == 0); tree.Delete(testPts[j]); testPts.RemoveAt(j); j--; } //IEnumerable tests using linq. Assert.AreEqual(tree.Count, tree.Count()); }
public void KdTree2D_NearestNeighbour_Accuracy_Test() { var distanceCalculator = new DistanceCalculator2D(); int nodeCount = 1000; var rnd = new Random(); var testPts = new List <int[]>(); for (int i = 0; i < nodeCount; i++) { var start = i + rnd.Next(0, int.MaxValue - 100); var end = start + rnd.Next(1, 10); testPts.Add(new int[] { start, end }); } var tree = new KDTree <int>(2); foreach (var pt in testPts) { tree.Insert(pt); } //IEnumerable tests using linq. Assert.AreEqual(tree.Count, tree.Count()); int j = testPts.Count - 1; while (testPts.Count > 0) { var testPoint = new int[] { rnd.Next(), rnd.Next() }; var nearestNeigbour = tree.NearestNeighbour(distanceCalculator, testPoint); var actualNeigbour = GetActualNearestNeighbour(testPts, testPoint); Assert.IsTrue(distanceCalculator.Compare(actualNeigbour, nearestNeigbour, testPoint) == 0); tree.Delete(testPts[j]); testPts.RemoveAt(j); j--; } //IEnumerable tests using linq. Assert.AreEqual(tree.Count, tree.Count()); }