package com.github.liblevenshtein.transducer;
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 MergeFunctionTest {
private final StateFactory stateFactory = new StateFactory();
private final PositionFactory positionFactory = new PositionFactory();
@Test
public void testStandardPositions() {
final MergeFunction merge = new MergeFunction.ForStandardPositions();
final State s1 = stateFactory.build(
positionFactory.build(2, 3),
positionFactory.build(1, 2));
final State s2 = stateFactory.build(
positionFactory.build(3, 3),
positionFactory.build(2, 3),
positionFactory.build(3, 2),
positionFactory.build(2, 2),
positionFactory.build(0, 2));
final State s3 = stateFactory.build(
positionFactory.build(3, 3),
positionFactory.build(2, 3),
positionFactory.build(3, 2),
positionFactory.build(2, 2),
positionFactory.build(1, 2),
positionFactory.build(0, 2));
merge.into(s1, s2);
assertThat(s1).isEqualTo(s3);
}
@Test
public void testXPositions() {
final MergeFunction merge = new MergeFunction.ForSpecialPositions();
final State s1 = stateFactory.build(
positionFactory.build(2, 3, true),
positionFactory.build(2, 3, false),
positionFactory.build(1, 2, false));
final State s2 = stateFactory.build(
positionFactory.build(2, 4, false),
positionFactory.build(2, 3, false),
positionFactory.build(2, 2, true),
positionFactory.build(3, 0, false));
final State s3 = stateFactory.build(
positionFactory.build(2, 4, false),
positionFactory.build(2, 3, true),
positionFactory.build(2, 3, false),
positionFactory.build(2, 2, true),
positionFactory.build(1, 2, false),
positionFactory.build(3, 0, false));
merge.into(s1, s2);
assertThat(s1).isEqualTo(s3);
}
}