diff options
author | René den Hertog | 2017-10-26 17:34:51 +0200 |
---|---|---|
committer | René den Hertog | 2017-10-26 17:34:51 +0200 |
commit | ac914c719d401c44cb2633127952b022bf563ff3 (patch) | |
tree | f7d2399b2ab6cddb86aa996096581a397ff407b9 /assignments/assignment2/Bounded Retransmission Protocol Tester/Source/basiclearner/UserEQOracle.java | |
parent | Finish assignment 2, part 1 (diff) |
'Bounded Retransmission Protocol' Blob
Diffstat (limited to 'assignments/assignment2/Bounded Retransmission Protocol Tester/Source/basiclearner/UserEQOracle.java')
-rw-r--r-- | assignments/assignment2/Bounded Retransmission Protocol Tester/Source/basiclearner/UserEQOracle.java | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/assignments/assignment2/Bounded Retransmission Protocol Tester/Source/basiclearner/UserEQOracle.java b/assignments/assignment2/Bounded Retransmission Protocol Tester/Source/basiclearner/UserEQOracle.java new file mode 100644 index 0000000..a6c4be2 --- /dev/null +++ b/assignments/assignment2/Bounded Retransmission Protocol Tester/Source/basiclearner/UserEQOracle.java @@ -0,0 +1,56 @@ +package basiclearner; + +import de.learnlib.api.EquivalenceOracle; +import de.learnlib.api.SUL; +import de.learnlib.oracles.DefaultQuery; +import net.automatalib.automata.transout.MealyMachine; +import net.automatalib.words.Word; + +import java.util.*; + +/** + * Created by ramon on 12-12-16. + */ +public class UserEQOracle implements EquivalenceOracle<MealyMachine<?, String, ?, String>, String, Word<String>> { + private final SUL<String,String> sul; + + public UserEQOracle(SUL<String,String> sul) { + this.sul = sul; + } + + @Override + public DefaultQuery<String, Word<String>> findCounterExample(MealyMachine<?, String, ?, String> hypothesis, Collection<? extends String> allowedInputs) { + System.out.println("Enter space-separated input sequence to try as a counter-example, or 'stop' to stop learning"); + Scanner userInputScanner = new Scanner(System.in); + do { + String userInput = userInputScanner.nextLine(); + if (userInput.equals("stop")) { + return null; + } else { + String[] sutInputs = userInput.split("\\s"); + if (sutInputs.length != 0) { + Word<String> input = Word.fromArray(sutInputs, 0, sutInputs.length); + Word<String> hypOutput = hypothesis.computeOutput(input); + Word<String> sulOutput = sulOutput(input); + System.out.println("SUL output: " + sulOutput); + if (!hypOutput.equals(sulOutput)) { + System.out.println(); + return new DefaultQuery<String, Word<String>>(Word.fromList(Collections.emptyList()), input, sulOutput); + } else { + System.out.println("Query '" + userInput + "' not a counterexample"); + } + } + } + } while (true); + } + + private Word<String> sulOutput(Word<String> inputs) { + sul.pre(); + List<String> output = new ArrayList<>(); + for (String input: inputs) { + output.add(sul.step(input)); + } + sul.post(); + return Word.fromList(output); + } +} |