summaryrefslogtreecommitdiff
path: root/assignments/assignment2/Bounded Retransmission Protocol Tester/Source/basiclearner/NonDeterminismCheckingSUL.java
diff options
context:
space:
mode:
authorRené den Hertog2017-10-26 17:34:51 +0200
committerRené den Hertog2017-10-26 17:34:51 +0200
commitac914c719d401c44cb2633127952b022bf563ff3 (patch)
treef7d2399b2ab6cddb86aa996096581a397ff407b9 /assignments/assignment2/Bounded Retransmission Protocol Tester/Source/basiclearner/NonDeterminismCheckingSUL.java
parentFinish assignment 2, part 1 (diff)
'Bounded Retransmission Protocol' Blob
Diffstat (limited to 'assignments/assignment2/Bounded Retransmission Protocol Tester/Source/basiclearner/NonDeterminismCheckingSUL.java')
-rw-r--r--assignments/assignment2/Bounded Retransmission Protocol Tester/Source/basiclearner/NonDeterminismCheckingSUL.java48
1 files changed, 48 insertions, 0 deletions
diff --git a/assignments/assignment2/Bounded Retransmission Protocol Tester/Source/basiclearner/NonDeterminismCheckingSUL.java b/assignments/assignment2/Bounded Retransmission Protocol Tester/Source/basiclearner/NonDeterminismCheckingSUL.java
new file mode 100644
index 0000000..d4ea603
--- /dev/null
+++ b/assignments/assignment2/Bounded Retransmission Protocol Tester/Source/basiclearner/NonDeterminismCheckingSUL.java
@@ -0,0 +1,48 @@
+package basiclearner;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import de.learnlib.api.SUL;
+import de.learnlib.api.SULException;
+
+/**
+ * SUL-wrapper to check for non-determinism, by use of an observation tree.
+ *
+ * @author Ramon Janssen
+ *
+ * @param <I>
+ * @param <O>
+ */
+public class NonDeterminismCheckingSUL<I,O> implements SUL<I,O> {
+ private final SUL<I,O> sul;
+ private final ObservationTree<I,O> root = new ObservationTree<I,O>();
+ private final List<I> inputs = new ArrayList<>();
+ private final List<O> outputs = new ArrayList<>();
+
+ public NonDeterminismCheckingSUL(SUL<I,O> sul) {
+ this.sul = sul;
+ }
+
+ @Override
+ public void post() {
+ sul.post();
+ // check for non-determinism: crashes if outputs are inconsistent with previous ones
+ root.addObservation(inputs, outputs);
+ inputs.clear();
+ outputs.clear();
+ }
+
+ @Override
+ public void pre() {
+ sul.pre();
+ }
+
+ @Override
+ public O step(I input) throws SULException {
+ O result = sul.step(input);
+ inputs.add(input);
+ outputs.add(result);
+ return result;
+ }
+}