use of jcog.tree.rtree.util.Stats in project narchy by automenta.
the class LinearSplitLeafTest method overlappingEntryTest.
/**
* Adds several overlapping rectangles and confirms that no entries
* are lost during insert/split.
*/
@Test
public void overlappingEntryTest() {
final RTree<RectDouble2D> rTree = RTree2DTest.createRect2DTree(TYPE);
rTree.add(new RectDouble2D(0, 0, 1, 1));
rTree.add(new RectDouble2D(0, 0, 2, 2));
rTree.add(new RectDouble2D(0, 0, 2.1, 2));
rTree.add(new RectDouble2D(0, 0, 3, 3));
rTree.add(new RectDouble2D(0, 0, 3.1, 3));
rTree.add(new RectDouble2D(0, 0, 4, 4));
rTree.add(new RectDouble2D(0, 0, 5, 5));
rTree.add(new RectDouble2D(0, 0, 6, 6));
rTree.add(new RectDouble2D(0, 0, 7, 7));
rTree.add(new RectDouble2D(0, 0, 7, 7.1));
rTree.add(new RectDouble2D(0, 0, 8, 8));
rTree.add(new RectDouble2D(0, 0, 9, 9));
rTree.add(new RectDouble2D(0, 1, 2, 2));
rTree.add(new RectDouble2D(0, 1, 3, 3));
rTree.add(new RectDouble2D(0, 1, 4, 4));
rTree.add(new RectDouble2D(0, 1, 4.1, 4));
rTree.add(new RectDouble2D(0, 1, 5, 5));
// 17 entries guarantees *at least* 2 splits when max leaf size is 8
final int expectedEntryCount = 17;
final Stats stats = rTree.stats();
assertEquals(expectedEntryCount, stats.getEntryCount(), "Unexpected number of entries in " + TYPE + " split tree: " + stats.getEntryCount() + " entries - expected: " + expectedEntryCount + " actual: " + stats.getEntryCount());
}
use of jcog.tree.rtree.util.Stats in project narchy by automenta.
the class QuadraticSplitLeafTest method basicSplitTest.
/**
* Adds enough entries to force a single split and confirms that
* no entries are lost.
*/
@Test
public void basicSplitTest() {
RTree<RectDouble2D> rTree = RTree2DTest.createRect2DTree(TYPE);
rTree.add(new RectDouble2D(0, 0, 1, 1));
rTree.add(new RectDouble2D(1, 1, 2, 2));
rTree.add(new RectDouble2D(2, 2, 3, 3));
rTree.add(new RectDouble2D(3, 3, 4, 4));
rTree.add(new RectDouble2D(4, 4, 5, 5));
rTree.add(new RectDouble2D(5, 5, 6, 6));
rTree.add(new RectDouble2D(6, 6, 7, 7));
rTree.add(new RectDouble2D(7, 7, 8, 8));
// 9 entries guarantees a split
rTree.add(new RectDouble2D(8, 8, 9, 9));
Stats stats = rTree.stats();
assertTrue(stats.getMaxDepth() == 1, "Unexpected max depth after basic split");
assertTrue(stats.getBranchCount() == 1, "Unexpected number of branches after basic split");
assertTrue(stats.getLeafCount() == 2, "Unexpected number of leaves after basic split");
assertTrue(stats.getEntriesPerLeaf() == 4.5, "Unexpected number of entries per leaf after basic split");
}
use of jcog.tree.rtree.util.Stats in project narchy by automenta.
the class QuadraticSplitLeafTest method causeLinearSplitOverflow.
/**
* This test previously caused a StackOverflowException on LINEAR leaf.
* It has since been fixed, but keeping the test here to ensure this leaf type
* never falls victim to the same issue.
*/
@Test
public void causeLinearSplitOverflow() {
final RTree<RectDouble2D> rTree = RTree2DTest.createRect2DTree(2, 8, TYPE);
final Random rand = new Random(13);
for (int i = 0; i < 500; i++) {
final int x1 = rand.nextInt(10);
final int y1 = rand.nextInt(10);
final int x2 = x1 + rand.nextInt(200);
final int y2 = y1 + rand.nextInt(200);
rTree.add(new RectDouble2D(x1, y1, x2, y2));
}
final Stats stats = rTree.stats();
stats.print(System.out);
}
use of jcog.tree.rtree.util.Stats in project narchy by automenta.
the class QuadraticSplitLeafTest method overlappingEntryTest.
/**
* Adds several overlapping rectangles and confirms that no entries
* are lost during insert/split.
*/
@Test
public void overlappingEntryTest() {
final RTree<RectDouble2D> rTree = RTree2DTest.createRect2DTree(TYPE);
rTree.add(new RectDouble2D(0, 0, 1, 1));
rTree.add(new RectDouble2D(0, 0, 2, 2));
rTree.add(new RectDouble2D(0, 0, 2.1, 2));
rTree.add(new RectDouble2D(0, 0, 3, 3));
rTree.add(new RectDouble2D(0, 0, 3.1, 3));
rTree.add(new RectDouble2D(0, 0, 4, 4));
rTree.add(new RectDouble2D(0, 0, 5, 5));
rTree.add(new RectDouble2D(0, 0, 6, 6));
rTree.add(new RectDouble2D(0, 0, 7, 7));
rTree.add(new RectDouble2D(0, 0, 7.1, 7));
rTree.add(new RectDouble2D(0, 0, 8, 8));
rTree.add(new RectDouble2D(0, 0, 9, 9));
rTree.add(new RectDouble2D(0, 1, 2, 2));
rTree.add(new RectDouble2D(0, 1, 3, 3));
rTree.add(new RectDouble2D(0, 1, 4, 4));
rTree.add(new RectDouble2D(0, 1, 4.1, 4));
rTree.add(new RectDouble2D(0, 1, 5, 5));
// 17 entries guarantees *at least* 2 splits when max leaf size is 8
final int expectedEntryCount = 17;
final Stats stats = rTree.stats();
assertEquals(expectedEntryCount, stats.getEntryCount(), "Unexpected number of entries in " + TYPE + " split tree: " + stats.getEntryCount() + " entries - expected: " + expectedEntryCount + " actual: " + stats.getEntryCount());
}
use of jcog.tree.rtree.util.Stats in project narchy by automenta.
the class RTreeNDTest method searchAll.
static void searchAll(int minDim, int maxDim, IntFunction<RectFloatND[]> generator) {
for (int dim = minDim; dim <= maxDim; dim++) {
final RectFloatND[] rects = generator.apply(dim);
Set<RectFloatND> input = new HashSet();
Collections.addAll(input, rects);
System.out.println("\tRectNDSearchAllTest[dim=" + dim + ']');
for (Spatialization.DefaultSplits type : Spatialization.DefaultSplits.values()) {
RTree<RectFloatND> rTree = RTree2DTest.createRectNDTree(2, 8, type);
for (int i = 0; i < rects.length; i++) {
rTree.add(rects[i]);
}
final RectFloatND searchRect = new RectFloatND(FloatND.fill(dim, Float.NEGATIVE_INFINITY), FloatND.fill(dim, Float.POSITIVE_INFINITY));
RectFloatND[] results = new RectFloatND[rects.length];
final int foundCount = rTree.containedToArray(searchRect, results);
int resultCount = 0;
for (int i = 0; i < results.length; i++) {
if (results[i] != null) {
resultCount++;
}
}
final int expectedCount = rects.length;
// assertEquals("[" + type + "] Search returned incorrect search result count - expected: " + expectedCount + " actual: " + foundCount, expectedCount, foundCount);
assertTrue(Math.abs(expectedCount - foundCount) < 10, "[" + type + "] Search returned incorrect search result count - expected: " + expectedCount + " actual: " + foundCount);
assertTrue(Math.abs(expectedCount - resultCount) < 10, "[" + type + "] Search returned incorrect number of rectangles - expected: " + expectedCount + " actual: " + resultCount);
Set<RectFloatND> output = new HashSet();
Collections.addAll(output, results);
// assertEquals( " same content", input, output);
Stats s = rTree.stats();
s.print(System.out);
// System.out.println("\t" + rTree.getRoot());
assertTrue(s.getMaxDepth() <= 8);
}
}
}
Aggregations