aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/logic/src/test/java/tools/refinery/logic/tests/StructurallyEqualToRawTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/logic/src/test/java/tools/refinery/logic/tests/StructurallyEqualToRawTest.java')
-rw-r--r--subprojects/logic/src/test/java/tools/refinery/logic/tests/StructurallyEqualToRawTest.java155
1 files changed, 155 insertions, 0 deletions
diff --git a/subprojects/logic/src/test/java/tools/refinery/logic/tests/StructurallyEqualToRawTest.java b/subprojects/logic/src/test/java/tools/refinery/logic/tests/StructurallyEqualToRawTest.java
new file mode 100644
index 00000000..52a22ce1
--- /dev/null
+++ b/subprojects/logic/src/test/java/tools/refinery/logic/tests/StructurallyEqualToRawTest.java
@@ -0,0 +1,155 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.logic.tests;
7
8import org.junit.jupiter.api.Test;
9import tools.refinery.logic.Constraint;
10import tools.refinery.logic.dnf.Dnf;
11import tools.refinery.logic.dnf.SymbolicParameter;
12import tools.refinery.logic.term.NodeVariable;
13import tools.refinery.logic.term.ParameterDirection;
14import tools.refinery.logic.term.Variable;
15
16import java.util.List;
17
18import static org.hamcrest.CoreMatchers.containsString;
19import static org.hamcrest.MatcherAssert.assertThat;
20import static org.hamcrest.Matchers.allOf;
21import static org.junit.jupiter.api.Assertions.assertThrows;
22import static tools.refinery.logic.tests.QueryMatchers.structurallyEqualTo;
23
24class StructurallyEqualToRawTest {
25 private static final Constraint personView = new FakeKeyOnlyView("Person", 1);
26 private static final Constraint friendView = new FakeKeyOnlyView("friend", 2);
27 private static final NodeVariable p = Variable.of("p");
28 private static final NodeVariable q = Variable.of("q");
29
30 @Test
31 void flatEqualsTest() {
32 var actual = Dnf.builder("Actual").parameters(p).clause(personView.call(p)).build();
33
34 assertThat(actual, structurallyEqualTo(
35 List.of(new SymbolicParameter(q, ParameterDirection.OUT)),
36 List.of(List.of(personView.call(q)))
37 ));
38 }
39
40 @Test
41 void flatNotEqualsTest() {
42 var actual = Dnf.builder("Actual").parameters(p).clause(friendView.call(p, q)).build();
43
44 var assertion = structurallyEqualTo(
45 List.of(new SymbolicParameter(q, ParameterDirection.OUT)),
46 List.of(List.of(friendView.call(q, q)))
47 );
48 assertThrows(AssertionError.class, () -> assertThat(actual, assertion));
49 }
50
51 @Test
52 void deepEqualsTest() {
53 var actual = Dnf.builder("Actual").parameters(q).clause(
54 Dnf.builder("Actual2").parameters(p).clause(personView.call(p)).build().call(q)
55 ).build();
56
57 assertThat(actual, structurallyEqualTo(
58 List.of(new SymbolicParameter(q, ParameterDirection.OUT)),
59 List.of(
60 List.of(
61 Dnf.builder("Expected2").parameters(p).clause(personView.call(p)).build().call(q)
62 )
63 )
64 ));
65 }
66
67 @Test
68 void deepNotEqualsTest() {
69 var actual = Dnf.builder("Actual").parameter(q).clause(
70 Dnf.builder("Actual2").parameters(p).clause(friendView.call(p, q)).build().call(q)
71 ).build();
72
73 var assertion = structurallyEqualTo(
74 List.of(new SymbolicParameter(q, ParameterDirection.OUT)),
75 List.of(
76 List.of(
77 Dnf.builder("Expected2")
78 .parameters(p)
79 .clause(friendView.call(p, p))
80 .build()
81 .call(q)
82 )
83 )
84 );
85 var error = assertThrows(AssertionError.class, () -> assertThat(actual, assertion));
86 assertThat(error.getMessage(), allOf(containsString("Expected2"), containsString("Actual2")));
87 }
88
89 @Test
90 void parameterListLengthMismatchTest() {
91 var actual = Dnf.builder("Actual").parameters(p, q).clause(
92 friendView.call(p, q)
93 ).build();
94
95 var assertion = structurallyEqualTo(
96 List.of(new SymbolicParameter(p, ParameterDirection.OUT)),
97 List.of(List.of(friendView.call(p, p)))
98 );
99
100 assertThrows(AssertionError.class, () -> assertThat(actual, assertion));
101 }
102
103 @Test
104 void parameterDirectionMismatchTest() {
105 var actual = Dnf.builder("Actual").parameter(p, ParameterDirection.IN).clause(
106 personView.call(p)
107 ).build();
108
109 var assertion = structurallyEqualTo(
110 List.of(new SymbolicParameter(p, ParameterDirection.OUT)),
111 List.of(List.of(personView.call(p)))
112 );
113
114 assertThrows(AssertionError.class, () -> assertThat(actual, assertion));
115 }
116
117 @Test
118 void clauseCountMismatchTest() {
119 var actual = Dnf.builder("Actual").parameters(p, q).clause(
120 friendView.call(p, q)
121 ).build();
122
123 var assertion = structurallyEqualTo(
124 List.of(
125 new SymbolicParameter(p, ParameterDirection.OUT),
126 new SymbolicParameter(q, ParameterDirection.OUT)
127 ),
128 List.of(
129 List.of(friendView.call(p, q)),
130 List.of(friendView.call(q, p))
131 )
132 );
133
134 assertThrows(AssertionError.class, () -> assertThat(actual, assertion));
135 }
136
137 @Test
138 void literalCountMismatchTest() {
139 var actual = Dnf.builder("Actual").parameters(p, q).clause(
140 friendView.call(p, q)
141 ).build();
142
143 var assertion = structurallyEqualTo(
144 List.of(
145 new SymbolicParameter(p, ParameterDirection.OUT),
146 new SymbolicParameter(q, ParameterDirection.OUT)
147 ),
148 List.of(
149 List.of(friendView.call(p, q), friendView.call(q, p))
150 )
151 );
152
153 assertThrows(AssertionError.class, () -> assertThat(actual, assertion));
154 }
155}