aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store-query/src/test/java/tools/refinery/store/query/tests/StructurallyEqualToTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/store-query/src/test/java/tools/refinery/store/query/tests/StructurallyEqualToTest.java')
-rw-r--r--subprojects/store-query/src/test/java/tools/refinery/store/query/tests/StructurallyEqualToTest.java77
1 files changed, 77 insertions, 0 deletions
diff --git a/subprojects/store-query/src/test/java/tools/refinery/store/query/tests/StructurallyEqualToTest.java b/subprojects/store-query/src/test/java/tools/refinery/store/query/tests/StructurallyEqualToTest.java
new file mode 100644
index 00000000..0cda22df
--- /dev/null
+++ b/subprojects/store-query/src/test/java/tools/refinery/store/query/tests/StructurallyEqualToTest.java
@@ -0,0 +1,77 @@
1package tools.refinery.store.query.tests;
2
3import org.junit.jupiter.api.Test;
4import tools.refinery.store.query.Dnf;
5import tools.refinery.store.query.Variable;
6import tools.refinery.store.query.view.KeyOnlyRelationView;
7import tools.refinery.store.representation.Symbol;
8
9import static org.hamcrest.CoreMatchers.containsString;
10import static org.hamcrest.MatcherAssert.assertThat;
11import static org.junit.jupiter.api.Assertions.assertThrows;
12import static tools.refinery.store.query.tests.QueryMatchers.structurallyEqualTo;
13
14class StructurallyEqualToTest {
15 @Test
16 void flatEqualsTest() {
17 var p = new Variable("p");
18 var q = new Variable("q");
19 var person = new Symbol<>("Person", 1, Boolean.class, false);
20 var personView = new KeyOnlyRelationView<>(person);
21
22 var expected = Dnf.builder("Expected").parameters(q).clause(personView.call(q)).build();
23 var actual = Dnf.builder("Actual").parameters(p).clause(personView.call(p)).build();
24
25 assertThat(actual, structurallyEqualTo(expected));
26 }
27
28 @Test
29 void flatNotEqualsTest() {
30 var p = new Variable("p");
31 var q = new Variable("q");
32 var person = new Symbol<>("Person", 1, Boolean.class, false);
33 var personView = new KeyOnlyRelationView<>(person);
34
35 var expected = Dnf.builder("Expected").parameters(q).clause(personView.call(q)).build();
36 var actual = Dnf.builder("Actual").parameters(p).clause(personView.call(q)).build();
37
38 var assertion = structurallyEqualTo(expected);
39 assertThrows(AssertionError.class, () -> assertThat(actual, assertion));
40 }
41
42 @Test
43 void deepEqualsTest() {
44 var p = new Variable("p");
45 var q = new Variable("q");
46 var person = new Symbol<>("Person", 1, Boolean.class, false);
47 var personView = new KeyOnlyRelationView<>(person);
48
49 var expected = Dnf.builder("Expected").parameters(q).clause(
50 Dnf.builder("Expected2").parameters(p).clause(personView.call(p)).build().call(q)
51 ).build();
52 var actual = Dnf.builder("Actual").parameters(q).clause(
53 Dnf.builder("Actual2").parameters(p).clause(personView.call(p)).build().call(q)
54 ).build();
55
56 assertThat(actual, structurallyEqualTo(expected));
57 }
58
59 @Test
60 void deepNotEqualsTest() {
61 var p = new Variable("p");
62 var q = new Variable("q");
63 var person = new Symbol<>("Person", 1, Boolean.class, false);
64 var personView = new KeyOnlyRelationView<>(person);
65
66 var expected = Dnf.builder("Expected").parameters(q).clause(
67 Dnf.builder("Expected2").parameters(p).clause(personView.call(p)).build().call(q)
68 ).build();
69 var actual = Dnf.builder("Actual").parameters(q).clause(
70 Dnf.builder("Actual2").parameters(p).clause(personView.call(q)).build().call(q)
71 ).build();
72
73 var assertion = structurallyEqualTo(expected);
74 var error = assertThrows(AssertionError.class, () -> assertThat(actual, assertion));
75 assertThat(error.getMessage(), containsString(" called from Expected "));
76 }
77}