aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store-query/src/test/java
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2023-05-01 02:07:23 +0200
committerLibravatar Kristóf Marussy <kristof@marussy.com>2023-05-01 02:42:34 +0200
commit4e698774925468062974b990143c1091e23ed63b (patch)
tree21f2fc38b6b3b5f3be6ecbdee100d385a2e92c05 /subprojects/store-query/src/test/java
parentfix(web): editor cursor styling (diff)
downloadrefinery-4e698774925468062974b990143c1091e23ed63b.tar.gz
refinery-4e698774925468062974b990143c1091e23ed63b.tar.zst
refinery-4e698774925468062974b990143c1091e23ed63b.zip
feat: query parameter binding validation
* Introduce parameter directions for constraints and DNF * Introduce variable directions for literals * Infer and check variable directions in DNF and topologically sort literals by their input variables
Diffstat (limited to 'subprojects/store-query/src/test/java')
-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.java273
-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 */
6package tools.refinery.store.query; 6package tools.refinery.store.query.dnf;
7 7
8import org.junit.jupiter.api.Test; 8import org.junit.jupiter.api.Test;
9import org.junit.jupiter.params.ParameterizedTest; 9import org.junit.jupiter.params.ParameterizedTest;
10import org.junit.jupiter.params.provider.CsvSource; 10import org.junit.jupiter.params.provider.CsvSource;
11import tools.refinery.store.query.dnf.Dnf;
12import tools.refinery.store.query.literal.BooleanLiteral; 11import tools.refinery.store.query.literal.BooleanLiteral;
12import tools.refinery.store.query.term.NodeVariable;
13import tools.refinery.store.query.term.Variable; 13import tools.refinery.store.query.term.Variable;
14import tools.refinery.store.query.term.bool.BoolTerms; 14import tools.refinery.store.query.term.bool.BoolTerms;
15import tools.refinery.store.query.view.KeyOnlyView; 15import tools.refinery.store.query.view.KeyOnlyView;
16import tools.refinery.store.query.view.SymbolView;
16import tools.refinery.store.representation.Symbol; 17import tools.refinery.store.representation.Symbol;
17 18
19import java.util.List;
20
18import static org.hamcrest.MatcherAssert.assertThat; 21import static org.hamcrest.MatcherAssert.assertThat;
19import static tools.refinery.store.query.literal.Literals.assume; 22import static tools.refinery.store.query.literal.Literals.assume;
20import static tools.refinery.store.query.literal.Literals.not; 23import static tools.refinery.store.query.literal.Literals.not;
21import static tools.refinery.store.query.tests.QueryMatchers.structurallyEqualTo; 24import static tools.refinery.store.query.tests.QueryMatchers.structurallyEqualTo;
22 25
23class DnfBuilderTest { 26class 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 */
6package tools.refinery.store.query.dnf;
7
8import org.junit.jupiter.api.Test;
9import tools.refinery.store.query.view.KeyOnlyView;
10import tools.refinery.store.query.view.SymbolView;
11import tools.refinery.store.representation.Symbol;
12
13import java.util.List;
14
15import static org.hamcrest.MatcherAssert.assertThat;
16import static tools.refinery.store.query.tests.QueryMatchers.structurallyEqualTo;
17
18class 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 */
6package tools.refinery.store.query; 6package tools.refinery.store.query.dnf;
7 7
8import org.junit.jupiter.api.Test; 8import org.junit.jupiter.api.Test;
9import tools.refinery.store.query.dnf.Dnf;
10import tools.refinery.store.query.term.Variable; 9import tools.refinery.store.query.term.Variable;
11import tools.refinery.store.query.view.KeyOnlyView; 10import tools.refinery.store.query.view.KeyOnlyView;
12import tools.refinery.store.representation.Symbol; 11import 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 }