Event { abstract Event join(Event other); Event();   }
@Test public void testJoin() { assertEquals(event1, event1.join(event1)); assertEquals(event2, event1.join(event2)); assertEquals(event3, event1.join(event3)); Event expected = Events.with(3, Events.with(0), Events.with(1)); assertEquals(expected, event2.join(event3)); }