public static MonthsWindows months(int number) {
    return new MonthsWindows(number, 1, DEFAULT_START_DATE, DateTimeZone.UTC);
  }
@Test
  public void testMonths() throws Exception {
    Map<IntervalWindow, Set<String>> expected = new HashMap<>();

    final List<Long> timestamps =
        Arrays.asList(
            makeTimestamp(2014, 1, 1, 0, 0).getMillis(),
            makeTimestamp(2014, 1, 31, 5, 5).getMillis(),
            makeTimestamp(2014, 2, 1, 0, 0).getMillis(),
            makeTimestamp(2014, 2, 15, 5, 5).getMillis(),
            makeTimestamp(2015, 1, 1, 0, 0).getMillis(),
            makeTimestamp(2015, 1, 31, 5, 5).getMillis());

    expected.put(
        new IntervalWindow(makeTimestamp(2014, 1, 1, 0, 0), makeTimestamp(2014, 2, 1, 0, 0)),
        set(timestamps.get(0), timestamps.get(1)));

    expected.put(
        new IntervalWindow(makeTimestamp(2014, 2, 1, 0, 0), makeTimestamp(2014, 3, 1, 0, 0)),
        set(timestamps.get(2), timestamps.get(3)));

    expected.put(
        new IntervalWindow(makeTimestamp(2015, 1, 1, 0, 0), makeTimestamp(2015, 2, 1, 0, 0)),
        set(timestamps.get(4), timestamps.get(5)));

    assertEquals(expected, runWindowFn(CalendarWindows.months(1), timestamps));
  }