### Question:
TabletTime { public static MetadataTime maxMetadataTime(MetadataTime mv1, MetadataTime mv2) { if (mv1 == null || mv2 == null) return mv1 == null ? (mv2 == null ? null : mv2) : mv1; return mv1.compareTo(mv2) < 0 ? mv2 : mv1; }  abstract void useMaxTimeFromWALog(long time); abstract MetadataTime getMetadataTime(); abstract MetadataTime getMetadataTime(long time); abstract long setUpdateTimes(List<Mutation> mutations); abstract long getTime(); abstract long getAndUpdateTime(); static TabletTime getInstance(MetadataTime metadataTime); static MetadataTime maxMetadataTime(MetadataTime mv1, MetadataTime mv2);  }### Answer:
@Test public void testMaxMetadataTime_Logical() { assertEquals(l5678, TabletTime.maxMetadataTime(l1234, l5678)); assertEquals(l5678, TabletTime.maxMetadataTime(l5678, l1234)); assertEquals(l5678, TabletTime.maxMetadataTime(l5678, l5678)); }
@Test public void testMaxMetadataTime_Millis() { assertEquals(m5678, TabletTime.maxMetadataTime(m1234, m5678)); assertEquals(m5678, TabletTime.maxMetadataTime(m5678, m1234)); assertEquals(m5678, TabletTime.maxMetadataTime(m5678, m5678)); }
@Test public void testMaxMetadataTime_Null1() { assertEquals(l5678, TabletTime.maxMetadataTime(null, l5678)); assertEquals(m5678, TabletTime.maxMetadataTime(null, m5678)); }
@Test public void testMaxMetadataTime_Null2() { assertEquals(l5678, TabletTime.maxMetadataTime(l5678, null)); assertEquals(m5678, TabletTime.maxMetadataTime(m5678, null)); }
@Test public void testMaxMetadataTime_Null3() { MetadataTime nullTime = null; assertNull(TabletTime.maxMetadataTime(nullTime, nullTime)); }
@Test(expected = IllegalArgumentException.class) public void testMaxMetadataTime_DifferentTypes1() { TabletTime.maxMetadataTime(l1234, m5678); }
@Test(expected = IllegalArgumentException.class) public void testMaxMetadataTime_DifferentTypes2() { TabletTime.maxMetadataTime(m1234, l5678); }