diff options
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.java | 155 |
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 | */ | ||
6 | package tools.refinery.logic.tests; | ||
7 | |||
8 | import org.junit.jupiter.api.Test; | ||
9 | import tools.refinery.logic.Constraint; | ||
10 | import tools.refinery.logic.dnf.Dnf; | ||
11 | import tools.refinery.logic.dnf.SymbolicParameter; | ||
12 | import tools.refinery.logic.term.NodeVariable; | ||
13 | import tools.refinery.logic.term.ParameterDirection; | ||
14 | import tools.refinery.logic.term.Variable; | ||
15 | |||
16 | import java.util.List; | ||
17 | |||
18 | import static org.hamcrest.CoreMatchers.containsString; | ||
19 | import static org.hamcrest.MatcherAssert.assertThat; | ||
20 | import static org.hamcrest.Matchers.allOf; | ||
21 | import static org.junit.jupiter.api.Assertions.assertThrows; | ||
22 | import static tools.refinery.logic.tests.QueryMatchers.structurallyEqualTo; | ||
23 | |||
24 | class 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 | } | ||