public void testDifference()
{
Range full = new Range(tok(0), tok(0));
int maxsize = 16;
mt.maxsize(maxsize);
MerkleTree mt2 = new MerkleTree(partitioner, RECOMMENDED_DEPTH, maxsize);
mt.init();
mt2.init();
TreeRange leftmost = null;
TreeRange middle = null;
TreeRange rightmost = null;
// compact the leftmost, and split the rightmost
Iterator<TreeRange> ranges = mt.invalids(full);
leftmost = ranges.next();
rightmost = null;
while (ranges.hasNext())
rightmost = ranges.next();
mt.compact(leftmost.right);
leftmost = mt.get(leftmost.right); // leftmost is now a larger range
mt.split(rightmost.right);
// set the hash for the left neighbor of rightmost
middle = mt.get(rightmost.left);
middle.hash("arbitrary!".getBytes());
byte depth = middle.depth;
// add dummy hashes to the rest of both trees
for (TreeRange range : mt.invalids(full))
range.addAll(new HIterator(range.right));
for (TreeRange range : mt2.invalids(full))
range.addAll(new HIterator(range.right));
// trees should disagree for leftmost, (middle.left, rightmost.right]
List<TreeRange> diffs = MerkleTree.difference(mt, mt2);
assertEquals(diffs + " contains wrong number of differences:", 2, diffs.size());