LearnLib/learnlib

RandomWordsEQOracle fails with empty automaton

windmueller opened this issue · 2 comments

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.

I would expect a more descriptive exception like AutomatonNotInitializedException or at least an IllegalStateException.