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