@Test
  public void testEmpty() throws InterruptedException {
    final RollingWindowAverageFakeTime rwa =
        new RollingWindowAverageFakeTime(
            1 * RollingWindowAverage.SECOND, 100 * RollingWindowAverage.MILLIS);

    assertEquals("Average incorrect.", 0, rwa.getCurrentAverage(), 0.01d);
  }
  @Test
  public void testRollingAverage() throws InterruptedException {
    final RollingWindowAverageFakeTime rwa =
        new RollingWindowAverageFakeTime(
            1 * RollingWindowAverage.SECOND, 100 * RollingWindowAverage.MILLIS);

    rwa.add(now, 2);
    rwa.add(now, 3);
    rwa.add(now, 5);

    assertEquals("Average incorrect.", (2.0 + 3 + 5) / 3, rwa.getCurrentAverage(), 0.01d);

    sleep(120 * RollingWindowAverage.MILLIS);

    rwa.add(now, 7);

    assertEquals("Average incorrect.", (2.0 + 3 + 5 + 7) / 4, rwa.getCurrentAverage(), 0.01d);

    sleep(500 * RollingWindowAverage.MILLIS);

    rwa.add(now, 9);

    assertEquals("Average incorrect.", (2.0 + 3 + 5 + 7 + 9) / 5, rwa.getCurrentAverage(), 0.01d);

    sleep(1200 * RollingWindowAverage.MILLIS);

    assertEquals("Average incorrect.", 0, rwa.getCurrentAverage(), 0.01d);
  }
  @Test
  public void testBucketsNumber() throws InterruptedException {
    final RollingWindowAverageFakeTime rwa =
        new RollingWindowAverageFakeTime(
            1 * RollingWindowAverage.SECOND, 100 * RollingWindowAverage.MILLIS);

    rwa.add(now, 2);
    rwa.add(now, 3);
    rwa.add(now, 5);

    assertEquals(1, rwa.buckets.size());

    sleep(120 * RollingWindowAverage.MILLIS);

    rwa.add(now, 7);

    assertEquals(2, rwa.buckets.size());

    sleep(3000 * RollingWindowAverage.MILLIS);

    rwa.getCurrentAverage();
    assertEquals(0, rwa.buckets.size());
  }