Stamp implements Serializable { public Stamp join(Stamp other) { ID idSum = id.sum(other.id); Event eventJoin = event.join(other.event); return new Stamp(idSum, eventJoin); } 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 testJoin() { Stamp expected = new Stamp(IDs.one(), Events.with(1, Events.zero(), Events.with(1))); assertEquals(expected, forkedStamp1.join(forkedStamp2)); assertEquals(expected, forkedStamp2.join(forkedStamp1)); assertNormalizedStamp(forkedStamp1.join(forkedStamp2)); }