@Test
public void testDiff() throws UnknownHostException
{
Allocator allocator = HeapAllocator.instance;
ContextState left;
ContextState right;
CounterColumn leftCol;
CounterColumn rightCol;
// timestamp
leftCol = new CounterColumn(ByteBufferUtil.bytes("x"), 0, 1L);
rightCol = new CounterColumn(ByteBufferUtil.bytes("x"), 0, 2L);
assert rightCol == leftCol.diff(rightCol);
assert null == rightCol.diff(leftCol);
// timestampOfLastDelete
leftCol = new CounterColumn(ByteBufferUtil.bytes("x"), 0, 1L, 1L);
rightCol = new CounterColumn(ByteBufferUtil.bytes("x"), 0, 1L, 2L);
assert rightCol == leftCol.diff(rightCol);
assert null == rightCol.diff(leftCol);
// equality: equal nodes, all counts same
left = ContextState.allocate(3, 0, allocator);
left.writeElement(CounterId.fromInt(3), 3L, 0L);
left.writeElement(CounterId.fromInt(6), 2L, 0L);
left.writeElement(CounterId.fromInt(9), 1L, 0L);
right = new ContextState(ByteBufferUtil.clone(left.context), 2);
leftCol = new CounterColumn(ByteBufferUtil.bytes("x"), left.context, 1L);
rightCol = new CounterColumn(ByteBufferUtil.bytes("x"), right.context, 1L);
assert leftCol.diff(rightCol) == null;
// greater than: left has superset of nodes (counts equal)
left = ContextState.allocate(4, 0, allocator);
left.writeElement(CounterId.fromInt(3), 3L, 0L);
left.writeElement(CounterId.fromInt(6), 2L, 0L);
left.writeElement(CounterId.fromInt(9), 1L, 0L);
left.writeElement(CounterId.fromInt(12), 0L, 0L);
right = ContextState.allocate(3, 0, allocator);
right.writeElement(CounterId.fromInt(3), 3L, 0L);
right.writeElement(CounterId.fromInt(6), 2L, 0L);
right.writeElement(CounterId.fromInt(9), 1L, 0L);
leftCol = new CounterColumn(ByteBufferUtil.bytes("x"), left.context, 1L);
rightCol = new CounterColumn(ByteBufferUtil.bytes("x"), right.context, 1L);
assert leftCol.diff(rightCol) == null;
// less than: right has subset of nodes (counts equal)
assert leftCol == rightCol.diff(leftCol);
// disjoint: right and left have disjoint node sets
left = ContextState.allocate(3, 0, allocator);
left.writeElement(CounterId.fromInt(3), 1L, 0L);
left.writeElement(CounterId.fromInt(4), 1L, 0L);
left.writeElement(CounterId.fromInt(9), 1L, 0L);
right = ContextState.allocate(3, 0, allocator);
right.writeElement(CounterId.fromInt(3), 1L, 0L);
right.writeElement(CounterId.fromInt(6), 1L, 0L);
right.writeElement(CounterId.fromInt(9), 1L, 0L);
leftCol = new CounterColumn(ByteBufferUtil.bytes("x"), left.context, 1L);
rightCol = new CounterColumn(ByteBufferUtil.bytes("x"), right.context, 1L);
assert rightCol == leftCol.diff(rightCol);
assert leftCol == rightCol.diff(leftCol);