working setup for a4
[tt2015.git] / a4 / tcp / tester / learner / NonDeterminismCheckingSUL.java
1 package learner;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import de.learnlib.api.SUL;
7 import de.learnlib.api.SULException;
8
9 /**
10 * SUL-wrapper to check for non-determinism, by use of an observation tree.
11 *
12 * @author Ramon Janssen
13 *
14 * @param <I>
15 * @param <O>
16 */
17 public class NonDeterminismCheckingSUL<I,O> implements SUL<I,O> {
18 private final SUL<I,O> sul;
19 private final ObservationTree<I,O> root = new ObservationTree<I,O>();
20 private final List<I> inputs = new ArrayList<>();
21 private final List<O> outputs = new ArrayList<>();
22
23 public NonDeterminismCheckingSUL(SUL<I,O> sul) {
24 this.sul = sul;
25 }
26
27 @Override
28 public void post() {
29 sul.post();
30 // check for non-determinism: crashes if outputs are inconsistent with previous ones
31 root.addObservation(inputs, outputs);
32 inputs.clear();
33 outputs.clear();
34 }
35
36 @Override
37 public void pre() {
38 sul.pre();
39 }
40
41 @Override
42 public O step(I input) throws SULException {
43 O result = sul.step(input);
44 inputs.add(input);
45 outputs.add(result);
46 return result;
47 }
48 }