Esempio n. 1
0
        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());
        }
Esempio n. 2
0
        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());
        }
Esempio n. 3
0
        public void KdTree2D_Range_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 testStartRange = new int[] { rnd.Next(), rnd.Next() };
                var testEndRange   = new int[] { rnd.Next() + 100, rnd.Next() + 200 };

                var correctResult = new List <int[]>();
                for (int i = 0; i < testPts.Count; i++)
                {
                    if (InRange(testPts[i], testStartRange, testEndRange))
                    {
                        correctResult.Add(testPts[i]);
                    }
                }

                var actualResult = tree.RangeSearch(testStartRange, testEndRange);

                Assert.IsTrue(correctResult.Count == actualResult.Count);

                tree.Delete(testPts[j]);
                testPts.RemoveAt(j);
                j--;
            }
        }
Esempio n. 4
0
        public void KdTree2D_Range_Smoke_Test()
        {
            var testPts = new List <int[]> {
                new int[2] {
                    1, 1
                }, new int[2] {
                    10, 10
                },
                new int[2] {
                    1, 6
                }, new int[2] {
                    6, 7
                }, new int[2] {
                    9, 1
                },
                new int[2] {
                    2, 7
                }, new int[2] {
                    20, 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());

            var rangePoints = tree.RangeSearch(new int[2] {
                1, 1
            }, new int[2] {
                9, 9
            });
        }