Beispiel #1
0
        private static void RunAssertion <L>(
            int numPoints,
            int numMoves,
            int queryFrameSize,
            SupportQuadTreeConfig config,
            SupportQuadTreeToolUnique <L> tools,
            double rectangleWidth,
            double rectangleHeight)
        {
            var random   = new Random();
            var quadTree = tools.factory.Invoke(config);

            // generate
            var points = GenerateIntegerCoordinates(random, numPoints, config, rectangleWidth, rectangleHeight);

            // add
            foreach (var point in points.Values)
            {
                tools.adderUnique.Invoke(quadTree, point);
            }

            // move points
            for (var i = 0; i < numMoves; i++)
            {
                var p = MovePoint(points, quadTree, random, config, tools.adderUnique, tools.remover);

                var    qx      = p.X - queryFrameSize;
                var    qy      = p.Y - queryFrameSize;
                double qwidth  = queryFrameSize * 2;
                double qheight = queryFrameSize * 2;
                var    values  = tools.querier.Invoke(quadTree, qx, qy, qwidth, qheight);
                AssertIds(points.Values, values, qx, qy, qwidth, qheight, tools.pointInsideChecking);
            }
        }
        private static void RunAssertion <L>(
            int numPoints,
            int numQueries,
            SupportQuadTreeConfig config,
            SupportQuadTreeToolUnique <L> tools)
        {
            L quadTree = tools.factory.Invoke(config);

            // generate
            var random     = new Random();
            var rectangles = tools.generator.Generate(random, numPoints, config.X, config.Y, config.Width, config.Height);

            // add
            foreach (var rectangle in rectangles)
            {
                tools.adderUnique.Invoke(quadTree, rectangle);
            }

            // query
            for (var i = 0; i < numQueries; i++)
            {
                SupportQuadTreeUtil.RandomQuery(
                    quadTree,
                    rectangles,
                    random,
                    config.X,
                    config.Y,
                    config.Width,
                    config.Height,
                    tools.querier,
                    tools.pointInsideChecking);
            }

            // remove point-by-point
            while (!rectangles.IsEmpty())
            {
                int removeIndex = random.Next(rectangles.Count);
                SupportRectangleWithId removed = rectangles.DeleteAt(removeIndex);
                tools.remover.Invoke(quadTree, removed);

                for (var i = 0; i < numQueries; i++)
                {
                    SupportQuadTreeUtil.RandomQuery(
                        quadTree,
                        rectangles,
                        random,
                        config.X,
                        config.Y,
                        config.Width,
                        config.Height,
                        tools.querier,
                        tools.pointInsideChecking);
                }
            }
        }
        public static void RunAssertion <L>(SupportQuadTreeToolUnique <L> tools)
        {
            SupportQuadTreeConfig[] configs =
            {
                new SupportQuadTreeConfig(0,       0,  100, 100,    4, 20),
                new SupportQuadTreeConfig(50,     80,   20, 900,    4, 20),
                new SupportQuadTreeConfig(50,     80,   20, 900,    2, 80),
                new SupportQuadTreeConfig(50, 800000, 2000, 900, 1000, 80)
            };

            foreach (var config in configs)
            {
                RunAssertion(100, 100, config, tools);
            }
        }
Beispiel #4
0
        public static void RunAssertion <L>(SupportQuadTreeToolUnique <L> tools)
        {
            Assert.IsTrue(tools.generator.Unique());

            SupportQuadTreeConfig[] configs =
            {
                new SupportQuadTreeConfig(0, 0, 1000, 1000,    4, 20),
                new SupportQuadTreeConfig(0, 0, 1000, 1000, 1000, 20),
                new SupportQuadTreeConfig(0, 0, 1000, 1000,    2, 50)
            };

            foreach (var config in configs)
            {
                RunAssertionPointsUnique(1000, config, tools);
            }
        }
Beispiel #5
0
        private static void RunAssertionPointsUnique <L>(
            int numPoints,
            SupportQuadTreeConfig config,
            SupportQuadTreeToolUnique <L> tools)
        {
            var random   = new Random();
            L   quadTree = tools.factory.Invoke(config);
            var points   = tools.generator.Generate(random, numPoints, config.X, config.Y, config.Width, config.Height);

            // add
            foreach (var p in points)
            {
                tools.adderUnique.Invoke(quadTree, p);
            }

            // find all individually
            foreach (var p in points)
            {
                ICollection <object> values = tools.querier.Invoke(quadTree, p.X, p.Y, 0.9, 0.9);
                Assert.IsTrue(values != null && !values.IsEmpty(), "Failed to find " + p);
                Assert.AreEqual(1, values.Count);
                Assert.AreEqual(p.Id, values.First());
            }

            // get all content
            ICollection <object> all = tools.querier.Invoke(quadTree, config.X, config.Y, config.Width, config.Height);

            Assert.AreEqual(points.Count, all.Count);
            Assert.AreEqual(points.Count, new HashSet <object>(all).Count);
            foreach (var value in all)
            {
                Assert.IsInstanceOf <string>(value);
            }

            // remove all
            foreach (var p in points)
            {
                tools.remover.Invoke(quadTree, p);
            }

            ICollection <object> valuesLater = tools.querier.Invoke(quadTree, config.X, config.Y, config.Width, config.Height);

            Assert.IsNull(valuesLater);
        }
Beispiel #6
0
        public static void RunAssertion <L>(
            SupportQuadTreeToolUnique <L> tools,
            double rectangleWidth,
            double rectangleHeight)
        {
            Assert.IsNull(tools.generator);

            SupportQuadTreeConfig[] configs =
            {
                new SupportQuadTreeConfig(0,     0, 100,  100,   4,  20),
                new SupportQuadTreeConfig(0,     0, 100,  100, 100,  20),
                new SupportQuadTreeConfig(0,     0, 100,  100,   4, 100),
                new SupportQuadTreeConfig(10, 8000,  90, 2000,   4, 100)
            };

            foreach (var config in configs)
            {
                RunAssertion(1000, 1000, 5, config, tools, rectangleWidth, rectangleHeight);
                RunAssertion(1000, 1000, 1, config, tools, rectangleWidth, rectangleHeight);
            }
        }