private void assertCycleRollTimes(final long epochOffset, final TimeProvider timeProvider) {
final long currentTime = System.currentTimeMillis();
final long currentTimeAtStartOfCycle = currentTime - (currentTime % cycle.length());
clock.set(currentTimeAtStartOfCycle);
final int startCycle = cycle.current(timeProvider, epochOffset);
clock.addAndGet(cycle.length());
assertThat(cycle.current(timeProvider, epochOffset), is(startCycle + 1));
assertThat(cycle.current(plusOneMillisecond(timeProvider), epochOffset), is(startCycle + 1));
assertThat(cycle.current(minusOneMillisecond(timeProvider), epochOffset), is(startCycle));
clock.addAndGet(cycle.length());
assertThat(cycle.current(timeProvider, epochOffset), is(startCycle + 2));
assertThat(cycle.current(plusOneMillisecond(timeProvider), epochOffset), is(startCycle + 2));
assertThat(cycle.current(minusOneMillisecond(timeProvider), epochOffset), is(startCycle + 1));
}
}