package com.github.liblevenshtein.transducer; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import com.github.liblevenshtein.transducer.factory.PositionFactory; import com.github.liblevenshtein.transducer.factory.StateFactory; import static com.github.liblevenshtein.assertion.StandardPositionTransitionFunctionAssertions.assertThat; public class StandardPositionTransitionFunctionTest { private static final int N = 2; // max number of errors private static final int W = 4; // length of characteristic vector private final StateFactory stateFactory = new StateFactory(); private final PositionFactory positionFactory = new PositionFactory(); private final StandardPositionTransitionFunction transition = new StandardPositionTransitionFunction(); private int i; private int e; @BeforeTest public void setUp() { transition.stateFactory(stateFactory); transition.positionFactory(positionFactory); } @Test public void testOf() { i = 0; e = 0; check(1 + i, e, true, false, true, false); check(i, 1 + e, 1 + i, 1 + e, 1 + 1 + i, 1 + e, false, true, false, true); check(i, 1 + e, 1 + i, 1 + e, false, false, false, false); i = W - 1; check(1 + i, e, true, true, true, true); check(i, 1 + e, 1 + i, 1 + e, false, false, false, false); i = W; check(W, 1 + e, true, true, true, true); i = 2; e = N; check(1 + i, N, true, true, true, true); check(false, false, false, false); i = W; check(true, true, true, true); } private void check(final boolean... characteristicVector) { assertThat(transition) .transitionsTo(null, N, positionFactory.build(i, e), characteristicVector, 0); } private void check( final int i1, final int e1, final boolean... characteristicVector) { final Position position = positionFactory.build(i1, e1); final State expectedState = stateFactory.build(position); assertThat(transition) .transitionsTo(expectedState, N, positionFactory.build(i, e), characteristicVector, 0); } private void check( final int i1, final int e1, final int i2, final int e2, final boolean... characteristicVector) { final Position p1 = positionFactory.build(i1, e1); final Position p2 = positionFactory.build(i2, e2); final State expectedState = stateFactory.build(p1, p2); assertThat(transition) .transitionsTo(expectedState, N, positionFactory.build(i, e), characteristicVector, 0); } private void check( final int i1, final int e1, final int i2, final int e2, final int i3, final int e3, final boolean... characteristicVector) { final Position p1 = positionFactory.build(i1, e1); final Position p2 = positionFactory.build(i2, e2); final Position p3 = positionFactory.build(i3, e3); final State expectedState = stateFactory.build(p1, p2, p3); assertThat(transition) .transitionsTo(expectedState, N, positionFactory.build(i, e), characteristicVector, 0); } }