Exit Full View

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

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

}