public IntervalSet negate() {
    if (!isValid()) {
      return IntervalSet.ALWAYS;
    }
    if (mStartMs == MIN_MS) {
      if (mEndMs == MAX_MS) {
        // this is ALWAYS, so the negation is never
        return IntervalSet.NEVER;
      }
      return new IntervalSet(after(mEndMs));
    }
    // start is after min
    if (mEndMs == MAX_MS) {
      return new IntervalSet(before(mStartMs));
    }

    // start is after min, and end is before max. This requires 2 intervals.
    return new IntervalSet(Lists.newArrayList(before(mStartMs), after(mEndMs)));
  }
@Test
  public void negateAlways() {
    List<Interval> neg = Interval.ALWAYS.negate().getIntervals();
    Assert.assertTrue(neg.size() == 1);
    Interval in = neg.get(0);
    Assert.assertEquals(Interval.NEVER, in);
  }