package rationals; import java.util.Arrays; import java.util.Collections; import junit.framework.TestCase; public class AutomatonBuilderTest extends TestCase { public void testStateLabellingYieldUniqueStates() { Automaton a = new Automaton(); State s = a.state("init"); State s2 = a.state("init"); assertSame("should be same object", s, s2); assertEquals("objects should be equals", s, s2); } public void testUpdateStateAfterCreationAndAddTransition() { Automaton<TransitionBuilder> a = new Automaton<TransitionBuilder>(); a.setBuilder(new TransitionBuilder()); a.state("init").setInitial(true); a.from("init").on("a").go("next"); a.state("next").setTerminal(true); System.err.println(a); assertTrue("automaton should accept word 'a'", a.accept(Collections .<Object>singletonList("a"))); } public void testAddSeveralTransitions() { Automaton<TransitionBuilder> a = new Automaton<TransitionBuilder>(); a.setBuilder(new TransitionBuilder()); a.from("init").on("a").go("next"); a.from("next").on("b").go("other"); a.from("other").on("c").go("next"); a.state("next").setTerminal(true); a.state("init").setInitial(true); assertTrue("automaton should accept word 'abcbc'", a.accept(Arrays .<Object>asList(new Object[] { "a", "b", "c", "b", "c" }))); assertTrue("automaton should not accept word 'ab'", !a.accept(Arrays .<Object>asList(new Object[] { "a", "b" }))); } public void testAddSeveralTransitionsFromSameStateAndLoops() { Automaton<TransitionBuilder> a = new Automaton<TransitionBuilder>(); a.setBuilder(new TransitionBuilder()); a.from("init").on("a").go("next").on("b").go("other"); a.from("next").on("c").loop().on("b").go("other"); a.state("init").setInitial(true); a.state("other").setTerminal(true); assertTrue("automaton should accept word 'accb'", a.accept(Arrays .<Object>asList(new Object[] { "a", "c", "c", "b" }))); assertTrue("automaton should not accept word 'a'", !a.accept(Arrays .<Object>asList(new Object[] { "a"}))); } public void testRestartBuilderFromOtherState() { Automaton<TransitionBuilder> a = new Automaton<TransitionBuilder>(); a.setBuilder(new TransitionBuilder()); a.from("init").on("a").go("next").on("b").go("other") .from("next").on("c").loop().on("b").go("other"); a.state("init").setInitial(true); a.state("other").setTerminal(true); assertTrue("automaton should accept word 'accb'", a.accept(Arrays .<Object>asList(new Object[] { "a", "c", "c", "b" }))); assertTrue("automaton should not accept word 'a'", !a.accept(Arrays .<Object>asList(new Object[] { "a"}))); } }