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