package com.github.liblevenshtein.transducer; import org.testng.annotations.BeforeTest; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import static org.assertj.core.api.Assertions.assertThat; import com.github.liblevenshtein.transducer.factory.PositionFactory; import com.github.liblevenshtein.transducer.factory.StateFactory; public class UnsubsumeFunctionTest { private static final int QUERY_LENGTH = 20; private final StateFactory stateFactory = new StateFactory(); private final PositionFactory positionFactory = new PositionFactory(); private final UnsubsumeFunction standardPositionUnsubsume = new UnsubsumeFunction.ForStandardPositions(); private final UnsubsumeFunction specialPositionUnsubsume = new UnsubsumeFunction.ForSpecialPositions(); private final SubsumesFunction standardPositionSubsumes = new SubsumesFunction.ForStandardAlgorithm(); private final SubsumesFunction transpositionPositionSubsumes = new SubsumesFunction.ForTransposition(); @BeforeTest public void setUp() { standardPositionUnsubsume.subsumes(standardPositionSubsumes); specialPositionUnsubsume.subsumes(transpositionPositionSubsumes); } @DataProvider(name = "forStandardPositions") public Object[][] forStandardPositions() { return new Object[][] { {4, 2, 1, 4, false}, {4, 2, 1, 5, true}, {4, 2, 2, 0, false}, {4, 2, 2, 5, true}, }; } @DataProvider(name = "forSpecialPositions") public Object[][] forSpecialPositions() { return new Object[][] { {1, 1, false, 0, 1, false, false}, {1, 1, false, 1, 2, false, true}, {3, 1, false, 0, 2, true, false}, {1, 1, false, 0, 2, true, true}, }; } @Test(dataProvider = "forStandardPositions") public void testForStandardPositions( final int i, final int e, final int j, final int f, final boolean shouldSubsume) { final State actualOutput = stateFactory.build( positionFactory.build(i, e), positionFactory.build(j, f)); final State expectedOutput = shouldSubsume ? stateFactory.build( positionFactory.build(i, e)) : stateFactory.build( positionFactory.build(i, e), positionFactory.build(j, f)); standardPositionUnsubsume.at(actualOutput, QUERY_LENGTH); assertThat(actualOutput).isEqualTo(expectedOutput); } @Test(dataProvider = "forSpecialPositions") public void testForXPositions( final int i, final int e, final boolean s, final int j, final int f, final boolean t, final boolean shouldSubsume) { final State actualOutput = stateFactory.build( positionFactory.build(i, e, s), positionFactory.build(j, f, t)); final State expectedOutput = shouldSubsume ? stateFactory.build( positionFactory.build(i, e, s)) : stateFactory.build( positionFactory.build(i, e, s), positionFactory.build(j, f, t)); specialPositionUnsubsume.at(actualOutput, QUERY_LENGTH); assertThat(actualOutput).isEqualTo(expectedOutput); } }