/** * Merges {@code leftNode} & {@code rightNode} and updates the map. */ private BitSetNode mergeNodes(BitSetNode leftNode, BitSetNode rightNode) { assert leftNode.getStart() < rightNode.getStart(); leftNode.merge(rightNode); map.remove(rightNode.getStart()); return leftNode; }
@Test public void testMerge() { BitSetNode node = new BitSetNode(1000, false); assertTrue(node.canMerge(new BitSetNode(1200, false))); assertFalse(node.canMerge(new BitSetNode(10000, false))); BitSetNode rightNode = new BitSetNode(1200, false); node.merge(rightNode); assertTrue(node.isModified(1000)); assertTrue(node.isModified(1200)); for (long i = node.getStart(); i <= node.getEnd(); i++) { if (i != 1000 && i != 1200) { assertEquals(DeleteState.YES, node.isDeleted(i)); } else { assertEquals(DeleteState.NO, node.isDeleted(i)); } } } }
/** * Merges {@code leftNode} & {@code rightNode} and updates the map. */ private BitSetNode mergeNodes(BitSetNode leftNode, BitSetNode rightNode) { assert leftNode.getStart() < rightNode.getStart(); leftNode.merge(rightNode); map.remove(rightNode.getStart()); return leftNode; }
@Test public void testMerge() { BitSetNode node = new BitSetNode(1000, false); assertTrue(node.canMerge(new BitSetNode(1200, false))); assertFalse(node.canMerge(new BitSetNode(10000, false))); BitSetNode rightNode = new BitSetNode(1200, false); node.merge(rightNode); assertTrue(node.isModified(1000)); assertTrue(node.isModified(1200)); for (long i = node.getStart(); i <= node.getEnd(); i++) { if (i != 1000 && i != 1200) { assertEquals(DeleteState.YES, node.isDeleted(i)); } else { assertEquals(DeleteState.NO, node.isDeleted(i)); } } } }