Exit Full View

Feather2 / feather2-runtime / src / test / java / uk / co / nickthecoder / feather / runtime / TestCharProgression.java

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));
    }

}