From ac914c719d401c44cb2633127952b022bf563ff3 Mon Sep 17 00:00:00 2001 From: René den Hertog Date: Thu, 26 Oct 2017 17:34:51 +0200 Subject: 'Bounded Retransmission Protocol' Blob --- .../Source/basiclearner/UserEQOracle.java | 56 ++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 assignments/assignment2/Bounded Retransmission Protocol Tester/Source/basiclearner/UserEQOracle.java (limited to 'assignments/assignment2/Bounded Retransmission Protocol Tester/Source/basiclearner/UserEQOracle.java') 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, String, Word> { + private final SUL sul; + + public UserEQOracle(SUL sul) { + this.sul = sul; + } + + @Override + public DefaultQuery> findCounterExample(MealyMachine hypothesis, Collection 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 input = Word.fromArray(sutInputs, 0, sutInputs.length); + Word hypOutput = hypothesis.computeOutput(input); + Word sulOutput = sulOutput(input); + System.out.println("SUL output: " + sulOutput); + if (!hypOutput.equals(sulOutput)) { + System.out.println(); + return new DefaultQuery>(Word.fromList(Collections.emptyList()), input, sulOutput); + } else { + System.out.println("Query '" + userInput + "' not a counterexample"); + } + } + } + } while (true); + } + + private Word sulOutput(Word inputs) { + sul.pre(); + List output = new ArrayList<>(); + for (String input: inputs) { + output.add(sul.step(input)); + } + sul.post(); + return Word.fromList(output); + } +} -- cgit v1.2.3