Exit Full View

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

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

}