RandomWordsEQOracle fails with empty automaton
windmueller opened this issue · 2 comments
windmueller commented
When a RandomWordsEQOracle
is queried with an empty hypothesis automaton, an exception is thrown:
java.lang.ArrayIndexOutOfBoundsException: -2
at net.automatalib.automata.base.compact.AbstractCompactDeterministic.getTransition(AbstractCompactDeterministic.java:161)
at net.automatalib.automata.base.compact.AbstractCompactDeterministic.getTransition(AbstractCompactDeterministic.java:170)
at net.automatalib.automata.base.compact.AbstractCompactDeterministic.getTransition(AbstractCompactDeterministic.java:32)
at net.automatalib.ts.abstractimpl.AbstractDeterministicTransOutTS.trace(AbstractDeterministicTransOutTS.java:30)
at net.automatalib.automata.transout.impl.compact.CompactMealy.trace(CompactMealy.java:99)
at net.automatalib.automata.transout.impl.compact.CompactMealy.trace(CompactMealy.java:33)
at net.automatalib.ts.abstractimpl.AbstractDeterministicTransOutTS.trace(AbstractDeterministicTransOutTS.java:22)
at net.automatalib.automata.transout.impl.compact.CompactMealy.trace(CompactMealy.java:90)
at net.automatalib.automata.transout.abstractimpl.AbstractTransOutAutomaton.computeOutput(AbstractTransOutAutomaton.java:37)
at net.automatalib.automata.transout.impl.compact.CompactMealy.computeOutput(CompactMealy.java:117)
at net.automatalib.automata.transout.impl.compact.CompactMealy.computeOutput(CompactMealy.java:33)
at de.learnlib.eqtests.basic.RandomWordsEQOracle.findCounterExample(RandomWordsEQOracle.java:105)
at de.learnlib.eqtests.basic.RandomWordsEQOracle$MealyRandomWordsEQOracle.findCounterExample(RandomWordsEQOracle.java:49)
at de.learnlib.eqtests.basic.RandomWordsEQOracleTest.testEmptyAutomaton(RandomWordsEQOracleTest.java:32)
This can be tested on the branch "eqTestEmptyAutomaton" in RandomWordsEQOracleTest
mtf90 commented
What behavior would you expect? Any interaction with an unitialized automaton (i.e. with no defined initial state) is ill-defined.
Imo, the only improvement could be, to not let this error sink through to the automaton level, but to but check for the undefinedness and throw an IllegalArgumentException
.
windmueller commented
I would expect a more descriptive exception like AutomatonNotInitializedException
or at least an IllegalStateException
.