package com.github.liblevenshtein.assertion;
import org.assertj.core.api.AbstractAssert;
import com.github.liblevenshtein.transducer.DistanceFunction;
import com.github.liblevenshtein.transducer.State;
/**
* AssertJ-style assertions for {@link DistanceFunction}s.
*/
public class DistanceFunctionAssertions
extends AbstractAssert<DistanceFunctionAssertions, DistanceFunction> {
/**
* Constructs a new {@link DistanceFunctionAssertions} to assert-against.
* @param actual {@link DistanceFunctionAssertions} to assert-against.
*/
public DistanceFunctionAssertions(final DistanceFunction actual) {
super(actual, DistanceFunctionAssertions.class);
}
/**
* Builds a new {@link DistanceFunctionAssertions} to assert-against.
* @param actual {@link DistanceFunctionAssertions} to assert-against.
* @return A new {@link DistanceFunctionAssertions} to assert-against.
*/
public static DistanceFunctionAssertions assertThat(final DistanceFunction actual) {
return new DistanceFunctionAssertions(actual);
}
/**
* Asserts that the distance function determines the expected distance among
* the positions of some state.
* @param state Set of positions from which to extract the distance.
* @param w Length of the query term.
* @param expectedDistance Distance that is expected to be extracted from the
* state.
* @return This {@link DistanceFunctionAssertions} for fluency.
* @throws AssertionError When the actual distance is not expected.
*/
public DistanceFunctionAssertions hasDistance(
final State state,
final int w,
final int expectedDistance) {
isNotNull();
final int actualDistance = actual.at(state, w);
if (actualDistance != expectedDistance) {
failWithMessage(
"Expected d(%s, %d) = [%d], but was [%d]",
state, w, expectedDistance, actualDistance);
}
return this;
}
}