private Set<Node> getNodes(RevTree t) { Set<Node> nodes = new TreeSet<>(); if (t.bucketsSize() == 0) { nodes.addAll(t.features()); } else { for (Bucket b : t.getBuckets()) { RevTree subtree = objectStore.getTree(b.getObjectId()); nodes.addAll(getNodes(subtree)); } } return nodes; }
private Set<Node> getNodes(RevTree t) { Set<Node> nodes = new TreeSet<>(); if (t.buckets().isEmpty()) { nodes.addAll(t.features()); } else { for (Bucket b : t.buckets().values()) { RevTree subtree = objectStore.getTree(b.getObjectId()); nodes.addAll(getNodes(subtree)); } } return nodes; }
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) { assertEquals(0, tree.bucketsSize()); assertFalse(tree.features().isEmpty()); } else { assertNotEquals(0, tree.bucketsSize()); assertTrue(tree.features().isEmpty()); } } return revTreeFromRandomQuadTree; }
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; }
Set<Node> resultNodes = getNodes(result);
Set<Node> resultNodes = getNodes(result);