@Test
  public void testWindowToTime() {
    long first = 1431714014000L;

    for (int windowWidthMillis : new int[] {500, 123}) {
      long time1 = WindowGenerator.getWindowMillis(6149164867354886271L, first, windowWidthMillis);
      long time2 = WindowGenerator.getWindowMillis(6149164867354886272L, first, windowWidthMillis);

      long window1 = WindowGenerator.getWindowId(time1, first, windowWidthMillis);
      long window2 = WindowGenerator.getWindowId(time2, first, windowWidthMillis);

      Assert.assertEquals("window 1", 6149164867354886271L, window1);
      Assert.assertEquals("window 2", 6149164867354886272L, window2);

      Assert.assertEquals("window millis difference", windowWidthMillis, time2 - time1);
    }
  }
  @Test
  public void testWindowToTimeBaseSecondRollover() {
    long first = 1431714014123L;

    for (int windowWidthMillis : new int[] {500, 123}) {
      long window1 = WindowGenerator.getWindowId(first, first, windowWidthMillis);
      window1 |= WindowGenerator.MAX_WINDOW_ID;
      long window2 = WindowGenerator.getNextWindowId(window1, first, windowWidthMillis);
      Assert.assertTrue(
          "base seconds should be greater during an rollover", (window2 >> 32) > (window1 >> 32));
      long time1 = WindowGenerator.getWindowMillis(window1, first, windowWidthMillis);
      long time2 = WindowGenerator.getWindowMillis(window2, first, windowWidthMillis);

      Assert.assertEquals(
          "max window id", WindowGenerator.MAX_WINDOW_ID, window1 & WindowGenerator.WINDOW_MASK);
      Assert.assertEquals("rollover after max", 0, window2 & WindowGenerator.WINDOW_MASK);
      Assert.assertEquals("window millis difference", windowWidthMillis, time2 - time1);
    }
  }