package uk.co.nickthecoder.feather.runtime;
import org.junit.Test;
import java.util.Iterator;
import static junit.framework.TestCase.*;
public class TestLongProgression {
@Test
public void forwards() {
LongProgression progression = new LongProgression(2L, 4L);
assertFalse(progression.isEmpty());
Iterator<Long> iterator = progression.iterator();
assertTrue(iterator.hasNext());
assertEquals(2L, iterator.next().longValue());
assertTrue(iterator.hasNext());
assertEquals(3L, iterator.next().longValue());
assertTrue(iterator.hasNext());
assertEquals(4L, iterator.next().longValue());
assertFalse(iterator.hasNext());
}
@Test
public void forwardsStep2() {
LongProgression progression = new LongProgression(2L, 4L, 2L);
assertFalse(progression.isEmpty());
Iterator<Long> iterator = progression.iterator();
assertTrue(iterator.hasNext());
assertEquals(2L, iterator.next().longValue());
assertTrue(iterator.hasNext());
assertEquals(4L, iterator.next().longValue());
assertFalse(iterator.hasNext());
}
@Test
public void backwards() {
LongProgression progression = new LongProgression(4L, 2L, -1L);
assertFalse(progression.isEmpty());
Iterator<Long> iterator = progression.iterator();
assertTrue(iterator.hasNext());
assertEquals(4L, iterator.next().longValue());
assertTrue(iterator.hasNext());
assertEquals(3L, iterator.next().longValue());
assertTrue(iterator.hasNext());
assertEquals(2L, iterator.next().longValue());
assertFalse(iterator.hasNext());
}
@Test
public void backwardsStep2() {
LongProgression progression = new LongProgression(4L, 2L, -2L);
assertFalse(progression.isEmpty());
Iterator<Long> iterator = progression.iterator();
assertTrue(iterator.hasNext());
assertEquals(4L, iterator.next().longValue());
assertTrue(iterator.hasNext());
assertEquals(2L, iterator.next().longValue());
assertFalse(iterator.hasNext());
}
@Test
public void oneElement() {
LongProgression progression = new LongProgression(2L, 2L);
assertFalse(progression.isEmpty());
Iterator<Long> iterator = progression.iterator();
assertTrue(iterator.hasNext());
assertEquals(2L, iterator.next().longValue());
assertFalse(iterator.hasNext());
}
@Test
public void oneElementBackwards() {
LongProgression progression = new LongProgression(2L, 2L, -1L);
assertFalse(progression.isEmpty());
Iterator<Long> iterator = progression.iterator();
assertTrue(iterator.hasNext());
assertEquals(2L, iterator.next().longValue());
assertFalse(iterator.hasNext());
}
private void isEmpty(LongProgression progression) {
assertTrue(progression.isEmpty());
assertFalse(progression.iterator().hasNext());
}
@Test
public void empty() {
isEmpty(new LongProgression(2L, 1L));
isEmpty(new LongProgression(2L, 4L, -1L));
}
}