aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store-reasoning/src/test
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2023-12-06 23:52:07 +0100
committerLibravatar Kristóf Marussy <kristof@marussy.com>2023-12-08 21:48:48 +0100
commitd40ec70132ebb324873cb8c3868eb65309f46f8c (patch)
tree31c9ca6e5454f61868b4123574b723b33ecc704e /subprojects/store-reasoning/src/test
parentchore: upgrade to Eclipse 2023-12 (diff)
downloadrefinery-d40ec70132ebb324873cb8c3868eb65309f46f8c.tar.gz
refinery-d40ec70132ebb324873cb8c3868eb65309f46f8c.tar.zst
refinery-d40ec70132ebb324873cb8c3868eb65309f46f8c.zip
feat: state-based store for cross references
Efficiently store cross references even if default ref(*, *): false. Uses propagation rules instead of view queries to reason about type constraints and multiplicity.
Diffstat (limited to 'subprojects/store-reasoning/src/test')
-rw-r--r--subprojects/store-reasoning/src/test/java/tools/refinery/store/reasoning/translator/metamodel/MetamodelBuilderTest.java34
-rw-r--r--subprojects/store-reasoning/src/test/java/tools/refinery/store/reasoning/translator/metamodel/MetamodelTest.java30
2 files changed, 46 insertions, 18 deletions
diff --git a/subprojects/store-reasoning/src/test/java/tools/refinery/store/reasoning/translator/metamodel/MetamodelBuilderTest.java b/subprojects/store-reasoning/src/test/java/tools/refinery/store/reasoning/translator/metamodel/MetamodelBuilderTest.java
index 0f1a1006..ba6ba6da 100644
--- a/subprojects/store-reasoning/src/test/java/tools/refinery/store/reasoning/translator/metamodel/MetamodelBuilderTest.java
+++ b/subprojects/store-reasoning/src/test/java/tools/refinery/store/reasoning/translator/metamodel/MetamodelBuilderTest.java
@@ -8,7 +8,6 @@ package tools.refinery.store.reasoning.translator.metamodel;
8import org.junit.jupiter.api.Test; 8import org.junit.jupiter.api.Test;
9import tools.refinery.store.reasoning.representation.PartialRelation; 9import tools.refinery.store.reasoning.representation.PartialRelation;
10import tools.refinery.store.reasoning.translator.TranslationException; 10import tools.refinery.store.reasoning.translator.TranslationException;
11import tools.refinery.store.reasoning.translator.multiplicity.ConstrainedMultiplicity;
12import tools.refinery.store.representation.cardinality.CardinalityIntervals; 11import tools.refinery.store.representation.cardinality.CardinalityIntervals;
13 12
14import static org.junit.jupiter.api.Assertions.assertThrows; 13import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -24,8 +23,13 @@ class MetamodelBuilderTest {
24 var builder = Metamodel.builder() 23 var builder = Metamodel.builder()
25 .type(university) 24 .type(university)
26 .type(course) 25 .type(course)
27 .reference(courses, university, course, location) 26 .reference(courses, referenceBuilder -> referenceBuilder
28 .reference(location, course, university); 27 .source(university)
28 .target(course)
29 .opposite(location))
30 .reference(location, referenceBuilder -> referenceBuilder
31 .source(course)
32 .target(university));
29 33
30 assertThrows(TranslationException.class, builder::build); 34 assertThrows(TranslationException.class, builder::build);
31 } 35 }
@@ -35,8 +39,14 @@ class MetamodelBuilderTest {
35 var builder = Metamodel.builder() 39 var builder = Metamodel.builder()
36 .type(university) 40 .type(university)
37 .type(course) 41 .type(course)
38 .reference(courses, university, course, location) 42 .reference(courses, referenceBuilder -> referenceBuilder
39 .reference(location, course, course, courses); 43 .source(university)
44 .target(course)
45 .opposite(location))
46 .reference(location, referenceBuilder -> referenceBuilder
47 .source(course)
48 .target(course)
49 .opposite(courses));
40 50
41 assertThrows(TranslationException.class, builder::build); 51 assertThrows(TranslationException.class, builder::build);
42 } 52 }
@@ -48,10 +58,16 @@ class MetamodelBuilderTest {
48 var builder = Metamodel.builder() 58 var builder = Metamodel.builder()
49 .type(university) 59 .type(university)
50 .type(course) 60 .type(course)
51 .reference(courses, university, true, course, location) 61 .reference(courses, referenceBuilder -> referenceBuilder
52 .reference(location, course, 62 .containment(true)
53 ConstrainedMultiplicity.of(CardinalityIntervals.atLeast(2), invalidMultiplicity), 63 .source(university)
54 university, courses); 64 .target(course)
65 .opposite(location))
66 .reference(location, referenceBuilder -> referenceBuilder
67 .source(course)
68 .multiplicity(CardinalityIntervals.atLeast(2), invalidMultiplicity)
69 .target(university)
70 .opposite(courses));
55 71
56 assertThrows(TranslationException.class, builder::build); 72 assertThrows(TranslationException.class, builder::build);
57 } 73 }
diff --git a/subprojects/store-reasoning/src/test/java/tools/refinery/store/reasoning/translator/metamodel/MetamodelTest.java b/subprojects/store-reasoning/src/test/java/tools/refinery/store/reasoning/translator/metamodel/MetamodelTest.java
index 6c2f55af..88e6a4d7 100644
--- a/subprojects/store-reasoning/src/test/java/tools/refinery/store/reasoning/translator/metamodel/MetamodelTest.java
+++ b/subprojects/store-reasoning/src/test/java/tools/refinery/store/reasoning/translator/metamodel/MetamodelTest.java
@@ -16,7 +16,6 @@ import tools.refinery.store.reasoning.representation.PartialRelation;
16import tools.refinery.store.reasoning.seed.ModelSeed; 16import tools.refinery.store.reasoning.seed.ModelSeed;
17import tools.refinery.store.reasoning.translator.containment.ContainmentHierarchyTranslator; 17import tools.refinery.store.reasoning.translator.containment.ContainmentHierarchyTranslator;
18import tools.refinery.store.reasoning.translator.multiobject.MultiObjectTranslator; 18import tools.refinery.store.reasoning.translator.multiobject.MultiObjectTranslator;
19import tools.refinery.store.reasoning.translator.multiplicity.ConstrainedMultiplicity;
20import tools.refinery.store.representation.TruthValue; 19import tools.refinery.store.representation.TruthValue;
21import tools.refinery.store.representation.cardinality.CardinalityIntervals; 20import tools.refinery.store.representation.cardinality.CardinalityIntervals;
22import tools.refinery.store.tuple.Tuple; 21import tools.refinery.store.tuple.Tuple;
@@ -45,12 +44,23 @@ class MetamodelTest {
45 .type(teacher, person) 44 .type(teacher, person)
46 .type(university) 45 .type(university)
47 .type(course) 46 .type(course)
48 .reference(courses, university, true, course, location) 47 .reference(courses, builder -> builder
49 .reference(location, course, university, courses) 48 .containment(true)
50 .reference(lecturer, course, 49 .source(university)
51 ConstrainedMultiplicity.of(CardinalityIntervals.ONE, invalidLecturerCount), teacher) 50 .target(course)
52 .reference(enrolledStudents, course, 51 .opposite(location))
53 ConstrainedMultiplicity.of(CardinalityIntervals.SOME, invalidStudentCount), student) 52 .reference(location, builder -> builder
53 .source(course)
54 .target(university)
55 .opposite(courses))
56 .reference(lecturer, builder -> builder
57 .source(course)
58 .multiplicity(CardinalityIntervals.ONE, invalidLecturerCount)
59 .target(teacher))
60 .reference(enrolledStudents, builder -> builder
61 .source(course)
62 .multiplicity(CardinalityIntervals.SOME, invalidStudentCount)
63 .target(student))
54 .build(); 64 .build();
55 65
56 var seed = ModelSeed.builder(5) 66 var seed = ModelSeed.builder(5)
@@ -105,10 +115,12 @@ class MetamodelTest {
105 var metamodel = Metamodel.builder() 115 var metamodel = Metamodel.builder()
106 .type(university) 116 .type(university)
107 .type(course) 117 .type(course)
108 .reference(courses, university, true, course) 118 .reference(courses, builder -> builder
119 .containment(true)
120 .source(university)
121 .target(course))
109 .build(); 122 .build();
110 123
111
112 var seed = ModelSeed.builder(4) 124 var seed = ModelSeed.builder(4)
113 .seed(MultiObjectTranslator.COUNT_SYMBOL, builder -> builder 125 .seed(MultiObjectTranslator.COUNT_SYMBOL, builder -> builder
114 .reducedValue(CardinalityIntervals.ONE) 126 .reducedValue(CardinalityIntervals.ONE)