diff options
author | Kristóf Marussy <kristof@marussy.com> | 2023-12-06 23:52:07 +0100 |
---|---|---|
committer | Kristóf Marussy <kristof@marussy.com> | 2023-12-08 21:48:48 +0100 |
commit | d40ec70132ebb324873cb8c3868eb65309f46f8c (patch) | |
tree | 31c9ca6e5454f61868b4123574b723b33ecc704e /subprojects/store-reasoning/src/test/java | |
parent | chore: upgrade to Eclipse 2023-12 (diff) | |
download | refinery-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/java')
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; | |||
8 | import org.junit.jupiter.api.Test; | 8 | import org.junit.jupiter.api.Test; |
9 | import tools.refinery.store.reasoning.representation.PartialRelation; | 9 | import tools.refinery.store.reasoning.representation.PartialRelation; |
10 | import tools.refinery.store.reasoning.translator.TranslationException; | 10 | import tools.refinery.store.reasoning.translator.TranslationException; |
11 | import tools.refinery.store.reasoning.translator.multiplicity.ConstrainedMultiplicity; | ||
12 | import tools.refinery.store.representation.cardinality.CardinalityIntervals; | 11 | import tools.refinery.store.representation.cardinality.CardinalityIntervals; |
13 | 12 | ||
14 | import static org.junit.jupiter.api.Assertions.assertThrows; | 13 | import 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; | |||
16 | import tools.refinery.store.reasoning.seed.ModelSeed; | 16 | import tools.refinery.store.reasoning.seed.ModelSeed; |
17 | import tools.refinery.store.reasoning.translator.containment.ContainmentHierarchyTranslator; | 17 | import tools.refinery.store.reasoning.translator.containment.ContainmentHierarchyTranslator; |
18 | import tools.refinery.store.reasoning.translator.multiobject.MultiObjectTranslator; | 18 | import tools.refinery.store.reasoning.translator.multiobject.MultiObjectTranslator; |
19 | import tools.refinery.store.reasoning.translator.multiplicity.ConstrainedMultiplicity; | ||
20 | import tools.refinery.store.representation.TruthValue; | 19 | import tools.refinery.store.representation.TruthValue; |
21 | import tools.refinery.store.representation.cardinality.CardinalityIntervals; | 20 | import tools.refinery.store.representation.cardinality.CardinalityIntervals; |
22 | import tools.refinery.store.tuple.Tuple; | 21 | import 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) |