aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store-query/src/test/java/tools/refinery/store/query/DnfBuilderTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/store-query/src/test/java/tools/refinery/store/query/DnfBuilderTest.java')
-rw-r--r--subprojects/store-query/src/test/java/tools/refinery/store/query/DnfBuilderTest.java220
1 files changed, 220 insertions, 0 deletions
diff --git a/subprojects/store-query/src/test/java/tools/refinery/store/query/DnfBuilderTest.java b/subprojects/store-query/src/test/java/tools/refinery/store/query/DnfBuilderTest.java
new file mode 100644
index 00000000..ceb46d6f
--- /dev/null
+++ b/subprojects/store-query/src/test/java/tools/refinery/store/query/DnfBuilderTest.java
@@ -0,0 +1,220 @@
1package tools.refinery.store.query;
2
3import org.junit.jupiter.api.Test;
4import tools.refinery.store.query.dnf.Dnf;
5import tools.refinery.store.query.literal.BooleanLiteral;
6import tools.refinery.store.query.term.Variable;
7import tools.refinery.store.query.view.KeyOnlyRelationView;
8import tools.refinery.store.representation.Symbol;
9
10import static org.hamcrest.MatcherAssert.assertThat;
11import static tools.refinery.store.query.literal.Literals.not;
12import static tools.refinery.store.query.tests.QueryMatchers.structurallyEqualTo;
13
14class DnfBuilderTest {
15 @Test
16 void eliminateTrueTest() {
17 var p = Variable.of("p");
18 var q = Variable.of("q");
19 var friend = new Symbol<>("friend", 2, Boolean.class, false);
20 var friendView = new KeyOnlyRelationView<>(friend);
21
22 var actual = Dnf.builder()
23 .parameters(p, q)
24 .clause(BooleanLiteral.TRUE, friendView.call(p, q))
25 .build();
26 var expected = Dnf.builder().parameters(p, q).clause(friendView.call(p, q)).build();
27
28 assertThat(actual, structurallyEqualTo(expected));
29 }
30
31 @Test
32 void eliminateFalseTest() {
33 var p = Variable.of("p");
34 var q = Variable.of("q");
35 var friend = new Symbol<>("friend", 2, Boolean.class, false);
36 var friendView = new KeyOnlyRelationView<>(friend);
37
38 var actual = Dnf.builder()
39 .parameters(p, q)
40 .clause(friendView.call(p, q))
41 .clause(friendView.call(q, p), BooleanLiteral.FALSE)
42 .build();
43 var expected = Dnf.builder().parameters(p, q).clause(friendView.call(p, q)).build();
44
45 assertThat(actual, structurallyEqualTo(expected));
46 }
47
48 @Test
49 void alwaysTrueTest() {
50 var p = Variable.of("p");
51 var q = Variable.of("q");
52 var friend = new Symbol<>("friend", 2, Boolean.class, false);
53 var friendView = new KeyOnlyRelationView<>(friend);
54
55 var actual = Dnf.builder()
56 .parameters(p, q)
57 .clause(friendView.call(p, q))
58 .clause(BooleanLiteral.TRUE)
59 .build();
60 var expected = Dnf.builder().parameters(p, q).clause().build();
61
62 assertThat(actual, structurallyEqualTo(expected));
63 }
64
65 @Test
66 void alwaysFalseTest() {
67 var p = Variable.of("p");
68 var q = Variable.of("q");
69 var friend = new Symbol<>("friend", 2, Boolean.class, false);
70 var friendView = new KeyOnlyRelationView<>(friend);
71
72 var actual = Dnf.builder()
73 .parameters(p, q)
74 .clause(friendView.call(p, q), BooleanLiteral.FALSE)
75 .build();
76 var expected = Dnf.builder().parameters(p, q).build();
77
78 assertThat(actual, structurallyEqualTo(expected));
79 }
80
81 @Test
82 void eliminateTrueDnfTest() {
83 var p = Variable.of("p");
84 var q = Variable.of("q");
85 var friend = new Symbol<>("friend", 2, Boolean.class, false);
86 var friendView = new KeyOnlyRelationView<>(friend);
87 var trueDnf = Dnf.builder().parameter(p).clause().build();
88
89 var actual = Dnf.builder()
90 .parameters(p, q)
91 .clause(trueDnf.call(q), friendView.call(p, q))
92 .build();
93 var expected = Dnf.builder().parameters(p, q).clause(friendView.call(p, q)).build();
94
95 assertThat(actual, structurallyEqualTo(expected));
96 }
97
98 @Test
99 void eliminateFalseDnfTest() {
100 var p = Variable.of("p");
101 var q = Variable.of("q");
102 var friend = new Symbol<>("friend", 2, Boolean.class, false);
103 var friendView = new KeyOnlyRelationView<>(friend);
104 var falseDnf = Dnf.builder().parameter(p).build();
105
106 var actual = Dnf.builder()
107 .parameters(p, q)
108 .clause(friendView.call(p, q))
109 .clause(friendView.call(q, p), falseDnf.call(q))
110 .build();
111 var expected = Dnf.builder().parameters(p, q).clause(friendView.call(p, q)).build();
112
113 assertThat(actual, structurallyEqualTo(expected));
114 }
115
116 @Test
117 void alwaysTrueDnfTest() {
118 var p = Variable.of("p");
119 var q = Variable.of("q");
120 var friend = new Symbol<>("friend", 2, Boolean.class, false);
121 var friendView = new KeyOnlyRelationView<>(friend);
122 var trueDnf = Dnf.builder().parameter(p).clause().build();
123
124 var actual = Dnf.builder()
125 .parameters(p, q)
126 .clause(friendView.call(p, q))
127 .clause(trueDnf.call(q))
128 .build();
129 var expected = Dnf.builder().parameters(p, q).clause().build();
130
131 assertThat(actual, structurallyEqualTo(expected));
132 }
133
134 @Test
135 void alwaysFalseDnfTest() {
136 var p = Variable.of("p");
137 var q = Variable.of("q");
138 var friend = new Symbol<>("friend", 2, Boolean.class, false);
139 var friendView = new KeyOnlyRelationView<>(friend);
140 var falseDnf = Dnf.builder().parameter(p).build();
141
142 var actual = Dnf.builder()
143 .parameters(p, q)
144 .clause(friendView.call(p, q), falseDnf.call(q))
145 .build();
146 var expected = Dnf.builder().parameters(p, q).build();
147
148 assertThat(actual, structurallyEqualTo(expected));
149 }
150
151 @Test
152 void eliminateNotFalseDnfTest() {
153 var p = Variable.of("p");
154 var q = Variable.of("q");
155 var friend = new Symbol<>("friend", 2, Boolean.class, false);
156 var friendView = new KeyOnlyRelationView<>(friend);
157 var falseDnf = Dnf.builder().parameter(p).build();
158
159 var actual = Dnf.builder()
160 .parameters(p, q)
161 .clause(not(falseDnf.call(q)), friendView.call(p, q))
162 .build();
163 var expected = Dnf.builder().parameters(p, q).clause(friendView.call(p, q)).build();
164
165 assertThat(actual, structurallyEqualTo(expected));
166 }
167
168 @Test
169 void eliminateNotTrueDnfTest() {
170 var p = Variable.of("p");
171 var q = Variable.of("q");
172 var friend = new Symbol<>("friend", 2, Boolean.class, false);
173 var friendView = new KeyOnlyRelationView<>(friend);
174 var trueDnf = Dnf.builder().parameter(p).clause().build();
175
176 var actual = Dnf.builder()
177 .parameters(p, q)
178 .clause(friendView.call(p, q))
179 .clause(friendView.call(q, p), not(trueDnf.call(q)))
180 .build();
181 var expected = Dnf.builder().parameters(p, q).clause(friendView.call(p, q)).build();
182
183 assertThat(actual, structurallyEqualTo(expected));
184 }
185
186 @Test
187 void alwaysNotFalseDnfTest() {
188 var p = Variable.of("p");
189 var q = Variable.of("q");
190 var friend = new Symbol<>("friend", 2, Boolean.class, false);
191 var friendView = new KeyOnlyRelationView<>(friend);
192 var falseDnf = Dnf.builder().parameter(p).build();
193
194 var actual = Dnf.builder()
195 .parameters(p, q)
196 .clause(friendView.call(p, q))
197 .clause(not(falseDnf.call(q)))
198 .build();
199 var expected = Dnf.builder().parameters(p, q).clause().build();
200
201 assertThat(actual, structurallyEqualTo(expected));
202 }
203
204 @Test
205 void alwaysNotTrueDnfTest() {
206 var p = Variable.of("p");
207 var q = Variable.of("q");
208 var friend = new Symbol<>("friend", 2, Boolean.class, false);
209 var friendView = new KeyOnlyRelationView<>(friend);
210 var trueDnf = Dnf.builder().parameter(p).clause().build();
211
212 var actual = Dnf.builder()
213 .parameters(p, q)
214 .clause(friendView.call(p, q), not(trueDnf.call(q)))
215 .build();
216 var expected = Dnf.builder().parameters(p, q).build();
217
218 assertThat(actual, structurallyEqualTo(expected));
219 }
220}