summaryrefslogtreecommitdiff
path: root/assignments/assignment2/Bounded Retransmission Protocol Tester/Source/basiclearner/NonDeterminismCheckingSUL.java
blob: d4ea6033f2b6a2f322a1bc7d935e1d4298246da8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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;
	}
}