aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/language-semantics/src/test
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2022-09-22 22:40:33 +0200
committerLibravatar Kristóf Marussy <kristof@marussy.com>2022-10-03 20:06:52 +0200
commitdb03801ae5eaa67f8c150413f483905184f5bdaa (patch)
treede96e12fc7d7f4006949ecaf0af535e3e5f1f59d /subprojects/language-semantics/src/test
parentchore(deps): bump dependencies (diff)
downloadrefinery-db03801ae5eaa67f8c150413f483905184f5bdaa.tar.gz
refinery-db03801ae5eaa67f8c150413f483905184f5bdaa.tar.zst
refinery-db03801ae5eaa67f8c150413f483905184f5bdaa.zip
feat: data structure for assertion merging
Diffstat (limited to 'subprojects/language-semantics/src/test')
-rw-r--r--subprojects/language-semantics/src/test/java/tools/refinery/language/semantics/model/tests/DecisionTreeTests.java187
1 files changed, 187 insertions, 0 deletions
diff --git a/subprojects/language-semantics/src/test/java/tools/refinery/language/semantics/model/tests/DecisionTreeTests.java b/subprojects/language-semantics/src/test/java/tools/refinery/language/semantics/model/tests/DecisionTreeTests.java
new file mode 100644
index 00000000..8fe866af
--- /dev/null
+++ b/subprojects/language-semantics/src/test/java/tools/refinery/language/semantics/model/tests/DecisionTreeTests.java
@@ -0,0 +1,187 @@
1package tools.refinery.language.semantics.model.tests;
2
3import org.junit.jupiter.api.Test;
4import tools.refinery.language.semantics.model.internal.DecisionTree;
5import tools.refinery.store.model.Tuple;
6import tools.refinery.store.model.representation.TruthValue;
7
8import java.util.LinkedHashMap;
9import java.util.Map;
10
11import static org.hamcrest.MatcherAssert.assertThat;
12import static org.hamcrest.Matchers.*;
13
14class DecisionTreeTests {
15 @Test
16 void initialValueTest() {
17 var sut = new DecisionTree(3, TruthValue.UNKNOWN);
18 assertThat(sut.get(Tuple.of(3, 4, 5)), is(TruthValue.UNKNOWN));
19 }
20
21 @Test
22 void mergeValueTest() {
23 var sut = new DecisionTree(3, TruthValue.FALSE);
24 sut.mergeValue(Tuple.of(3, 4, 5), TruthValue.TRUE);
25 assertThat(sut.get(Tuple.of(3, 4, 5)), is(TruthValue.ERROR));
26 assertThat(sut.get(Tuple.of(3, 4, 6)), is(TruthValue.FALSE));
27 }
28
29 @Test
30 void mergeUnknownValueTest() {
31 var sut = new DecisionTree(3, TruthValue.FALSE);
32 sut.mergeValue(Tuple.of(3, 4, 5), TruthValue.UNKNOWN);
33 assertThat(sut.get(Tuple.of(3, 4, 5)), is(TruthValue.FALSE));
34 }
35
36 @Test
37 void mergeWildcardTest() {
38 var sut = new DecisionTree(3, TruthValue.UNKNOWN);
39 sut.mergeValue(Tuple.of(3, -1, 5), TruthValue.TRUE);
40 sut.mergeValue(Tuple.of(-1, 4, 5), TruthValue.FALSE);
41 assertThat(sut.get(Tuple.of(2, 4, 5)), is(TruthValue.FALSE));
42 assertThat(sut.get(Tuple.of(3, 4, 5)), is(TruthValue.ERROR));
43 assertThat(sut.get(Tuple.of(3, 6, 5)), is(TruthValue.TRUE));
44 assertThat(sut.get(Tuple.of(3, 4, 6)), is(TruthValue.UNKNOWN));
45 }
46
47 @Test
48 void mergeWildcardTest2() {
49 var sut = new DecisionTree(3, TruthValue.UNKNOWN);
50 sut.mergeValue(Tuple.of(-1, 4, -1), TruthValue.FALSE);
51 sut.mergeValue(Tuple.of(3, -1, 5), TruthValue.TRUE);
52 assertThat(sut.get(Tuple.of(2, 4, 5)), is(TruthValue.FALSE));
53 assertThat(sut.get(Tuple.of(3, 4, 5)), is(TruthValue.ERROR));
54 assertThat(sut.get(Tuple.of(3, 6, 5)), is(TruthValue.TRUE));
55 assertThat(sut.get(Tuple.of(3, 4, 6)), is(TruthValue.FALSE));
56 assertThat(sut.get(Tuple.of(3, 5, 6)), is(TruthValue.UNKNOWN));
57 }
58
59 @Test
60 void mergeWildcardTest3() {
61 var sut = new DecisionTree(3, TruthValue.UNKNOWN);
62 sut.mergeValue(Tuple.of(-1, 4, -1), TruthValue.FALSE);
63 sut.mergeValue(Tuple.of(3, -1, 5), TruthValue.TRUE);
64 sut.mergeValue(Tuple.of(-1, -1, -1), TruthValue.ERROR);
65 assertThat(sut.get(Tuple.of(2, 4, 5)), is(TruthValue.ERROR));
66 assertThat(sut.get(Tuple.of(3, 4, 5)), is(TruthValue.ERROR));
67 assertThat(sut.get(Tuple.of(3, 6, 5)), is(TruthValue.ERROR));
68 assertThat(sut.get(Tuple.of(3, 4, 6)), is(TruthValue.ERROR));
69 assertThat(sut.get(Tuple.of(3, 5, 6)), is(TruthValue.ERROR));
70 }
71
72 @Test
73 void mergeOverUnsetTest() {
74 var sut = new DecisionTree(3, null);
75 sut.mergeValue(Tuple.of(-1, 4, 5), TruthValue.UNKNOWN);
76 sut.mergeValue(Tuple.of(3, -1, 5), TruthValue.FALSE);
77 assertThat(sut.get(Tuple.of(2, 4, 5)), is(TruthValue.UNKNOWN));
78 assertThat(sut.get(Tuple.of(3, 4, 5)), is(TruthValue.FALSE));
79 assertThat(sut.get(Tuple.of(3, 6, 5)), is(TruthValue.FALSE));
80 assertThat(sut.get(Tuple.of(3, 4, 6)), is(nullValue()));
81 }
82
83 @Test
84 void emptyIterationTest() {
85 var sut = new DecisionTree(3, TruthValue.UNKNOWN);
86 var map = iterateAll(sut, TruthValue.UNKNOWN, 2);
87 assertThat(map.keySet(), hasSize(0));
88 }
89
90 @Test
91 void completeIterationTest() {
92 var sut = new DecisionTree(3, TruthValue.UNKNOWN);
93 var map = iterateAll(sut, TruthValue.FALSE, 2);
94 assertThat(map.keySet(), hasSize(8));
95 assertThat(map, hasEntry(Tuple.of(0, 0, 0), TruthValue.UNKNOWN));
96 assertThat(map, hasEntry(Tuple.of(0, 0, 1), TruthValue.UNKNOWN));
97 assertThat(map, hasEntry(Tuple.of(0, 1, 0), TruthValue.UNKNOWN));
98 assertThat(map, hasEntry(Tuple.of(0, 1, 1), TruthValue.UNKNOWN));
99 assertThat(map, hasEntry(Tuple.of(1, 0, 0), TruthValue.UNKNOWN));
100 assertThat(map, hasEntry(Tuple.of(1, 0, 1), TruthValue.UNKNOWN));
101 assertThat(map, hasEntry(Tuple.of(1, 1, 0), TruthValue.UNKNOWN));
102 assertThat(map, hasEntry(Tuple.of(1, 1, 1), TruthValue.UNKNOWN));
103 }
104
105 @Test
106 void mergedIterationTest() {
107 var sut = new DecisionTree(2, TruthValue.UNKNOWN);
108 sut.mergeValue(Tuple.of(1, -1), TruthValue.TRUE);
109 sut.mergeValue(Tuple.of(-1, 2), TruthValue.FALSE);
110 var map = iterateAll(sut, TruthValue.UNKNOWN, 3);
111 assertThat(map.keySet(), hasSize(5));
112 assertThat(map, hasEntry(Tuple.of(0, 2), TruthValue.FALSE));
113 assertThat(map, hasEntry(Tuple.of(1, 0), TruthValue.TRUE));
114 assertThat(map, hasEntry(Tuple.of(1, 1), TruthValue.TRUE));
115 assertThat(map, hasEntry(Tuple.of(1, 2), TruthValue.ERROR));
116 assertThat(map, hasEntry(Tuple.of(2, 2), TruthValue.FALSE));
117 }
118
119 @Test
120 void sparseIterationTest() {
121 var sut = new DecisionTree(2, null);
122 sut.mergeValue(Tuple.of(0, 0), TruthValue.TRUE);
123 sut.mergeValue(Tuple.of(1, 1), TruthValue.FALSE);
124 var map = iterateAll(sut, null, 10);
125 assertThat(map.keySet(), hasSize(2));
126 assertThat(map, hasEntry(Tuple.of(0, 0), TruthValue.TRUE));
127 assertThat(map, hasEntry(Tuple.of(1, 1), TruthValue.FALSE));
128 }
129
130 @Test
131 void overwriteNothingTest() {
132 var sut = new DecisionTree(2, TruthValue.UNKNOWN);
133 var values = new DecisionTree(2, null);
134 sut.overwriteValues(values);
135 assertThat(sut.get(Tuple.of(0, 0)), is(TruthValue.UNKNOWN));
136 }
137
138 @Test
139 void overwriteEverythingTest() {
140 var sut = new DecisionTree(2, TruthValue.FALSE);
141 sut.mergeValue(Tuple.of(0, 0), TruthValue.ERROR);
142 var values = new DecisionTree(2, TruthValue.TRUE);
143 sut.overwriteValues(values);
144 assertThat(sut.get(Tuple.of(0, 0)), is(TruthValue.TRUE));
145 assertThat(sut.get(Tuple.of(0, 1)), is(TruthValue.TRUE));
146 }
147
148 @Test
149 void overwriteWildcardTest() {
150 var sut = new DecisionTree(3, TruthValue.UNKNOWN);
151 sut.mergeValue(Tuple.of(1, 1, 1), TruthValue.FALSE);
152 sut.mergeValue(Tuple.of(-1, 4, 5), TruthValue.FALSE);
153 sut.mergeValue(Tuple.of(3, -1, 5), TruthValue.TRUE);
154 var values = new DecisionTree(3, null);
155 values.mergeValue(Tuple.of(2, 2, 2), TruthValue.TRUE);
156 values.mergeValue(Tuple.of(-1, 4, 5), TruthValue.UNKNOWN);
157 values.mergeValue(Tuple.of(3, -1, 5), TruthValue.FALSE);
158 sut.overwriteValues(values);
159 assertThat(sut.get(Tuple.of(1, 1, 1)), is(TruthValue.FALSE));
160 assertThat(sut.get(Tuple.of(2, 2, 2)), is(TruthValue.TRUE));
161 assertThat(sut.get(Tuple.of(2, 4, 5)), is(TruthValue.UNKNOWN));
162 assertThat(sut.get(Tuple.of(3, 4, 5)), is(TruthValue.FALSE));
163 assertThat(sut.get(Tuple.of(3, 6, 5)), is(TruthValue.FALSE));
164 assertThat(sut.get(Tuple.of(3, 4, 6)), is(TruthValue.UNKNOWN));
165 }
166
167 @Test
168 void removeIntermediateChildTest() {
169 var sut = new DecisionTree(3, TruthValue.TRUE);
170 var values = new DecisionTree(3, null);
171 values.mergeValue(Tuple.of(1, 1, 1), TruthValue.UNKNOWN);
172 sut.overwriteValues(values);
173 sut.mergeValue(Tuple.of(1, 1, 1), TruthValue.TRUE);
174 assertThat(sut.get(Tuple.of(1, 1, 1)), is(TruthValue.TRUE));
175 }
176
177 private Map<Tuple, TruthValue> iterateAll(DecisionTree sut, TruthValue defaultValue, int nodeCount) {
178 var cursor = sut.getCursor(defaultValue, nodeCount);
179 var map = new LinkedHashMap<Tuple, TruthValue>();
180 while (cursor.move()) {
181 map.put(cursor.getKey(), cursor.getValue());
182 }
183 assertThat(cursor.isDirty(), is(false));
184 assertThat(cursor.isTerminated(), is(true));
185 return map;
186 }
187}