// Path: src/main/java/com/github/liblevenshtein/transducer/factory/PositionFactory.java
// @NoArgsConstructor
// public class PositionFactory implements Serializable {
// 
//   private static final long serialVersionUID = 1L;
// 
//   /**
//    * Builds a dummy position.
//    * @return Dummy position.
//    */
//   public Position build() {
//     return new Position(-1, -1);
//   }
// 
//   /**
//    * Builds a position vector for the standard, Levenshtein algorihtm.
//    * @param termIndex Current index of the spelling candidate.
//    * @param numErrors Number of accumulated errors at index {@code termIndex}.
//    * @return New position vector having index {@code termIndex} and error
//    *   {@code numErrors}.
//    */
//   public Position build(final int termIndex, final int numErrors) {
//     return new Position(termIndex, numErrors);
//   }
// 
//   /**
//    * Builds a position vector for the transposition and merge-and-split,
//    * Levenshtein algorihtms.
//    * @param termIndex Current index of the spelling candidate.
//    * @param numErrors Number of accumulated errors at index {@code termIndex}.
//    * @param isSpecial Either {@code 1} or {@code 0}, depending on whether the
//    *   position is a special case (numErrors.g. a transposition position).
//    * @return New position vector having index {@code termIndex}, error
//    *   {@code numErrors}, and special marker {@code isSpecial}.
//    */
//   public Position build(final int termIndex, final int numErrors, final boolean isSpecial) {
//     if (isSpecial) {
//       return new SpecialPosition(termIndex, numErrors);
//     }
// 
//     return new Position(termIndex, numErrors);
//   }
// }
// 
// Path: src/main/java/com/github/liblevenshtein/transducer/factory/StateFactory.java
// public class StateFactory implements Serializable {
// 
//   private static final long serialVersionUID = 1L;
// 
//   /**
//    * Builds a new, Levenshtein state with the given position vectors.
//    * @param positions Array of position vectors to link into the state.
//    * @return New state having the position vectors.
//    */
//   public State build(final Position... positions) {
//     final State state = new State();
// 
//     Position prev = null;
//     for (final Position curr : positions) {
//       state.insertAfter(prev, curr);
//       prev = curr;
//     }
// 
//     return state;
//   }
// }


import static org.assertj.core.api.Assertions.assertThat;
import com.github.liblevenshtein.transducer.factory.PositionFactory;
import com.github.liblevenshtein.transducer.factory.StateFactory;
  }

  protected void check(
      final int i1, final int e1, final boolean t1,
      final int i2, final int e2, final boolean t2,
      final boolean[] characteristicVector) {
    final State actualState = transition.of(N, positionFactory.build(i, e, x),
      characteristicVector, 0);
    final Position p1 = positionFactory.build(i1, e1, t1);
    final Position p2 = positionFactory.build(i2, e2, t2);
    final State expectedState = stateFactory.build(p1, p2);
    assertThat(actualState).isEqualTo(expectedState);
  }

  @SuppressWarnings("checkstyle:parameternumber")
  protected void check(
      final int i1, final int e1, final boolean t1,
      final int i2, final int e2, final boolean t2,
      final int i3, final int e3, final boolean t3,
      final boolean[] characteristicVector) {
    final State actualState = transition.of(N, positionFactory.build(i, e, x),
      characteristicVector, 0);
    final Position p1 = positionFactory.build(i1, e1, t1);
    final Position p2 = positionFactory.build(i2, e2, t2);
    final Position p3 = positionFactory.build(i3, e3, t3);
    final State expectedState = stateFactory.build(p1, p2, p3);
    assertThat(actualState).isEqualTo(expectedState);
  }

  @SuppressWarnings("checkstyle:parameternumber")
// Path: src/main/java/com/github/liblevenshtein/transducer/factory/PositionFactory.java
// @NoArgsConstructor
// public class PositionFactory implements Serializable {
// 
//   private static final long serialVersionUID = 1L;
// 
//   /**
//    * Builds a dummy position.
//    * @return Dummy position.
//    */
//   public Position build() {
//     return new Position(-1, -1);
//   }
// 
//   /**
//    * Builds a position vector for the standard, Levenshtein algorihtm.
//    * @param termIndex Current index of the spelling candidate.
//    * @param numErrors Number of accumulated errors at index {@code termIndex}.
//    * @return New position vector having index {@code termIndex} and error
//    *   {@code numErrors}.
//    */
//   public Position build(final int termIndex, final int numErrors) {
//     return new Position(termIndex, numErrors);
//   }
// 
//   /**
//    * Builds a position vector for the transposition and merge-and-split,
//    * Levenshtein algorihtms.
//    * @param termIndex Current index of the spelling candidate.
//    * @param numErrors Number of accumulated errors at index {@code termIndex}.
//    * @param isSpecial Either {@code 1} or {@code 0}, depending on whether the
//    *   position is a special case (numErrors.g. a transposition position).
//    * @return New position vector having index {@code termIndex}, error
//    *   {@code numErrors}, and special marker {@code isSpecial}.
//    */
//   public Position build(final int termIndex, final int numErrors, final boolean isSpecial) {
//     if (isSpecial) {
//       return new SpecialPosition(termIndex, numErrors);
//     }
// 
//     return new Position(termIndex, numErrors);
//   }
// }
// 
// Path: src/main/java/com/github/liblevenshtein/transducer/factory/StateFactory.java
// public class StateFactory implements Serializable {
// 
//   private static final long serialVersionUID = 1L;
// 
//   /**
//    * Builds a new, Levenshtein state with the given position vectors.
//    * @param positions Array of position vectors to link into the state.
//    * @return New state having the position vectors.
//    */
//   public State build(final Position... positions) {
//     final State state = new State();
// 
//     Position prev = null;
//     for (final Position curr : positions) {
//       state.insertAfter(prev, curr);
//       prev = curr;
//     }
// 
//     return state;
//   }
// }


// Path: src/test/java/com/github/liblevenshtein/transducer/AbstractPositionTransitionFunctionTest.java
import static org.assertj.core.api.Assertions.assertThat;
import com.github.liblevenshtein.transducer.factory.PositionFactory;
import com.github.liblevenshtein.transducer.factory.StateFactory;

  }

  protected void check(
      final int i1, final int e1, final boolean t1,
      final int i2, final int e2, final boolean t2,
      final boolean[] characteristicVector) {
    final State actualState = transition.of(N, positionFactory.build(i, e, x),
      characteristicVector, 0);
    final Position p1 = positionFactory.build(i1, e1, t1);
    final Position p2 = positionFactory.build(i2, e2, t2);
    final State expectedState = stateFactory.build(p1, p2);
    assertThat(actualState).isEqualTo(expectedState);
  }

  @SuppressWarnings("checkstyle:parameternumber")
  protected void check(
      final int i1, final int e1, final boolean t1,
      final int i2, final int e2, final boolean t2,
      final int i3, final int e3, final boolean t3,
      final boolean[] characteristicVector) {
    final State actualState = transition.of(N, positionFactory.build(i, e, x),
      characteristicVector, 0);
    final Position p1 = positionFactory.build(i1, e1, t1);
    final Position p2 = positionFactory.build(i2, e2, t2);
    final Position p3 = positionFactory.build(i3, e3, t3);
    final State expectedState = stateFactory.build(p1, p2, p3);
    assertThat(actualState).isEqualTo(expectedState);
  }

  @SuppressWarnings("checkstyle:parameternumber")
  protected void check(