aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/language/src/test
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2022-10-30 19:27:34 -0400
committerLibravatar Kristóf Marussy <kristof@marussy.com>2022-11-05 19:41:17 +0100
commit960af83c7c1cb871da03b9ac4ec6f44c94e78a1d (patch)
tree7d37ee007ee2d3b031d62ca892920d326758f438 /subprojects/language/src/test
parentrefactor: DNF query builder (diff)
downloadrefinery-960af83c7c1cb871da03b9ac4ec6f44c94e78a1d.tar.gz
refinery-960af83c7c1cb871da03b9ac4ec6f44c94e78a1d.tar.zst
refinery-960af83c7c1cb871da03b9ac4ec6f44c94e78a1d.zip
refactor: DNF atoms
Restore count != capability. Still needs semantics and tests for count atoms over partial models.
Diffstat (limited to 'subprojects/language/src/test')
-rw-r--r--subprojects/language/src/test/java/tools/refinery/language/tests/utils/SymbolCollectorTest.java47
1 files changed, 31 insertions, 16 deletions
diff --git a/subprojects/language/src/test/java/tools/refinery/language/tests/utils/SymbolCollectorTest.java b/subprojects/language/src/test/java/tools/refinery/language/tests/utils/SymbolCollectorTest.java
index e2e3218c..a05f3335 100644
--- a/subprojects/language/src/test/java/tools/refinery/language/tests/utils/SymbolCollectorTest.java
+++ b/subprojects/language/src/test/java/tools/refinery/language/tests/utils/SymbolCollectorTest.java
@@ -12,6 +12,7 @@ import org.junit.jupiter.params.provider.MethodSource;
12import tools.refinery.language.model.problem.*; 12import tools.refinery.language.model.problem.*;
13import tools.refinery.language.model.tests.utils.ProblemParseHelper; 13import tools.refinery.language.model.tests.utils.ProblemParseHelper;
14import tools.refinery.language.tests.ProblemInjectorProvider; 14import tools.refinery.language.tests.ProblemInjectorProvider;
15import tools.refinery.language.utils.ContainmentRole;
15import tools.refinery.language.utils.ProblemDesugarer; 16import tools.refinery.language.utils.ProblemDesugarer;
16 17
17import java.util.stream.Stream; 18import java.util.stream.Stream;
@@ -61,7 +62,7 @@ class SymbolCollectorTest {
61 assertThat(collectedSymbols.relations(), hasKey(classDeclaration)); 62 assertThat(collectedSymbols.relations(), hasKey(classDeclaration));
62 var classInfo = collectedSymbols.relations().get(classDeclaration); 63 var classInfo = collectedSymbols.relations().get(classDeclaration);
63 assertThat(classInfo.parameters(), hasSize(1)); 64 assertThat(classInfo.parameters(), hasSize(1));
64 assertThat(classInfo.kind(), is(PredicateKind.CONTAINED)); 65 assertThat(classInfo.containmentRole(), is(ContainmentRole.CONTAINED));
65 assertThat(classInfo.hasDefinition(), is(false)); 66 assertThat(classInfo.hasDefinition(), is(false));
66 var newNode = classDeclaration.getNewNode(); 67 var newNode = classDeclaration.getNewNode();
67 assertThat(collectedSymbols.nodes(), hasKey(newNode)); 68 assertThat(collectedSymbols.nodes(), hasKey(newNode));
@@ -96,11 +97,11 @@ class SymbolCollectorTest {
96 var barInfo = collectedSymbols.relations().get(barReference); 97 var barInfo = collectedSymbols.relations().get(barReference);
97 var quuxReference = fooClass.reference("quux"); 98 var quuxReference = fooClass.reference("quux");
98 var quuxInfo = collectedSymbols.relations().get(quuxReference); 99 var quuxInfo = collectedSymbols.relations().get(quuxReference);
99 assertThat(barInfo.kind(), is(PredicateKind.DEFAULT)); 100 assertThat(barInfo.containmentRole(), is(ContainmentRole.NONE));
100 assertThat(barInfo.opposite(), is(quuxReference)); 101 assertThat(barInfo.opposite(), is(quuxReference));
101 assertThat(barInfo.multiplicity(), is(instanceOf(UnboundedMultiplicity.class))); 102 assertThat(barInfo.multiplicity(), is(instanceOf(UnboundedMultiplicity.class)));
102 assertThat(barInfo.hasDefinition(), is(false)); 103 assertThat(barInfo.hasDefinition(), is(false));
103 assertThat(quuxInfo.kind(), is(PredicateKind.DEFAULT)); 104 assertThat(quuxInfo.containmentRole(), is(ContainmentRole.NONE));
104 assertThat(quuxInfo.opposite(), is(barReference)); 105 assertThat(quuxInfo.opposite(), is(barReference));
105 assertThat(quuxInfo.multiplicity(), is(instanceOf(ExactMultiplicity.class))); 106 assertThat(quuxInfo.multiplicity(), is(instanceOf(ExactMultiplicity.class)));
106 assertThat(quuxInfo.multiplicity(), hasProperty("exactValue", is(1))); 107 assertThat(quuxInfo.multiplicity(), hasProperty("exactValue", is(1)));
@@ -115,8 +116,8 @@ class SymbolCollectorTest {
115 } 116 }
116 """); 117 """);
117 var collectedSymbols = desugarer.collectSymbols(problem.get()); 118 var collectedSymbols = desugarer.collectSymbols(problem.get());
118 assertThat(collectedSymbols.relations().get(problem.findClass("Foo").reference("bar")).kind(), 119 assertThat(collectedSymbols.relations().get(problem.findClass("Foo").reference("bar")).containmentRole(),
119 is(PredicateKind.CONTAINMENT)); 120 is(ContainmentRole.CONTAINMENT));
120 } 121 }
121 122
122 @Test 123 @Test
@@ -127,8 +128,8 @@ class SymbolCollectorTest {
127 } 128 }
128 """); 129 """);
129 var collectedSymbols = desugarer.collectSymbols(problem.get()); 130 var collectedSymbols = desugarer.collectSymbols(problem.get());
130 assertThat(collectedSymbols.relations().get(problem.findClass("Foo").reference("bar")).kind(), 131 assertThat(collectedSymbols.relations().get(problem.findClass("Foo").reference("bar")).containmentRole(),
131 is(PredicateKind.CONTAINMENT)); 132 is(ContainmentRole.CONTAINMENT));
132 } 133 }
133 134
134 @Test 135 @Test
@@ -141,27 +142,27 @@ class SymbolCollectorTest {
141 var collectedSymbols = desugarer.collectSymbols(problem.get()); 142 var collectedSymbols = desugarer.collectSymbols(problem.get());
142 var enumDeclaration = problem.findEnum("Foo"); 143 var enumDeclaration = problem.findEnum("Foo");
143 var enumInfo = collectedSymbols.relations().get(enumDeclaration.get()); 144 var enumInfo = collectedSymbols.relations().get(enumDeclaration.get());
144 assertThat(enumInfo.kind(), is(PredicateKind.DEFAULT)); 145 assertThat(enumInfo.containmentRole(), is(ContainmentRole.NONE));
145 assertThat(enumInfo.assertions(), assertsNode(enumDeclaration.literal("bar"), LogicValue.TRUE)); 146 assertThat(enumInfo.assertions(), assertsNode(enumDeclaration.literal("bar"), LogicValue.TRUE));
146 assertThat(enumInfo.assertions(), assertsNode(enumDeclaration.literal("quux"), LogicValue.TRUE)); 147 assertThat(enumInfo.assertions(), assertsNode(enumDeclaration.literal("quux"), LogicValue.TRUE));
147 } 148 }
148 149
149 @ParameterizedTest 150 @ParameterizedTest
150 @MethodSource 151 @MethodSource
151 void predicateTest(String keyword, PredicateKind kind) { 152 void predicateTest(String keyword, ContainmentRole containmentRole) {
152 var problem = parseHelper.parse(keyword + " foo(node x) <-> domain(x); data(x)."); 153 var problem = parseHelper.parse(keyword + " foo(node x) <-> domain(x); data(x).");
153 var collectedSymbols = desugarer.collectSymbols(problem.get()); 154 var collectedSymbols = desugarer.collectSymbols(problem.get());
154 var predicateInfo = collectedSymbols.relations().get(problem.pred("foo").get()); 155 var predicateInfo = collectedSymbols.relations().get(problem.pred("foo").get());
155 assertThat(predicateInfo.kind(), is(kind)); 156 assertThat(predicateInfo.containmentRole(), is(containmentRole));
156 assertThat(predicateInfo.parameters(), hasSize(1)); 157 assertThat(predicateInfo.parameters(), hasSize(1));
157 assertThat(predicateInfo.bodies(), hasSize(2)); 158 assertThat(predicateInfo.bodies(), hasSize(2));
158 assertThat(predicateInfo.hasDefinition(), is(true)); 159 assertThat(predicateInfo.hasDefinition(), is(true));
159 } 160 }
160 161
161 static Stream<Arguments> predicateTest() { 162 static Stream<Arguments> predicateTest() {
162 return Stream.of(Arguments.of("pred", PredicateKind.DEFAULT), Arguments.of("error", PredicateKind.ERROR), 163 return Stream.of(Arguments.of("pred", ContainmentRole.NONE), Arguments.of("error", ContainmentRole.NONE),
163 Arguments.of("contained", PredicateKind.CONTAINED), Arguments.of("containment", 164 Arguments.of("contained", ContainmentRole.CONTAINED), Arguments.of("containment",
164 PredicateKind.CONTAINMENT)); 165 ContainmentRole.CONTAINMENT));
165 } 166 }
166 167
167 @ParameterizedTest 168 @ParameterizedTest
@@ -184,7 +185,7 @@ class SymbolCollectorTest {
184 default foo(a): %s. 185 default foo(a): %s.
185 """.formatted(keyword)); 186 """.formatted(keyword));
186 var collectedSymbols = desugarer.collectSymbols(problem.get()); 187 var collectedSymbols = desugarer.collectSymbols(problem.get());
187 assertThat(collectedSymbols.relations().get(problem.pred("foo").get()).defaultAssertions(), 188 assertThat(collectedSymbols.relations().get(problem.pred("foo").get()).assertions(),
188 assertsNode(problem.node("a"), value)); 189 assertsNode(problem.node("a"), value));
189 } 190 }
190 191
@@ -254,6 +255,10 @@ class SymbolCollectorTest {
254 LogicValue.UNKNOWN)); 255 LogicValue.UNKNOWN));
255 } 256 }
256 257
258 static Stream<Arguments> valueTypes() {
259 return Stream.of(Arguments.of("3", "int"), Arguments.of("3.14", "real"), Arguments.of("\"foo\"", "string"));
260 }
261
257 @Test 262 @Test
258 void invalidProblemTest() { 263 void invalidProblemTest() {
259 var problem = parseHelper.parse(""" 264 var problem = parseHelper.parse("""
@@ -265,8 +270,18 @@ class SymbolCollectorTest {
265 assertDoesNotThrow(() -> desugarer.collectSymbols(problem)); 270 assertDoesNotThrow(() -> desugarer.collectSymbols(problem));
266 } 271 }
267 272
268 static Stream<Arguments> valueTypes() { 273 @Test
269 return Stream.of(Arguments.of("3", "int"), Arguments.of("3.14", "real"), Arguments.of("\"foo\"", "string")); 274 void errorAssertionTest() {
275 var problem = parseHelper.parse("""
276 error foo(node a, node b) <-> equals(a, b).
277 """);
278 var collectedSymbols = desugarer.collectSymbols(problem.get());
279 var fooInfo = collectedSymbols.relations().get(problem.pred("foo").get());
280 assertThat(fooInfo.assertions(), hasSize(1));
281 var assertion = fooInfo.assertions().stream().findFirst().orElseThrow();
282 assertThat(assertion.getValue(), is(LogicValue.FALSE));
283 assertThat(assertion.getArguments(), hasSize(2));
284 assertThat(assertion.getArguments(), everyItem(instanceOf(WildcardAssertionArgument.class)));
270 } 285 }
271 286
272 private static Matcher<Iterable<? super Assertion>> assertsNode(Node node, LogicValue value) { 287 private static Matcher<Iterable<? super Assertion>> assertsNode(Node node, LogicValue value) {