package com.miguelfonseca.completely.text.match;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@SuppressWarnings("checkstyle:multiplestringliterals")
public class EqualityAutomatonTest extends AbstractAutomatonTest<EqualityAutomaton>
{
@Test
public void testCreateNullPattern()
{
exceptionRule.expect(NullPointerException.class);
new EqualityAutomaton(null);
}
@Test
public void testCreateEmptyPattern()
{
automaton = new EqualityAutomaton("");
assertTrue(automaton.isWordAccepted());
assertFalse(automaton.isWordRejected());
}
@Test
public void testGetScoreEmptyPattern()
{
automaton = new EqualityAutomaton("");
assertEquals(1, automaton.getScore(), 0D);
automaton = automaton.step('a');
assertEquals(0, automaton.getScore(), 0D);
}
@Test
public void testGetScore()
{
automaton = new EqualityAutomaton("abcd");
assertEquals(0, automaton.getScore(), 0);
automaton = automaton.step('a');
assertEquals(0.25, automaton.getScore(), 0D);
automaton = automaton.step('b');
assertEquals(0.5, automaton.getScore(), 0D);
automaton = automaton.step('c');
assertEquals(0.75, automaton.getScore(), 0D);
automaton = automaton.step('d');
assertEquals(1, automaton.getScore(), 0D);
automaton = automaton.step('e');
assertEquals(0.8, automaton.getScore(), 0D);
}
@Test
public void testMatchMultiCharacterStep()
{
automaton = new EqualityAutomaton("abcd");
assertFalse(automaton.isWordAccepted());
assertFalse(automaton.isWordRejected());
automaton = automaton.step("ab");
assertFalse(automaton.isWordAccepted());
assertFalse(automaton.isWordRejected());
automaton = automaton.stepUntilWordAccepted("cde");
assertTrue(automaton.isWordAccepted());
assertFalse(automaton.isWordRejected());
}
@Test
public void testMatchSingleCharacterStep()
{
automaton = new EqualityAutomaton("a");
assertFalse(automaton.isWordAccepted());
assertFalse(automaton.isWordRejected());
automaton = automaton.step('a');
assertTrue(automaton.isWordAccepted());
assertFalse(automaton.isWordRejected());
automaton = automaton.step('b');
assertFalse(automaton.isWordAccepted());
assertTrue(automaton.isWordRejected());
}
}