Stamp implements Serializable { public Stamp[] fork() { ID[] ids = id.split(); return new Stamp[] { new Stamp(ids[0], event), new Stamp(ids[1], event) }; } Stamp();   Stamp(ID id, Event event); Stamp[] fork(); Stamp[] peek(); Stamp join(Stamp other); Stamp event(); @Override String toString(); @Override boolean equals(Object o); @Override int hashCode(); Stamp[] send(); Stamp receive(Stamp other); Stamp[] sync(Stamp other); boolean leq(Stamp other);  }
@Test public void testFork() { for (Stamp stamp : stamps) { Stamp[] fork = stamp.fork(); ID[] splitIDs = stamp.getId().split(); assertIntEquals(2, fork.length); assertEquals(stamp.getEvent(), fork[0].getEvent()); assertEquals(stamp.getEvent(), fork[1].getEvent()); assertEquals(splitIDs[0], fork[0].getId()); assertEquals(splitIDs[1], fork[1].getId()); assertNormalizedStamp(fork[0]); assertNormalizedStamp(fork[1]); } }