package com.github.liblevenshtein.transducer;
import org.testng.annotations.Test;
import static com.github.liblevenshtein.assertion.StateAssertions.assertThat;
public class StateIteratorTest {
@Test
public void emptyStateIteratorShouldNotHaveNextElement() {
final State state = new State();
assertThat(state).iterator()
.doesNotHaveNext()
.copy()
.doesNotHaveNext();
}
@Test
public void testInsertOnEmptyStateIterator() {
final State state = new State();
final Position position = new Position(0, 0);
assertThat(state).iterator()
.doesNotHaveNext()
.insert(position)
.hasNext()
.peeks(position)
.hasNext(position)
.doesNotHaveNext();
assertThat(state).iterator()
.hasNext()
.peeks(position)
.hasNext(position)
.doesNotHaveNext();
assertThat(state).iterator()
.copy()
.hasNext()
.peeks(position)
.hasNext(position)
.doesNotHaveNext();
}
@Test
public void testInsert() {
final Position p00 = new Position(0, 0);
final Position p10 = new Position(1, 0);
final Position p20 = new Position(2, 0);
final State state = new State();
assertThat(state)
.add(p20, p00)
.iterator()
.hasNext(p20)
.hasNext(p00)
.insert(p10)
.hasNext(p10)
.doesNotHaveNext();
assertThat(state).iterator()
.hasNext(p20)
.hasNext(p00)
.hasNext(p10)
.doesNotHaveNext();
}
@Test
public void testOperations() {
final Position p00 = new Position(0, 0);
final Position p002 = new Position(0, 0);
final Position p10 = new Position(1, 0);
final Position p01 = new Position(0, 1);
final State state = new State();
assertThat(state).iterator()
.doesNotHaveNext()
.insert(p00)
.hasNext()
.peeks(p00)
.hasNext(p00)
.doesNotHaveNext()
.insert(p10)
.hasNext()
.peeks(p10)
.hasNext(p10)
.doesNotHaveNext();
assertThat(state).iterator()
.hasNext(p00)
.hasNext(p10)
.doesNotHaveNext();
assertThat(state).iterator()
.hasNext(p00)
.hasNext(p10)
.insert(p01)
.hasNext(p01)
.doesNotHaveNext();
assertThat(state).iterator()
.hasNext(p00)
.hasNext(p10)
.hasNext(p01)
.doesNotHaveNext();
assertThat(state).iterator()
.hasNext(p00)
.hasNext(p10)
.remove()
.hasNext(p01)
.doesNotHaveNext();
assertThat(state).iterator()
.hasNext(p00)
.hasNext(p01)
.doesNotHaveNext();
assertThat(state).iterator()
.insert(p002)
.hasNext(p002)
.hasNext(p00)
.hasNext(p01)
.doesNotHaveNext();
}
}