Revision implements
        Byteable,
        Versioned { @Override public int hashCode() { return Objects.hash(locator, key, value); } @DoNotInvoke  Revision(ByteBuffer bytes); protected  Revision(L locator, K key, V value, long version, Action type); static TableRevision createPrimaryRevision(PrimaryKey record,
            Text key, Value value, long version, Action type); static CorpusRevision createSearchRevision(Text key, Text word,
            Position position, long version, Action type); static IndexRevision createSecondaryRevision(Text key, Value value,
            PrimaryKey record, long version, Action type); CompactRevision<V> compact(); @Override void copyTo(ByteSink sink); @Override @SuppressWarnings("unchecked") boolean equals(Object obj); @Override ByteBuffer getBytes(); K getKey(); L getLocator(); Action getType(); V getValue(); @Override long getVersion(); @Override int hashCode(); @Override boolean isStorable(); @Override int size(); @Override String toString();  }
@Test @Theory public void testHashCode(Revision<?, ?, ?> revision) { Assert.assertEquals(revision.hashCode(), duplicate(revision).hashCode()); }