diff options
Diffstat (limited to 'subprojects/store-query/src/test')
-rw-r--r-- | subprojects/store-query/src/test/java/tools/refinery/store/query/dnf/DnfBuilderLiteralEliminationTest.java (renamed from subprojects/store-query/src/test/java/tools/refinery/store/query/DnfBuilderTest.java) | 105 | ||||
-rw-r--r-- | subprojects/store-query/src/test/java/tools/refinery/store/query/dnf/DnfBuilderVariableUnificationTest.java | 273 | ||||
-rw-r--r-- | subprojects/store-query/src/test/java/tools/refinery/store/query/dnf/DnfToDefinitionStringTest.java (renamed from subprojects/store-query/src/test/java/tools/refinery/store/query/DnfToDefinitionStringTest.java) | 5 |
3 files changed, 299 insertions, 84 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/dnf/DnfBuilderLiteralEliminationTest.java index 01e2ccf6..4edea401 100644 --- a/subprojects/store-query/src/test/java/tools/refinery/store/query/DnfBuilderTest.java +++ b/subprojects/store-query/src/test/java/tools/refinery/store/query/dnf/DnfBuilderLiteralEliminationTest.java | |||
@@ -3,31 +3,36 @@ | |||
3 | * | 3 | * |
4 | * SPDX-License-Identifier: EPL-2.0 | 4 | * SPDX-License-Identifier: EPL-2.0 |
5 | */ | 5 | */ |
6 | package tools.refinery.store.query; | 6 | package tools.refinery.store.query.dnf; |
7 | 7 | ||
8 | import org.junit.jupiter.api.Test; | 8 | import org.junit.jupiter.api.Test; |
9 | import org.junit.jupiter.params.ParameterizedTest; | 9 | import org.junit.jupiter.params.ParameterizedTest; |
10 | import org.junit.jupiter.params.provider.CsvSource; | 10 | import org.junit.jupiter.params.provider.CsvSource; |
11 | import tools.refinery.store.query.dnf.Dnf; | ||
12 | import tools.refinery.store.query.literal.BooleanLiteral; | 11 | import tools.refinery.store.query.literal.BooleanLiteral; |
12 | import tools.refinery.store.query.term.NodeVariable; | ||
13 | import tools.refinery.store.query.term.Variable; | 13 | import tools.refinery.store.query.term.Variable; |
14 | import tools.refinery.store.query.term.bool.BoolTerms; | 14 | import tools.refinery.store.query.term.bool.BoolTerms; |
15 | import tools.refinery.store.query.view.KeyOnlyView; | 15 | import tools.refinery.store.query.view.KeyOnlyView; |
16 | import tools.refinery.store.query.view.SymbolView; | ||
16 | import tools.refinery.store.representation.Symbol; | 17 | import tools.refinery.store.representation.Symbol; |
17 | 18 | ||
19 | import java.util.List; | ||
20 | |||
18 | import static org.hamcrest.MatcherAssert.assertThat; | 21 | import static org.hamcrest.MatcherAssert.assertThat; |
19 | import static tools.refinery.store.query.literal.Literals.assume; | 22 | import static tools.refinery.store.query.literal.Literals.assume; |
20 | import static tools.refinery.store.query.literal.Literals.not; | 23 | import static tools.refinery.store.query.literal.Literals.not; |
21 | import static tools.refinery.store.query.tests.QueryMatchers.structurallyEqualTo; | 24 | import static tools.refinery.store.query.tests.QueryMatchers.structurallyEqualTo; |
22 | 25 | ||
23 | class DnfBuilderTest { | 26 | class DnfBuilderLiteralEliminationTest { |
27 | private final Symbol<Boolean> friend = new Symbol<>("friend", 2, Boolean.class, false); | ||
28 | private final SymbolView<Boolean> friendView = new KeyOnlyView<>(friend); | ||
29 | private final NodeVariable p = Variable.of("p"); | ||
30 | private final NodeVariable q = Variable.of("q"); | ||
31 | private final Dnf trueDnf = Dnf.builder().parameter(p).clause().build(); | ||
32 | private final Dnf falseDnf = Dnf.builder().parameter(p).build(); | ||
33 | |||
24 | @Test | 34 | @Test |
25 | void eliminateTrueTest() { | 35 | void eliminateTrueTest() { |
26 | var p = Variable.of("p"); | ||
27 | var q = Variable.of("q"); | ||
28 | var friend = new Symbol<>("friend", 2, Boolean.class, false); | ||
29 | var friendView = new KeyOnlyView<>(friend); | ||
30 | |||
31 | var actual = Dnf.builder() | 36 | var actual = Dnf.builder() |
32 | .parameters(p, q) | 37 | .parameters(p, q) |
33 | .clause(BooleanLiteral.TRUE, friendView.call(p, q)) | 38 | .clause(BooleanLiteral.TRUE, friendView.call(p, q)) |
@@ -39,11 +44,6 @@ class DnfBuilderTest { | |||
39 | 44 | ||
40 | @Test | 45 | @Test |
41 | void eliminateTrueAssumptionTest() { | 46 | void eliminateTrueAssumptionTest() { |
42 | var p = Variable.of("p"); | ||
43 | var q = Variable.of("q"); | ||
44 | var friend = new Symbol<>("friend", 2, Boolean.class, false); | ||
45 | var friendView = new KeyOnlyView<>(friend); | ||
46 | |||
47 | var actual = Dnf.builder() | 47 | var actual = Dnf.builder() |
48 | .parameters(p, q) | 48 | .parameters(p, q) |
49 | .clause(assume(BoolTerms.constant(true)), friendView.call(p, q)) | 49 | .clause(assume(BoolTerms.constant(true)), friendView.call(p, q)) |
@@ -55,11 +55,6 @@ class DnfBuilderTest { | |||
55 | 55 | ||
56 | @Test | 56 | @Test |
57 | void eliminateFalseTest() { | 57 | void eliminateFalseTest() { |
58 | var p = Variable.of("p"); | ||
59 | var q = Variable.of("q"); | ||
60 | var friend = new Symbol<>("friend", 2, Boolean.class, false); | ||
61 | var friendView = new KeyOnlyView<>(friend); | ||
62 | |||
63 | var actual = Dnf.builder() | 58 | var actual = Dnf.builder() |
64 | .parameters(p, q) | 59 | .parameters(p, q) |
65 | .clause(friendView.call(p, q)) | 60 | .clause(friendView.call(p, q)) |
@@ -76,11 +71,6 @@ class DnfBuilderTest { | |||
76 | "null" | 71 | "null" |
77 | }, nullValues = "null") | 72 | }, nullValues = "null") |
78 | void eliminateFalseAssumptionTest(Boolean value) { | 73 | void eliminateFalseAssumptionTest(Boolean value) { |
79 | var p = Variable.of("p"); | ||
80 | var q = Variable.of("q"); | ||
81 | var friend = new Symbol<>("friend", 2, Boolean.class, false); | ||
82 | var friendView = new KeyOnlyView<>(friend); | ||
83 | |||
84 | var actual = Dnf.builder() | 74 | var actual = Dnf.builder() |
85 | .parameters(p, q) | 75 | .parameters(p, q) |
86 | .clause(friendView.call(p, q)) | 76 | .clause(friendView.call(p, q)) |
@@ -93,11 +83,6 @@ class DnfBuilderTest { | |||
93 | 83 | ||
94 | @Test | 84 | @Test |
95 | void alwaysTrueTest() { | 85 | void alwaysTrueTest() { |
96 | var p = Variable.of("p"); | ||
97 | var q = Variable.of("q"); | ||
98 | var friend = new Symbol<>("friend", 2, Boolean.class, false); | ||
99 | var friendView = new KeyOnlyView<>(friend); | ||
100 | |||
101 | var actual = Dnf.builder() | 86 | var actual = Dnf.builder() |
102 | .parameters(p, q) | 87 | .parameters(p, q) |
103 | .clause(friendView.call(p, q)) | 88 | .clause(friendView.call(p, q)) |
@@ -110,11 +95,6 @@ class DnfBuilderTest { | |||
110 | 95 | ||
111 | @Test | 96 | @Test |
112 | void alwaysFalseTest() { | 97 | void alwaysFalseTest() { |
113 | var p = Variable.of("p"); | ||
114 | var q = Variable.of("q"); | ||
115 | var friend = new Symbol<>("friend", 2, Boolean.class, false); | ||
116 | var friendView = new KeyOnlyView<>(friend); | ||
117 | |||
118 | var actual = Dnf.builder() | 98 | var actual = Dnf.builder() |
119 | .parameters(p, q) | 99 | .parameters(p, q) |
120 | .clause(friendView.call(p, q), BooleanLiteral.FALSE) | 100 | .clause(friendView.call(p, q), BooleanLiteral.FALSE) |
@@ -126,12 +106,6 @@ class DnfBuilderTest { | |||
126 | 106 | ||
127 | @Test | 107 | @Test |
128 | void eliminateTrueDnfTest() { | 108 | void eliminateTrueDnfTest() { |
129 | var p = Variable.of("p"); | ||
130 | var q = Variable.of("q"); | ||
131 | var friend = new Symbol<>("friend", 2, Boolean.class, false); | ||
132 | var friendView = new KeyOnlyView<>(friend); | ||
133 | var trueDnf = Dnf.builder().parameter(p).clause().build(); | ||
134 | |||
135 | var actual = Dnf.builder() | 109 | var actual = Dnf.builder() |
136 | .parameters(p, q) | 110 | .parameters(p, q) |
137 | .clause(trueDnf.call(q), friendView.call(p, q)) | 111 | .clause(trueDnf.call(q), friendView.call(p, q)) |
@@ -143,12 +117,6 @@ class DnfBuilderTest { | |||
143 | 117 | ||
144 | @Test | 118 | @Test |
145 | void eliminateFalseDnfTest() { | 119 | void eliminateFalseDnfTest() { |
146 | var p = Variable.of("p"); | ||
147 | var q = Variable.of("q"); | ||
148 | var friend = new Symbol<>("friend", 2, Boolean.class, false); | ||
149 | var friendView = new KeyOnlyView<>(friend); | ||
150 | var falseDnf = Dnf.builder().parameter(p).build(); | ||
151 | |||
152 | var actual = Dnf.builder() | 120 | var actual = Dnf.builder() |
153 | .parameters(p, q) | 121 | .parameters(p, q) |
154 | .clause(friendView.call(p, q)) | 122 | .clause(friendView.call(p, q)) |
@@ -161,12 +129,6 @@ class DnfBuilderTest { | |||
161 | 129 | ||
162 | @Test | 130 | @Test |
163 | void alwaysTrueDnfTest() { | 131 | void alwaysTrueDnfTest() { |
164 | var p = Variable.of("p"); | ||
165 | var q = Variable.of("q"); | ||
166 | var friend = new Symbol<>("friend", 2, Boolean.class, false); | ||
167 | var friendView = new KeyOnlyView<>(friend); | ||
168 | var trueDnf = Dnf.builder().parameter(p).clause().build(); | ||
169 | |||
170 | var actual = Dnf.builder() | 132 | var actual = Dnf.builder() |
171 | .parameters(p, q) | 133 | .parameters(p, q) |
172 | .clause(friendView.call(p, q)) | 134 | .clause(friendView.call(p, q)) |
@@ -179,12 +141,6 @@ class DnfBuilderTest { | |||
179 | 141 | ||
180 | @Test | 142 | @Test |
181 | void alwaysFalseDnfTest() { | 143 | void alwaysFalseDnfTest() { |
182 | var p = Variable.of("p"); | ||
183 | var q = Variable.of("q"); | ||
184 | var friend = new Symbol<>("friend", 2, Boolean.class, false); | ||
185 | var friendView = new KeyOnlyView<>(friend); | ||
186 | var falseDnf = Dnf.builder().parameter(p).build(); | ||
187 | |||
188 | var actual = Dnf.builder() | 144 | var actual = Dnf.builder() |
189 | .parameters(p, q) | 145 | .parameters(p, q) |
190 | .clause(friendView.call(p, q), falseDnf.call(q)) | 146 | .clause(friendView.call(p, q), falseDnf.call(q)) |
@@ -196,12 +152,6 @@ class DnfBuilderTest { | |||
196 | 152 | ||
197 | @Test | 153 | @Test |
198 | void eliminateNotFalseDnfTest() { | 154 | void eliminateNotFalseDnfTest() { |
199 | var p = Variable.of("p"); | ||
200 | var q = Variable.of("q"); | ||
201 | var friend = new Symbol<>("friend", 2, Boolean.class, false); | ||
202 | var friendView = new KeyOnlyView<>(friend); | ||
203 | var falseDnf = Dnf.builder().parameter(p).build(); | ||
204 | |||
205 | var actual = Dnf.builder() | 155 | var actual = Dnf.builder() |
206 | .parameters(p, q) | 156 | .parameters(p, q) |
207 | .clause(not(falseDnf.call(q)), friendView.call(p, q)) | 157 | .clause(not(falseDnf.call(q)), friendView.call(p, q)) |
@@ -213,12 +163,6 @@ class DnfBuilderTest { | |||
213 | 163 | ||
214 | @Test | 164 | @Test |
215 | void eliminateNotTrueDnfTest() { | 165 | void eliminateNotTrueDnfTest() { |
216 | var p = Variable.of("p"); | ||
217 | var q = Variable.of("q"); | ||
218 | var friend = new Symbol<>("friend", 2, Boolean.class, false); | ||
219 | var friendView = new KeyOnlyView<>(friend); | ||
220 | var trueDnf = Dnf.builder().parameter(p).clause().build(); | ||
221 | |||
222 | var actual = Dnf.builder() | 166 | var actual = Dnf.builder() |
223 | .parameters(p, q) | 167 | .parameters(p, q) |
224 | .clause(friendView.call(p, q)) | 168 | .clause(friendView.call(p, q)) |
@@ -231,12 +175,6 @@ class DnfBuilderTest { | |||
231 | 175 | ||
232 | @Test | 176 | @Test |
233 | void alwaysNotFalseDnfTest() { | 177 | void alwaysNotFalseDnfTest() { |
234 | var p = Variable.of("p"); | ||
235 | var q = Variable.of("q"); | ||
236 | var friend = new Symbol<>("friend", 2, Boolean.class, false); | ||
237 | var friendView = new KeyOnlyView<>(friend); | ||
238 | var falseDnf = Dnf.builder().parameter(p).build(); | ||
239 | |||
240 | var actual = Dnf.builder() | 178 | var actual = Dnf.builder() |
241 | .parameters(p, q) | 179 | .parameters(p, q) |
242 | .clause(friendView.call(p, q)) | 180 | .clause(friendView.call(p, q)) |
@@ -249,12 +187,6 @@ class DnfBuilderTest { | |||
249 | 187 | ||
250 | @Test | 188 | @Test |
251 | void alwaysNotTrueDnfTest() { | 189 | void alwaysNotTrueDnfTest() { |
252 | var p = Variable.of("p"); | ||
253 | var q = Variable.of("q"); | ||
254 | var friend = new Symbol<>("friend", 2, Boolean.class, false); | ||
255 | var friendView = new KeyOnlyView<>(friend); | ||
256 | var trueDnf = Dnf.builder().parameter(p).clause().build(); | ||
257 | |||
258 | var actual = Dnf.builder() | 190 | var actual = Dnf.builder() |
259 | .parameters(p, q) | 191 | .parameters(p, q) |
260 | .clause(friendView.call(p, q), not(trueDnf.call(q))) | 192 | .clause(friendView.call(p, q), not(trueDnf.call(q))) |
@@ -263,4 +195,15 @@ class DnfBuilderTest { | |||
263 | 195 | ||
264 | assertThat(actual, structurallyEqualTo(expected)); | 196 | assertThat(actual, structurallyEqualTo(expected)); |
265 | } | 197 | } |
198 | |||
199 | @Test | ||
200 | void removeDuplicateTest() { | ||
201 | var actual = Dnf.of(builder -> builder.clause((p, q) -> List.of( | ||
202 | friendView.call(p, q), | ||
203 | friendView.call(p, q) | ||
204 | ))); | ||
205 | var expected = Dnf.of(builder -> builder.clause((p, q) -> List.of(friendView.call(p, q)))); | ||
206 | |||
207 | assertThat(actual, structurallyEqualTo(expected)); | ||
208 | } | ||
266 | } | 209 | } |
diff --git a/subprojects/store-query/src/test/java/tools/refinery/store/query/dnf/DnfBuilderVariableUnificationTest.java b/subprojects/store-query/src/test/java/tools/refinery/store/query/dnf/DnfBuilderVariableUnificationTest.java new file mode 100644 index 00000000..a54ad4d6 --- /dev/null +++ b/subprojects/store-query/src/test/java/tools/refinery/store/query/dnf/DnfBuilderVariableUnificationTest.java | |||
@@ -0,0 +1,273 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.store.query.dnf; | ||
7 | |||
8 | import org.junit.jupiter.api.Test; | ||
9 | import tools.refinery.store.query.view.KeyOnlyView; | ||
10 | import tools.refinery.store.query.view.SymbolView; | ||
11 | import tools.refinery.store.representation.Symbol; | ||
12 | |||
13 | import java.util.List; | ||
14 | |||
15 | import static org.hamcrest.MatcherAssert.assertThat; | ||
16 | import static tools.refinery.store.query.tests.QueryMatchers.structurallyEqualTo; | ||
17 | |||
18 | class DnfBuilderVariableUnificationTest { | ||
19 | private final Symbol<Boolean> friend = new Symbol<>("friend", 2, Boolean.class, false); | ||
20 | private final Symbol<Boolean> children = new Symbol<>("friend", 2, Boolean.class, false); | ||
21 | private final SymbolView<Boolean> friendView = new KeyOnlyView<>(friend); | ||
22 | private final SymbolView<Boolean> childrenView = new KeyOnlyView<>(children); | ||
23 | |||
24 | @Test | ||
25 | void equalToParameterTest() { | ||
26 | var actual = Dnf.of(builder -> { | ||
27 | var p = builder.parameter("p"); | ||
28 | builder.clause(q -> List.of( | ||
29 | friendView.call(p, q), | ||
30 | p.isEquivalent(q) | ||
31 | )); | ||
32 | }); | ||
33 | var expected = Dnf.of(builder -> { | ||
34 | var p = builder.parameter("p"); | ||
35 | builder.clause(friendView.call(p, p)); | ||
36 | }); | ||
37 | |||
38 | assertThat(actual, structurallyEqualTo(expected)); | ||
39 | } | ||
40 | |||
41 | @Test | ||
42 | void equalToParameterReverseTest() { | ||
43 | var actual = Dnf.of(builder -> { | ||
44 | var p = builder.parameter("p"); | ||
45 | builder.clause(q -> List.of( | ||
46 | friendView.call(p, q), | ||
47 | q.isEquivalent(p) | ||
48 | )); | ||
49 | }); | ||
50 | var expected = Dnf.of(builder -> { | ||
51 | var p = builder.parameter("p"); | ||
52 | builder.clause(friendView.call(p, p)); | ||
53 | }); | ||
54 | |||
55 | assertThat(actual, structurallyEqualTo(expected)); | ||
56 | } | ||
57 | |||
58 | @Test | ||
59 | void equalQuantifiedTest() { | ||
60 | var actual = Dnf.of(builder -> builder.clause((p, q) -> List.of( | ||
61 | friendView.call(p, q), | ||
62 | p.isEquivalent(q) | ||
63 | ))); | ||
64 | var expected = Dnf.of(builder -> builder.clause(p -> List.of(friendView.call(p, p)))); | ||
65 | |||
66 | assertThat(actual, structurallyEqualTo(expected)); | ||
67 | } | ||
68 | |||
69 | @Test | ||
70 | void equalQuantifiedTransitiveTest() { | ||
71 | var actual = Dnf.of(builder -> builder.clause((p, q, r) -> List.of( | ||
72 | friendView.call(p, q), | ||
73 | p.isEquivalent(q), | ||
74 | childrenView.call(p, r), | ||
75 | q.isEquivalent(r) | ||
76 | ))); | ||
77 | var expected = Dnf.of(builder -> builder.clause(p -> List.of( | ||
78 | friendView.call(p, p), | ||
79 | childrenView.call(p, p) | ||
80 | ))); | ||
81 | |||
82 | assertThat(actual, structurallyEqualTo(expected)); | ||
83 | } | ||
84 | |||
85 | @Test | ||
86 | void equalQuantifiedTransitiveRemoveDuplicateTest() { | ||
87 | var actual = Dnf.of(builder -> builder.clause((p, q, r) -> List.of( | ||
88 | friendView.call(p, q), | ||
89 | p.isEquivalent(q), | ||
90 | friendView.call(p, r), | ||
91 | q.isEquivalent(r) | ||
92 | ))); | ||
93 | var expected = Dnf.of(builder -> builder.clause(p -> List.of(friendView.call(p, p)))); | ||
94 | |||
95 | assertThat(actual, structurallyEqualTo(expected)); | ||
96 | } | ||
97 | |||
98 | @Test | ||
99 | void parametersEqualTest() { | ||
100 | var actual = Dnf.of(builder -> { | ||
101 | var p = builder.parameter("p"); | ||
102 | var q = builder.parameter("q"); | ||
103 | builder.clause( | ||
104 | friendView.call(p, q), | ||
105 | p.isEquivalent(q) | ||
106 | ); | ||
107 | }); | ||
108 | var expected = Dnf.of(builder -> { | ||
109 | var p = builder.parameter("p"); | ||
110 | var q = builder.parameter("q"); | ||
111 | builder.clause( | ||
112 | q.isEquivalent(p), | ||
113 | friendView.call(p, p) | ||
114 | ); | ||
115 | }); | ||
116 | |||
117 | assertThat(actual, structurallyEqualTo(expected)); | ||
118 | } | ||
119 | |||
120 | @Test | ||
121 | void parametersEqualTransitiveTest() { | ||
122 | var actual = Dnf.of(builder -> { | ||
123 | var p = builder.parameter("p"); | ||
124 | var q = builder.parameter("q"); | ||
125 | var r = builder.parameter("r"); | ||
126 | builder.clause( | ||
127 | friendView.call(p, q), | ||
128 | childrenView.call(p, r), | ||
129 | p.isEquivalent(q), | ||
130 | r.isEquivalent(q) | ||
131 | ); | ||
132 | }); | ||
133 | var expected = Dnf.of(builder -> { | ||
134 | var p = builder.parameter("p"); | ||
135 | var q = builder.parameter("q"); | ||
136 | var r = builder.parameter("r"); | ||
137 | builder.clause( | ||
138 | q.isEquivalent(p), | ||
139 | r.isEquivalent(p), | ||
140 | friendView.call(p, p), | ||
141 | childrenView.call(p, p) | ||
142 | ); | ||
143 | }); | ||
144 | |||
145 | assertThat(actual, structurallyEqualTo(expected)); | ||
146 | } | ||
147 | |||
148 | @Test | ||
149 | void parameterAndQuantifiedEqualsTest() { | ||
150 | var actual = Dnf.of(builder -> { | ||
151 | var p = builder.parameter("p"); | ||
152 | var q = builder.parameter("q"); | ||
153 | builder.clause((r) -> List.of( | ||
154 | friendView.call(p, r), | ||
155 | p.isEquivalent(r), | ||
156 | childrenView.call(q, r), | ||
157 | q.isEquivalent(r) | ||
158 | )); | ||
159 | }); | ||
160 | var expected = Dnf.of(builder -> { | ||
161 | var p = builder.parameter("p"); | ||
162 | var q = builder.parameter("q"); | ||
163 | builder.clause( | ||
164 | q.isEquivalent(p), | ||
165 | friendView.call(p, p), | ||
166 | childrenView.call(p, p) | ||
167 | ); | ||
168 | }); | ||
169 | |||
170 | assertThat(actual, structurallyEqualTo(expected)); | ||
171 | } | ||
172 | |||
173 | @Test | ||
174 | void parameterAndQuantifiedEqualsReverseFirstTest() { | ||
175 | var actual = Dnf.of(builder -> { | ||
176 | var p = builder.parameter("p"); | ||
177 | var q = builder.parameter("q"); | ||
178 | builder.clause((r) -> List.of( | ||
179 | friendView.call(p, r), | ||
180 | r.isEquivalent(p), | ||
181 | childrenView.call(q, r), | ||
182 | q.isEquivalent(r) | ||
183 | )); | ||
184 | }); | ||
185 | var expected = Dnf.of(builder -> { | ||
186 | var p = builder.parameter("p"); | ||
187 | var q = builder.parameter("q"); | ||
188 | builder.clause( | ||
189 | q.isEquivalent(p), | ||
190 | friendView.call(p, p), | ||
191 | childrenView.call(p, p) | ||
192 | ); | ||
193 | }); | ||
194 | |||
195 | assertThat(actual, structurallyEqualTo(expected)); | ||
196 | } | ||
197 | |||
198 | @Test | ||
199 | void parameterAndQuantifiedEqualsReverseSecondTest() { | ||
200 | var actual = Dnf.of(builder -> { | ||
201 | var p = builder.parameter("p"); | ||
202 | var q = builder.parameter("q"); | ||
203 | builder.clause((r) -> List.of( | ||
204 | friendView.call(p, r), | ||
205 | p.isEquivalent(r), | ||
206 | childrenView.call(q, r), | ||
207 | r.isEquivalent(q) | ||
208 | )); | ||
209 | }); | ||
210 | var expected = Dnf.of(builder -> { | ||
211 | var p = builder.parameter("p"); | ||
212 | var q = builder.parameter("q"); | ||
213 | builder.clause( | ||
214 | q.isEquivalent(p), | ||
215 | friendView.call(p, p), | ||
216 | childrenView.call(p, p) | ||
217 | ); | ||
218 | }); | ||
219 | |||
220 | assertThat(actual, structurallyEqualTo(expected)); | ||
221 | } | ||
222 | |||
223 | @Test | ||
224 | void parameterAndQuantifiedEqualsReverseBoth() { | ||
225 | var actual = Dnf.of(builder -> { | ||
226 | var p = builder.parameter("p"); | ||
227 | var q = builder.parameter("q"); | ||
228 | builder.clause((r) -> List.of( | ||
229 | friendView.call(p, r), | ||
230 | p.isEquivalent(r), | ||
231 | childrenView.call(q, r), | ||
232 | r.isEquivalent(q) | ||
233 | )); | ||
234 | }); | ||
235 | var expected = Dnf.of(builder -> { | ||
236 | var p = builder.parameter("p"); | ||
237 | var q = builder.parameter("q"); | ||
238 | builder.clause( | ||
239 | q.isEquivalent(p), | ||
240 | friendView.call(p, p), | ||
241 | childrenView.call(p, p) | ||
242 | ); | ||
243 | }); | ||
244 | |||
245 | assertThat(actual, structurallyEqualTo(expected)); | ||
246 | } | ||
247 | |||
248 | @Test | ||
249 | void parameterAndTwoQuantifiedEqualsTest() { | ||
250 | var actual = Dnf.of(builder -> { | ||
251 | var p = builder.parameter("p"); | ||
252 | var q = builder.parameter("q"); | ||
253 | builder.clause((r, s) -> List.of( | ||
254 | r.isEquivalent(s), | ||
255 | friendView.call(p, r), | ||
256 | p.isEquivalent(r), | ||
257 | childrenView.call(q, s), | ||
258 | q.isEquivalent(s) | ||
259 | )); | ||
260 | }); | ||
261 | var expected = Dnf.of(builder -> { | ||
262 | var p = builder.parameter("p"); | ||
263 | var q = builder.parameter("q"); | ||
264 | builder.clause( | ||
265 | q.isEquivalent(p), | ||
266 | friendView.call(p, p), | ||
267 | childrenView.call(p, p) | ||
268 | ); | ||
269 | }); | ||
270 | |||
271 | assertThat(actual, structurallyEqualTo(expected)); | ||
272 | } | ||
273 | } | ||
diff --git a/subprojects/store-query/src/test/java/tools/refinery/store/query/DnfToDefinitionStringTest.java b/subprojects/store-query/src/test/java/tools/refinery/store/query/dnf/DnfToDefinitionStringTest.java index e89ab682..2e93d78a 100644 --- a/subprojects/store-query/src/test/java/tools/refinery/store/query/DnfToDefinitionStringTest.java +++ b/subprojects/store-query/src/test/java/tools/refinery/store/query/dnf/DnfToDefinitionStringTest.java | |||
@@ -3,10 +3,9 @@ | |||
3 | * | 3 | * |
4 | * SPDX-License-Identifier: EPL-2.0 | 4 | * SPDX-License-Identifier: EPL-2.0 |
5 | */ | 5 | */ |
6 | package tools.refinery.store.query; | 6 | package tools.refinery.store.query.dnf; |
7 | 7 | ||
8 | import org.junit.jupiter.api.Test; | 8 | import org.junit.jupiter.api.Test; |
9 | import tools.refinery.store.query.dnf.Dnf; | ||
10 | import tools.refinery.store.query.term.Variable; | 9 | import tools.refinery.store.query.term.Variable; |
11 | import tools.refinery.store.query.view.KeyOnlyView; | 10 | import tools.refinery.store.query.view.KeyOnlyView; |
12 | import tools.refinery.store.representation.Symbol; | 11 | import tools.refinery.store.representation.Symbol; |
@@ -43,7 +42,7 @@ class DnfToDefinitionStringTest { | |||
43 | var dnf = Dnf.builder("Example").parameter(p).clause().build(); | 42 | var dnf = Dnf.builder("Example").parameter(p).clause().build(); |
44 | 43 | ||
45 | assertThat(dnf.toDefinitionString(), is(""" | 44 | assertThat(dnf.toDefinitionString(), is(""" |
46 | pred Example(p) <-> | 45 | pred Example(@In p) <-> |
47 | <empty>. | 46 | <empty>. |
48 | """)); | 47 | """)); |
49 | } | 48 | } |