List<Versioned<byte[]>> vals = new ArrayList<Versioned<byte[]>>();
vals.add(new Versioned<byte[]>(key, fetchedClock1));
vals.add(new Versioned<byte[]>(key, onlineClock1));
vals.add(new Versioned<byte[]>(key, fetchedClock2));
vals.add(new Versioned<byte[]>(key, onlineClock2));
MutableBoolean didPrune = new MutableBoolean();
vals = pruneAndResolve(vals, didPrune);
assertEquals("Must have pruned something", true, didPrune.booleanValue());
assertEquals("Must have two winning versions", 2, vals.size());
assertEquals("Must have onlineClock1", onlineClock1, vals.get(0).getVersion());
assertEquals("Must have onlineClock2", onlineClock2, vals.get(1).getVersion());
// case where key has not received any writes before the prune job
vals = new ArrayList<Versioned<byte[]>>();
vals.add(new Versioned<byte[]>(key, fetchedClock1));
vals.add(new Versioned<byte[]>(key, fetchedClock2));
didPrune = new MutableBoolean();
vals = pruneAndResolve(vals, didPrune);
assertEquals("Must have pruned something", true, didPrune.booleanValue());
// Note that since 0 is not a master in both fetched clocks, there will
// be one version. If 0 were to be a master, there will be one version,
// since master clock will trump non-master clock
assertEquals("Must have one winning version", 1, vals.size());
assertEquals("Must resolve to [0:ts] clock",