/** the minimal and non-minimal are compared to ensure they are the same. */ public void testBasic() { int num = atLeast(200); for (int i = 0; i < num; i++) { Automaton a = AutomatonTestUtil.randomAutomaton(random()); Automaton la = Operations.determinize(Operations.removeDeadStates(a)); Automaton lb = MinimizationOperations.minimize(a); assertTrue(Operations.sameLanguage(la, lb)); } }
/** * compare minimized against minimized with a slower, simple impl. we check not only that they are * the same, but that #states/#transitions are the same. */ public void testAgainstBrzozowski() { int num = atLeast(200); for (int i = 0; i < num; i++) { Automaton a = AutomatonTestUtil.randomAutomaton(random()); a = AutomatonTestUtil.minimizeSimple(a); Automaton b = MinimizationOperations.minimize(a); assertTrue(Operations.sameLanguage(a, b)); assertEquals(a.getNumStates(), b.getNumStates()); int numStates = a.getNumStates(); int sum1 = 0; for (int s = 0; s < numStates; s++) { sum1 += a.getNumTransitions(s); } int sum2 = 0; for (int s = 0; s < numStates; s++) { sum2 += b.getNumTransitions(s); } assertEquals(sum1, sum2); } }