@Test public void testSplitLimitSize() { mts = new MerkleTrees(partitioner); mts.addMerkleTree(2, fullRange()); assertTrue(mts.split(tok(4))); assertEquals(2, mts.size()); // should fail to split above maxsize assertFalse(mts.split(tok(2))); assertEquals(2, mts.size()); assertEquals(new Range<>(tok(4), tok(-1)), mts.get(tok(-1))); assertEquals(new Range<>(tok(-1), tok(4)), mts.get(tok(4))); }
@Test public void testSplit() { // split the range (zero, zero] into: // (zero,four], (four,six], (six,seven] and (seven, zero] mts.split(tok(4)); mts.split(tok(6)); mts.split(tok(7)); assertEquals(4, mts.size()); assertEquals(new Range<>(tok(7), tok(-1)), mts.get(tok(-1))); assertEquals(new Range<>(tok(-1), tok(4)), mts.get(tok(3))); assertEquals(new Range<>(tok(-1), tok(4)), mts.get(tok(4))); assertEquals(new Range<>(tok(4), tok(6)), mts.get(tok(6))); assertEquals(new Range<>(tok(6), tok(7)), mts.get(tok(7))); // check depths assertEquals((byte) 1, mts.get(tok(4)).depth); assertEquals((byte) 2, mts.get(tok(6)).depth); assertEquals((byte) 3, mts.get(tok(7)).depth); assertEquals((byte) 3, mts.get(tok(-1)).depth); try { mts.split(tok(-1)); fail("Shouldn't be able to split outside the initial range."); } catch (AssertionError e) { // pass } }
@Test public void testSplitLimitDepth() { mts = new MerkleTrees(partitioner); mts.addMerkleTree(Integer.MAX_VALUE, (byte) 2, fullRange()); assertTrue(mts.split(tok(4))); assertTrue(mts.split(tok(2))); assertEquals(3, mts.size()); // should fail to split below hashdepth assertFalse(mts.split(tok(1))); assertEquals(3, mts.size()); assertEquals(new Range<>(tok(4), tok(-1)), mts.get(tok(-1))); assertEquals(new Range<>(tok(-1), tok(2)), mts.get(tok(2))); assertEquals(new Range<>(tok(2), tok(4)), mts.get(tok(4))); }