@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 testWindowIdCompare() {
   long first = 1431714014123L;
   int ahead = 341;
   for (int windowWidthMillis : new int[] {500, 123}) {
     long window1 = WindowGenerator.getWindowId(first, first, windowWidthMillis);
     long window2 = WindowGenerator.getAheadWindowId(window1, first, windowWidthMillis, ahead);
     Assert.assertEquals(
         ahead, WindowGenerator.compareWindowId(window2, window1, first, windowWidthMillis));
   }
 }
 @Test
 public void testWindowIdAhead() {
   long first = 1431714014123L;
   int ahead = 678;
   for (int windowWidthMillis : new int[] {500, 123}) {
     long window1 = WindowGenerator.getWindowId(first, first, windowWidthMillis);
     long window2 = WindowGenerator.getAheadWindowId(window1, first, windowWidthMillis, ahead);
     for (int i = 0; i < ahead; i++) {
       window1 = WindowGenerator.getNextWindowId(window1, first, windowWidthMillis);
     }
     Assert.assertEquals(window2, window1);
   }
 }
  @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);
    }
  }