package uk.co.nickthecoder.feather.runtime;
import org.junit.Test;
import java.util.Iterator;
import static junit.framework.TestCase.*;
public class TestCharProgression {
@Test
public void forwards() {
CharProgression progression = new CharProgression('b', 'd');
assertFalse(progression.isEmpty());
Iterator<Character> iterator = progression.iterator();
assertTrue(iterator.hasNext());
assertEquals('b', iterator.next().charValue());
assertTrue(iterator.hasNext());
assertEquals('c', iterator.next().charValue());
assertTrue(iterator.hasNext());
assertEquals('d', iterator.next().charValue());
assertFalse(iterator.hasNext());
}
@Test
public void forwardsStep2() {
CharProgression progression = new CharProgression('b', 'd', 2);
assertFalse(progression.isEmpty());
Iterator<Character> iterator = progression.iterator();
assertTrue(iterator.hasNext());
assertEquals('b', iterator.next().charValue());
assertTrue(iterator.hasNext());
assertEquals('d', iterator.next().charValue());
assertFalse(iterator.hasNext());
}
@Test
public void backwards() {
CharProgression progression = new CharProgression('d', 'b', -1);
assertFalse(progression.isEmpty());
Iterator<Character> iterator = progression.iterator();
assertTrue(iterator.hasNext());
assertEquals('d', iterator.next().charValue());
assertTrue(iterator.hasNext());
assertEquals('c', iterator.next().charValue());
assertTrue(iterator.hasNext());
assertEquals('b', iterator.next().charValue());
assertFalse(iterator.hasNext());
}
@Test
public void backwardsStep2() {
CharProgression progression = new CharProgression('d', 'b', -2);
assertFalse(progression.isEmpty());
Iterator<Character> iterator = progression.iterator();
assertTrue(iterator.hasNext());
assertEquals('d', iterator.next().charValue());
assertTrue(iterator.hasNext());
assertEquals('b', iterator.next().charValue());
assertFalse(iterator.hasNext());
}
@Test
public void oneElement() {
CharProgression progression = new CharProgression('b', 'b');
assertFalse(progression.isEmpty());
Iterator<Character> iterator = progression.iterator();
assertTrue(iterator.hasNext());
assertEquals('b', iterator.next().charValue());
assertFalse(iterator.hasNext());
}
@Test
public void oneElementBackwards() {
CharProgression progression = new CharProgression('b', 'b', -1);
assertFalse(progression.isEmpty());
Iterator<Character> iterator = progression.iterator();
assertTrue(iterator.hasNext());
assertEquals('b', iterator.next().charValue());
assertFalse(iterator.hasNext());
}
private void isEmpty(CharProgression progression) {
assertTrue(progression.isEmpty());
assertFalse(progression.iterator().hasNext());
}
@Test
public void empty() {
isEmpty(new CharProgression('b', 'a'));
isEmpty(new CharProgression('b', 'd', -1));
}
}