private RevTreeBuilder createQuadTree(Envelope maxBounds, final Iterable<Node> nodes) { return createQuadTree(maxBounds, nodes, this.objectStore); }
private QuadTreeBuilder createQuadTree(Envelope maxBounds, final Iterable<Node> nodes) { return createQuadTree(maxBounds, nodes, this.objectStore); }
final RevTree oldTree = createQuadTree(maxBounds, oldNodes).build(); final RevTree newTree = createQuadTree(maxBounds, newNodes).build();
final RevTree oldTree = createQuadTree(maxBounds, oldNodes).build(); final RevTree newTree = createQuadTree(maxBounds, newNodes).build();
private RevTree testCreateQuadTree(final Envelope maxBounds, List<Node> nodes) { RevTreeBuilder sequentialBuilder = createQuadTree(maxBounds, nodes); Collections.shuffle(nodes); RevTreeBuilder randomOrderTree = createQuadTree(maxBounds, nodes); RevTree revTreeFromSequentialQuadTree = sequentialBuilder.build(); RevTree revTreeFromRandomQuadTree = randomOrderTree.build(); assertEquals(revTreeFromSequentialQuadTree, revTreeFromRandomQuadTree); Set<Node> expectedNodes = new HashSet<>(nodes); Set<Node> actualNodes = getNodes(revTreeFromRandomQuadTree); if (!expectedNodes.equals(actualNodes)) { SetView<Node> difference = Sets.difference(expectedNodes, actualNodes); Assert.fail("Missing: " + difference); } // print(revTreeFromSequentialQuadTree); assertEquals(nodes.size(), revTreeFromSequentialQuadTree.size()); final int size = nodes.size(); final RevTree tree = revTreeFromRandomQuadTree; if (size == 0) { assertEquals(RevTree.EMPTY, tree); } else { if (size < 129) { assertEquals(0, tree.bucketsSize()); assertFalse(tree.features().isEmpty()); } else { assertNotEquals(0, tree.bucketsSize()); assertTrue(tree.features().isEmpty()); } } return revTreeFromRandomQuadTree; }
private void testRemove(final int ncount) { final Set<Node> nodes = new HashSet<>(createPointNodes(nodeRange(ncount))); RevTreeBuilder initialTreeBuilder = createQuadTree(maxBounds, nodes); final RevTree tree = initialTreeBuilder.build(); final Set<Node> removedNodes; RevTreeBuilder builder = RevTreeBuilder.quadBuilder(objectStore, objectStore, tree, maxBounds); // collect some keys to remove { Set<Node> treeNodes = RevObjectTestSupport.getTreeNodes(tree, objectStore); assertEquals(nodes, treeNodes); List<Node> list = new ArrayList<>(treeNodes); Collections.shuffle(list); int removeCount = ncount / 10; removedNodes = ImmutableSet.copyOf(list.subList(0, removeCount)); for (Node node : removedNodes) { boolean removed = builder.remove(node); assertTrue("Not removed: " + node, removed); } assertFalse(removedNodes.isEmpty()); } final RevTree result = builder.build(); Set<Node> resultNodes = getNodes(result); SetView<Node> difference = Sets.difference(nodes, resultNodes); assertEquals(removedNodes.size(), difference.size()); assertEquals(removedNodes, difference); }
private void testRemove(final int ncount) { final Set<Node> nodes = new HashSet<>(createPointNodes(nodeRange(ncount))); QuadTreeBuilder initialTreeBuilder = createQuadTree(maxBounds, nodes); initialTreeBuilder.clusteringStrategy(); final RevTree tree = initialTreeBuilder.build(); final Set<Node> removedNodes; QuadTreeBuilder builder = QuadTreeBuilder.create(objectStore, objectStore, tree, maxBounds); // collect some keys to remove { Set<Node> treeNodes = RevObjectTestSupport.getTreeNodes(tree, objectStore); assertEquals(nodes, treeNodes); List<Node> list = new ArrayList<>(treeNodes); Collections.shuffle(list); int removeCount = ncount / 10; removedNodes = ImmutableSet.copyOf(list.subList(0, removeCount)); for (Node node : removedNodes) { boolean removed = builder.remove(node); assertTrue("Not removed: " + node, removed); } assertFalse(removedNodes.isEmpty()); } final RevTree result = builder.build(); Set<Node> resultNodes = getNodes(result); SetView<Node> difference = Sets.difference(nodes, resultNodes); assertEquals(removedNodes.size(), difference.size()); assertEquals(removedNodes, difference); }
private RevTree testCreateQuadTree(final Envelope maxBounds, List<Node> nodes) { RevTreeBuilder sequentialBuilder = createQuadTree(maxBounds, nodes); Collections.shuffle(nodes); RevTreeBuilder randomOrderTree = createQuadTree(maxBounds, nodes); RevTree revTreeFromSequentialQuadTree = sequentialBuilder.build(); RevTree revTreeFromRandomQuadTree = randomOrderTree.build(); assertEquals(revTreeFromSequentialQuadTree, revTreeFromRandomQuadTree); Set<Node> expectedNodes = new HashSet<>(nodes); Set<Node> actualNodes = getNodes(revTreeFromRandomQuadTree); if (!expectedNodes.equals(actualNodes)) { SetView<Node> difference = Sets.difference(expectedNodes, actualNodes); Assert.fail("Missing: " + difference); } // print(revTreeFromSequentialQuadTree); assertEquals(nodes.size(), revTreeFromSequentialQuadTree.size()); final int size = nodes.size(); final RevTree tree = revTreeFromRandomQuadTree; if (size == 0) { assertEquals(RevTree.EMPTY, tree); } else { if (size < 129) { assertTrue(tree.buckets().isEmpty()); assertFalse(tree.features().isEmpty()); } else { assertFalse(tree.buckets().isEmpty()); assertTrue(tree.features().isEmpty()); } } return revTreeFromRandomQuadTree; }
public @Test void testNullGeometriesGoToRootUnpromotablesTree() { int size = 128; List<Node> nodes = createPointNodes(nodeRange(size)); RevTreeBuilder builder = createQuadTree(maxBounds, nodes); Node nullEnvNode = createNode(10000, null); builder.put(nullEnvNode); RevTree tree = builder.build(); assertNotEquals(0, tree.bucketsSize()); List<Node> matches = findNode(nullEnvNode.getName(), tree, objectStore); assertEquals(1, matches.size()); Integer unpromotablesBucketIndex = Integer.valueOf(4); assertTrue(tree.getBucket(unpromotablesBucketIndex).isPresent()); RevTree unpromotables = objectStore .getTree(tree.getBucket(unpromotablesBucketIndex).get().getObjectId()); matches = findNode(nullEnvNode.getName(), unpromotables, objectStore); assertEquals(1, matches.size()); }
final Set<Node> origNodes = new HashSet<>(createPointNodes(nodeRange(ncount))); final RevTree tree = createQuadTree(maxBounds, origNodes).build();
final Set<Node> origNodes = new HashSet<>(createPointNodes(nodeRange(ncount))); final RevTree tree = createQuadTree(maxBounds, origNodes).build();
public @Test void testNullGeometriesGoToRootUnpromotablesTree() { int size = 128; List<Node> nodes = createPointNodes(nodeRange(size)); RevTreeBuilder builder = createQuadTree(maxBounds, nodes); Node nullEnvNode = createNode(10000, null); builder.put(nullEnvNode); RevTree tree = builder.build(); assertFalse(tree.buckets().isEmpty()); List<Node> matches = findNode(nullEnvNode.getName(), tree, objectStore); assertEquals(1, matches.size()); Integer unpromotablesBucketIndex = Integer.valueOf(4); assertTrue(tree.buckets().keySet().contains(unpromotablesBucketIndex)); RevTree unpromotables = objectStore .getTree(tree.buckets().get(unpromotablesBucketIndex).getObjectId()); matches = findNode(nullEnvNode.getName(), unpromotables, objectStore); assertEquals(1, matches.size()); }