diff options
author | OszkarSemerath <semerath@mit.bme.hu> | 2023-09-05 07:59:17 +0200 |
---|---|---|
committer | OszkarSemerath <semerath@mit.bme.hu> | 2023-09-05 14:16:55 +0200 |
commit | a00a2a961accd8ebbe34c3c1e50b6fa782e86ca4 (patch) | |
tree | 677d5d1b75f9c4781b225ea53b5a8de8a49e9342 /subprojects/store-dse | |
parent | restructured DSE framework, failing build (diff) | |
download | refinery-a00a2a961accd8ebbe34c3c1e50b6fa782e86ca4.tar.gz refinery-a00a2a961accd8ebbe34c3c1e50b6fa782e86ca4.tar.zst refinery-a00a2a961accd8ebbe34c3c1e50b6fa782e86ca4.zip |
restructured DSE framework, failing build
Diffstat (limited to 'subprojects/store-dse')
5 files changed, 1188 insertions, 1225 deletions
diff --git a/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/statespace/internal/CompleteEquivalenceClassStore.java b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/statespace/internal/CompleteEquivalenceClassStore.java index 1555c3be..925e09a3 100644 --- a/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/statespace/internal/CompleteEquivalenceClassStore.java +++ b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/statespace/internal/CompleteEquivalenceClassStore.java | |||
@@ -7,9 +7,6 @@ package tools.refinery.store.dse.transition.statespace.internal; | |||
7 | 7 | ||
8 | import org.eclipse.collections.impl.map.mutable.primitive.IntObjectHashMap; | 8 | import org.eclipse.collections.impl.map.mutable.primitive.IntObjectHashMap; |
9 | import tools.refinery.store.dse.transition.VersionWithObjectiveValue; | 9 | import tools.refinery.store.dse.transition.VersionWithObjectiveValue; |
10 | import tools.refinery.store.dse.transition.statespace.ActivationStore; | ||
11 | import tools.refinery.store.dse.transition.statespace.ObjectivePriorityQueue; | ||
12 | import tools.refinery.store.dse.transition.statespace.SolutionStore; | ||
13 | import tools.refinery.store.dse.transition.statespace.EquivalenceClassStore; | 10 | import tools.refinery.store.dse.transition.statespace.EquivalenceClassStore; |
14 | import tools.refinery.store.statecoding.StateCoderResult; | 11 | import tools.refinery.store.statecoding.StateCoderResult; |
15 | import tools.refinery.store.statecoding.StateCoderStoreAdapter; | 12 | import tools.refinery.store.statecoding.StateCoderStoreAdapter; |
@@ -68,8 +65,8 @@ public abstract class CompleteEquivalenceClassStore extends AbstractEquivalenceC | |||
68 | if (unresolvedSimilarity == null) { | 65 | if (unresolvedSimilarity == null) { |
69 | return; | 66 | return; |
70 | } | 67 | } |
71 | var outcome = this.stateCoderStoreAdapter.checkEquivalence(unresolvedSimilarity.get(0), | 68 | var outcome = this.stateCoderStoreAdapter.checkEquivalence(unresolvedSimilarity.get(0).version(), |
72 | unresolvedSimilarity.get(1)); | 69 | unresolvedSimilarity.get(1).version()); |
73 | if (outcome != StateEquivalenceChecker.EquivalenceResult.ISOMORPHIC) { | 70 | if (outcome != StateEquivalenceChecker.EquivalenceResult.ISOMORPHIC) { |
74 | delegate(unresolvedSimilarity.get(1), unresolvedSimilarity.activationSizes, unresolvedSimilarity.accept); | 71 | delegate(unresolvedSimilarity.get(1), unresolvedSimilarity.activationSizes, unresolvedSimilarity.accept); |
75 | } | 72 | } |
diff --git a/subprojects/store-dse/src/test/java/tools/refinery/store/dse/CRAExamplesTest.java b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/CRAExamplesTest.java index b0b416e1..36517709 100644 --- a/subprojects/store-dse/src/test/java/tools/refinery/store/dse/CRAExamplesTest.java +++ b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/CRAExamplesTest.java | |||
@@ -5,29 +5,20 @@ | |||
5 | */ | 5 | */ |
6 | package tools.refinery.store.dse; | 6 | package tools.refinery.store.dse; |
7 | 7 | ||
8 | import org.junit.jupiter.api.Disabled; | 8 | import tools.refinery.store.dse.transition.TransformationRule; |
9 | import org.junit.jupiter.api.Test; | ||
10 | import tools.refinery.store.dse.objectives.AlwaysSatisfiedRandomHardObjective; | ||
11 | import tools.refinery.store.dse.transition.DesignSpaceExplorationAdapter; | ||
12 | import tools.refinery.store.model.ModelStore; | ||
13 | import tools.refinery.store.query.ModelQueryAdapter; | ||
14 | import tools.refinery.store.query.dnf.Query; | 9 | import tools.refinery.store.query.dnf.Query; |
15 | import tools.refinery.store.query.dnf.RelationalQuery; | 10 | import tools.refinery.store.query.dnf.RelationalQuery; |
16 | import tools.refinery.store.dse.transition.TransformationRule; | ||
17 | import tools.refinery.store.dse.strategy.BestFirstStrategy; | ||
18 | import tools.refinery.store.query.viatra.ViatraModelQueryAdapter; | ||
19 | import tools.refinery.store.query.view.AnySymbolView; | 11 | import tools.refinery.store.query.view.AnySymbolView; |
20 | import tools.refinery.store.query.view.KeyOnlyView; | 12 | import tools.refinery.store.query.view.KeyOnlyView; |
21 | import tools.refinery.store.representation.Symbol; | 13 | import tools.refinery.store.representation.Symbol; |
22 | import tools.refinery.store.tuple.Tuple; | 14 | import tools.refinery.store.tuple.Tuple; |
23 | import tools.refinery.visualization.ModelVisualizerAdapter; | ||
24 | import tools.refinery.visualization.internal.FileFormat; | ||
25 | 15 | ||
26 | import java.util.List; | 16 | import java.util.List; |
27 | 17 | ||
28 | import static tools.refinery.store.query.literal.Literals.not; | 18 | import static tools.refinery.store.query.literal.Literals.not; |
29 | 19 | ||
30 | class CRAExamplesTest { | 20 | class CRAExamplesTest { |
21 | |||
31 | private static final Symbol<String> name = Symbol.of("Name", 1, String.class); | 22 | private static final Symbol<String> name = Symbol.of("Name", 1, String.class); |
32 | 23 | ||
33 | // private static final Symbol<Boolean> classModel = Symbol.of("ClassModel", 1); | 24 | // private static final Symbol<Boolean> classModel = Symbol.of("ClassModel", 1); |
@@ -130,42 +121,42 @@ class CRAExamplesTest { | |||
130 | }); | 121 | }); |
131 | }); | 122 | }); |
132 | 123 | ||
133 | private static final TransformationRule deleteEmptyClassRule = new TransformationRule("DeleteEmptyClass", | 124 | // private static final TransformationRule deleteEmptyClassRule = new TransformationRule("DeleteEmptyClass", |
134 | deleteEmptyClassPrecondition, | 125 | // deleteEmptyClassPrecondition, |
135 | (model) -> { | 126 | // (model) -> { |
136 | // var classesInterpretation = model.getInterpretation(classes); | 127 | //// var classesInterpretation = model.getInterpretation(classes); |
137 | var classElementInterpretation = model.getInterpretation(classElement); | 128 | // var classElementInterpretation = model.getInterpretation(classElement); |
138 | return ((Tuple activation) -> { | 129 | // return ((Tuple activation) -> { |
139 | // TODO: can we move dseAdapter outside? | 130 | // // TODO: can we move dseAdapter outside? |
140 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 131 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
141 | // var modelElement = activation.get(0); | 132 | //// var modelElement = activation.get(0); |
142 | var classElement = activation.get(0); | 133 | // var classElement = activation.get(0); |
143 | 134 | // | |
144 | // classesInterpretation.put(Tuple.of(modelElement, classElement), false); | 135 | //// classesInterpretation.put(Tuple.of(modelElement, classElement), false); |
145 | classElementInterpretation.put(Tuple.of(classElement), false); | 136 | // classElementInterpretation.put(Tuple.of(classElement), false); |
146 | dseAdapter.deleteObject(Tuple.of(classElement)); | 137 | // dseAdapter.deleteObject(Tuple.of(classElement)); |
147 | }); | 138 | // }); |
148 | }); | 139 | // }); |
149 | 140 | ||
150 | private static final TransformationRule createClassRule = new TransformationRule("CreateClass", | 141 | // private static final TransformationRule createClassRule = new TransformationRule("CreateClass", |
151 | createClassPrecondition, | 142 | // createClassPrecondition, |
152 | (model) -> { | 143 | // (model) -> { |
153 | var classElementInterpretation = model.getInterpretation(classElement); | 144 | // var classElementInterpretation = model.getInterpretation(classElement); |
154 | // var classesInterpretation = model.getInterpretation(classes); | 145 | //// var classesInterpretation = model.getInterpretation(classes); |
155 | var encapsulatesInterpretation = model.getInterpretation(encapsulates); | 146 | // var encapsulatesInterpretation = model.getInterpretation(encapsulates); |
156 | return ((Tuple activation) -> { | 147 | // return ((Tuple activation) -> { |
157 | // TODO: can we move dseAdapter outside? | 148 | // // TODO: can we move dseAdapter outside? |
158 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 149 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
159 | // var modelElement = activation.get(0); | 150 | //// var modelElement = activation.get(0); |
160 | var feature = activation.get(0); | 151 | // var feature = activation.get(0); |
161 | 152 | // | |
162 | var newClassElement = dseAdapter.createObject(); | 153 | // var newClassElement = dseAdapter.createObject(); |
163 | var newClassElementId = newClassElement.get(0); | 154 | // var newClassElementId = newClassElement.get(0); |
164 | classElementInterpretation.put(newClassElement, true); | 155 | // classElementInterpretation.put(newClassElement, true); |
165 | // classesInterpretation.put(Tuple.of(modelElement, newClassElementId), true); | 156 | //// classesInterpretation.put(Tuple.of(modelElement, newClassElementId), true); |
166 | encapsulatesInterpretation.put(Tuple.of(newClassElementId, feature), true); | 157 | // encapsulatesInterpretation.put(Tuple.of(newClassElementId, feature), true); |
167 | }); | 158 | // }); |
168 | }); | 159 | // }); |
169 | 160 | ||
170 | private static final TransformationRule moveFeatureRule = new TransformationRule("MoveFeature", | 161 | private static final TransformationRule moveFeatureRule = new TransformationRule("MoveFeature", |
171 | moveFeaturePrecondition, | 162 | moveFeaturePrecondition, |
@@ -181,106 +172,106 @@ class CRAExamplesTest { | |||
181 | }); | 172 | }); |
182 | }); | 173 | }); |
183 | 174 | ||
184 | @Test | 175 | // @Test |
185 | @Disabled("This test is only for debugging purposes") | 176 | // @Disabled("This test is only for debugging purposes") |
186 | void craTest() { | 177 | // void craTest() { |
187 | var store = ModelStore.builder() | 178 | // var store = ModelStore.builder() |
188 | .symbols(classElement, encapsulates, classes, features, attribute, method, dataDependency, | 179 | // .symbols(classElement, encapsulates, classes, features, attribute, method, dataDependency, |
189 | functionalDependency, name) | 180 | // functionalDependency, name) |
190 | .with(ViatraModelQueryAdapter.builder() | 181 | // .with(ViatraModelQueryAdapter.builder() |
191 | .queries(feature, assignFeaturePreconditionHelper, assignFeaturePrecondition, | 182 | // .queries(feature, assignFeaturePreconditionHelper, assignFeaturePrecondition, |
192 | deleteEmptyClassPrecondition, createClassPreconditionHelper, createClassPrecondition, | 183 | // deleteEmptyClassPrecondition, createClassPreconditionHelper, createClassPrecondition, |
193 | moveFeaturePrecondition)) | 184 | // moveFeaturePrecondition)) |
194 | .with(ModelVisualizerAdapter.builder() | 185 | // .with(ModelVisualizerAdapter.builder() |
195 | .withOutputpath("test_output") | 186 | // .withOutputpath("test_output") |
196 | .withFormat(FileFormat.DOT) | 187 | // .withFormat(FileFormat.DOT) |
197 | .withFormat(FileFormat.SVG) | 188 | // .withFormat(FileFormat.SVG) |
198 | .saveStates() | 189 | // .saveStates() |
199 | .saveDesignSpace() | 190 | // .saveDesignSpace() |
200 | ) | 191 | // ) |
201 | .with(DesignSpaceExplorationAdapter.builder() | 192 | // .with(DesignSpaceExplorationAdapter.builder() |
202 | .transformations(assignFeatureRule, deleteEmptyClassRule, createClassRule, moveFeatureRule) | 193 | // .transformations(assignFeatureRule, deleteEmptyClassRule, createClassRule, moveFeatureRule) |
203 | .objectives(new AlwaysSatisfiedRandomHardObjective()) | 194 | // .objectives(new AlwaysSatisfiedRandomHardObjective()) |
204 | // .strategy(new DepthFirstStrategy().withDepthLimit(3).continueIfHardObjectivesFulfilled() | 195 | //// .strategy(new DepthFirstStrategy().withDepthLimit(3).continueIfHardObjectivesFulfilled() |
205 | .strategy(new BestFirstStrategy().withDepthLimit(6).continueIfHardObjectivesFulfilled() | 196 | // .strategy(new BestFirstStrategy().withDepthLimit(6).continueIfHardObjectivesFulfilled() |
206 | // .goOnOnlyIfFitnessIsBetter() | 197 | //// .goOnOnlyIfFitnessIsBetter() |
207 | )) | 198 | // )) |
208 | .build(); | 199 | // .build(); |
209 | 200 | // | |
210 | var model = store.createEmptyModel(); | 201 | // var model = store.createEmptyModel(); |
211 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 202 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
212 | // dseAdapter.setRandom(1); | 203 | //// dseAdapter.setRandom(1); |
213 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); | 204 | // var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
214 | 205 | // | |
215 | // var modelInterpretation = model.getInterpretation(classModel); | 206 | //// var modelInterpretation = model.getInterpretation(classModel); |
216 | var nameInterpretation = model.getInterpretation(name); | 207 | // var nameInterpretation = model.getInterpretation(name); |
217 | var methodInterpretation = model.getInterpretation(method); | 208 | // var methodInterpretation = model.getInterpretation(method); |
218 | var attributeInterpretation = model.getInterpretation(attribute); | 209 | // var attributeInterpretation = model.getInterpretation(attribute); |
219 | var dataDependencyInterpretation = model.getInterpretation(dataDependency); | 210 | // var dataDependencyInterpretation = model.getInterpretation(dataDependency); |
220 | var functionalDependencyInterpretation = model.getInterpretation(functionalDependency); | 211 | // var functionalDependencyInterpretation = model.getInterpretation(functionalDependency); |
221 | 212 | // | |
222 | // var modelElement = dseAdapter.createObject(); | 213 | //// var modelElement = dseAdapter.createObject(); |
223 | var method1 = dseAdapter.createObject(); | 214 | // var method1 = dseAdapter.createObject(); |
224 | var method1Id = method1.get(0); | 215 | // var method1Id = method1.get(0); |
225 | var method2 = dseAdapter.createObject(); | 216 | // var method2 = dseAdapter.createObject(); |
226 | var method2Id = method2.get(0); | 217 | // var method2Id = method2.get(0); |
227 | var method3 = dseAdapter.createObject(); | 218 | // var method3 = dseAdapter.createObject(); |
228 | var method3Id = method3.get(0); | 219 | // var method3Id = method3.get(0); |
229 | var method4 = dseAdapter.createObject(); | 220 | // var method4 = dseAdapter.createObject(); |
230 | var method4Id = method4.get(0); | 221 | // var method4Id = method4.get(0); |
231 | var attribute1 = dseAdapter.createObject(); | 222 | // var attribute1 = dseAdapter.createObject(); |
232 | var attribute1Id = attribute1.get(0); | 223 | // var attribute1Id = attribute1.get(0); |
233 | var attribute2 = dseAdapter.createObject(); | 224 | // var attribute2 = dseAdapter.createObject(); |
234 | var attribute2Id = attribute2.get(0); | 225 | // var attribute2Id = attribute2.get(0); |
235 | var attribute3 = dseAdapter.createObject(); | 226 | // var attribute3 = dseAdapter.createObject(); |
236 | var attribute3Id = attribute3.get(0); | 227 | // var attribute3Id = attribute3.get(0); |
237 | var attribute4 = dseAdapter.createObject(); | 228 | // var attribute4 = dseAdapter.createObject(); |
238 | var attribute4Id = attribute4.get(0); | 229 | // var attribute4Id = attribute4.get(0); |
239 | var attribute5 = dseAdapter.createObject(); | 230 | // var attribute5 = dseAdapter.createObject(); |
240 | var attribute5Id = attribute5.get(0); | 231 | // var attribute5Id = attribute5.get(0); |
241 | 232 | // | |
242 | nameInterpretation.put(method1, "M1"); | 233 | // nameInterpretation.put(method1, "M1"); |
243 | nameInterpretation.put(method2, "M2"); | 234 | // nameInterpretation.put(method2, "M2"); |
244 | nameInterpretation.put(method3, "M3"); | 235 | // nameInterpretation.put(method3, "M3"); |
245 | nameInterpretation.put(method4, "M4"); | 236 | // nameInterpretation.put(method4, "M4"); |
246 | nameInterpretation.put(attribute1, "A1"); | 237 | // nameInterpretation.put(attribute1, "A1"); |
247 | nameInterpretation.put(attribute2, "A2"); | 238 | // nameInterpretation.put(attribute2, "A2"); |
248 | nameInterpretation.put(attribute3, "A3"); | 239 | // nameInterpretation.put(attribute3, "A3"); |
249 | nameInterpretation.put(attribute4, "A4"); | 240 | // nameInterpretation.put(attribute4, "A4"); |
250 | nameInterpretation.put(attribute5, "A5"); | 241 | // nameInterpretation.put(attribute5, "A5"); |
251 | 242 | // | |
252 | 243 | // | |
253 | 244 | // | |
254 | // modelInterpretation.put(modelElement, true); | 245 | //// modelInterpretation.put(modelElement, true); |
255 | methodInterpretation.put(method1, true); | 246 | // methodInterpretation.put(method1, true); |
256 | methodInterpretation.put(method2, true); | 247 | // methodInterpretation.put(method2, true); |
257 | methodInterpretation.put(method3, true); | 248 | // methodInterpretation.put(method3, true); |
258 | methodInterpretation.put(method4, true); | 249 | // methodInterpretation.put(method4, true); |
259 | attributeInterpretation.put(attribute1, true); | 250 | // attributeInterpretation.put(attribute1, true); |
260 | attributeInterpretation.put(attribute2, true); | 251 | // attributeInterpretation.put(attribute2, true); |
261 | attributeInterpretation.put(attribute3, true); | 252 | // attributeInterpretation.put(attribute3, true); |
262 | attributeInterpretation.put(attribute4, true); | 253 | // attributeInterpretation.put(attribute4, true); |
263 | attributeInterpretation.put(attribute5, true); | 254 | // attributeInterpretation.put(attribute5, true); |
264 | 255 | // | |
265 | dataDependencyInterpretation.put(Tuple.of(method1Id, attribute1Id), true); | 256 | // dataDependencyInterpretation.put(Tuple.of(method1Id, attribute1Id), true); |
266 | dataDependencyInterpretation.put(Tuple.of(method1Id, attribute3Id), true); | 257 | // dataDependencyInterpretation.put(Tuple.of(method1Id, attribute3Id), true); |
267 | dataDependencyInterpretation.put(Tuple.of(method2Id, attribute2Id), true); | 258 | // dataDependencyInterpretation.put(Tuple.of(method2Id, attribute2Id), true); |
268 | dataDependencyInterpretation.put(Tuple.of(method3Id, attribute3Id), true); | 259 | // dataDependencyInterpretation.put(Tuple.of(method3Id, attribute3Id), true); |
269 | dataDependencyInterpretation.put(Tuple.of(method3Id, attribute4Id), true); | 260 | // dataDependencyInterpretation.put(Tuple.of(method3Id, attribute4Id), true); |
270 | dataDependencyInterpretation.put(Tuple.of(method4Id, attribute3Id), true); | 261 | // dataDependencyInterpretation.put(Tuple.of(method4Id, attribute3Id), true); |
271 | dataDependencyInterpretation.put(Tuple.of(method4Id, attribute5Id), true); | 262 | // dataDependencyInterpretation.put(Tuple.of(method4Id, attribute5Id), true); |
272 | 263 | // | |
273 | functionalDependencyInterpretation.put(Tuple.of(method1Id, attribute3Id), true); | 264 | // functionalDependencyInterpretation.put(Tuple.of(method1Id, attribute3Id), true); |
274 | functionalDependencyInterpretation.put(Tuple.of(method1Id, attribute4Id), true); | 265 | // functionalDependencyInterpretation.put(Tuple.of(method1Id, attribute4Id), true); |
275 | functionalDependencyInterpretation.put(Tuple.of(method2Id, attribute1Id), true); | 266 | // functionalDependencyInterpretation.put(Tuple.of(method2Id, attribute1Id), true); |
276 | functionalDependencyInterpretation.put(Tuple.of(method3Id, attribute1Id), true); | 267 | // functionalDependencyInterpretation.put(Tuple.of(method3Id, attribute1Id), true); |
277 | functionalDependencyInterpretation.put(Tuple.of(method3Id, attribute4Id), true); | 268 | // functionalDependencyInterpretation.put(Tuple.of(method3Id, attribute4Id), true); |
278 | functionalDependencyInterpretation.put(Tuple.of(method4Id, attribute2Id), true); | 269 | // functionalDependencyInterpretation.put(Tuple.of(method4Id, attribute2Id), true); |
279 | 270 | // | |
280 | queryEngine.flushChanges(); | 271 | // queryEngine.flushChanges(); |
281 | 272 | // | |
282 | var states = dseAdapter.explore(); | 273 | // var states = dseAdapter.explore(); |
283 | System.out.println("states size: " + states.size()); | 274 | // System.out.println("states size: " + states.size()); |
284 | } | 275 | // } |
285 | */ | 276 | //*/ |
286 | } | 277 | } |
diff --git a/subprojects/store-dse/src/test/java/tools/refinery/store/dse/DebugTest.java b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/DebugTest.java index 461d9353..1d757a5f 100644 --- a/subprojects/store-dse/src/test/java/tools/refinery/store/dse/DebugTest.java +++ b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/DebugTest.java | |||
@@ -5,22 +5,9 @@ | |||
5 | */ | 5 | */ |
6 | package tools.refinery.store.dse; | 6 | package tools.refinery.store.dse; |
7 | 7 | ||
8 | import org.junit.jupiter.api.Disabled; | ||
9 | import org.junit.jupiter.api.Test; | ||
10 | import tools.refinery.store.dse.objectives.AlwaysSatisfiedRandomHardObjective; | ||
11 | import tools.refinery.store.dse.transition.DesignSpaceExplorationAdapter; | ||
12 | import tools.refinery.store.model.ModelStore; | ||
13 | import tools.refinery.store.query.ModelQueryAdapter; | ||
14 | import tools.refinery.store.query.dnf.Query; | ||
15 | import tools.refinery.store.dse.transition.TransformationRule; | ||
16 | import tools.refinery.store.dse.strategy.DepthFirstStrategy; | ||
17 | import tools.refinery.store.query.viatra.ViatraModelQueryAdapter; | ||
18 | import tools.refinery.store.query.view.AnySymbolView; | 8 | import tools.refinery.store.query.view.AnySymbolView; |
19 | import tools.refinery.store.query.view.KeyOnlyView; | 9 | import tools.refinery.store.query.view.KeyOnlyView; |
20 | import tools.refinery.store.representation.Symbol; | 10 | import tools.refinery.store.representation.Symbol; |
21 | import tools.refinery.store.tuple.Tuple; | ||
22 | import tools.refinery.visualization.ModelVisualizerAdapter; | ||
23 | import tools.refinery.visualization.internal.FileFormat; | ||
24 | 11 | ||
25 | class DebugTest { | 12 | class DebugTest { |
26 | private static final Symbol<Boolean> classModel = Symbol.of("ClassModel", 1); | 13 | private static final Symbol<Boolean> classModel = Symbol.of("ClassModel", 1); |
@@ -42,88 +29,88 @@ class DebugTest { | |||
42 | private static final AnySymbolView classesView = new KeyOnlyView<>(classes); | 29 | private static final AnySymbolView classesView = new KeyOnlyView<>(classes); |
43 | 30 | ||
44 | 31 | ||
45 | @Test | 32 | // @Test |
46 | @Disabled("This test is only for debugging purposes") | 33 | // @Disabled("This test is only for debugging purposes") |
47 | void BFSTest() { | 34 | // void BFSTest() { |
48 | var createClassPrecondition = Query.of("CreateClassPrecondition", | 35 | // var createClassPrecondition = Query.of("CreateClassPrecondition", |
49 | (builder, model) -> builder.clause( | 36 | // (builder, model) -> builder.clause( |
50 | classModelView.call(model) | 37 | // classModelView.call(model) |
51 | )); | 38 | // )); |
52 | 39 | // | |
53 | var createClassRule = new TransformationRule("CreateClass", | 40 | // var createClassRule = new TransformationRule("CreateClass", |
54 | createClassPrecondition, | 41 | // createClassPrecondition, |
55 | (model) -> { | 42 | // (model) -> { |
56 | var classesInterpretation = model.getInterpretation(classes); | 43 | // var classesInterpretation = model.getInterpretation(classes); |
57 | var classElementInterpretation = model.getInterpretation(classElement); | 44 | // var classElementInterpretation = model.getInterpretation(classElement); |
58 | return ((Tuple activation) -> { | 45 | // return ((Tuple activation) -> { |
59 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 46 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
60 | var modelElement = activation.get(0); | 47 | // var modelElement = activation.get(0); |
61 | 48 | // | |
62 | var newClassElement = dseAdapter.createObject(); | 49 | // var newClassElement = dseAdapter.createObject(); |
63 | var newClassElementId = newClassElement.get(0); | 50 | // var newClassElementId = newClassElement.get(0); |
64 | 51 | // | |
65 | classesInterpretation.put(Tuple.of(modelElement, newClassElementId), true); | 52 | // classesInterpretation.put(Tuple.of(modelElement, newClassElementId), true); |
66 | classElementInterpretation.put(Tuple.of(newClassElementId), true); | 53 | // classElementInterpretation.put(Tuple.of(newClassElementId), true); |
67 | }); | 54 | // }); |
68 | }); | 55 | // }); |
69 | 56 | // | |
70 | var createFeaturePrecondition = Query.of("CreateFeaturePrecondition", | 57 | // var createFeaturePrecondition = Query.of("CreateFeaturePrecondition", |
71 | (builder, model) -> builder.clause( | 58 | // (builder, model) -> builder.clause( |
72 | classModelView.call(model) | 59 | // classModelView.call(model) |
73 | )); | 60 | // )); |
74 | 61 | // | |
75 | var createFeatureRule = new TransformationRule("CreateFeature", | 62 | // var createFeatureRule = new TransformationRule("CreateFeature", |
76 | createFeaturePrecondition, | 63 | // createFeaturePrecondition, |
77 | (model) -> { | 64 | // (model) -> { |
78 | var featuresInterpretation = model.getInterpretation(features); | 65 | // var featuresInterpretation = model.getInterpretation(features); |
79 | var featureInterpretation = model.getInterpretation(feature); | 66 | // var featureInterpretation = model.getInterpretation(feature); |
80 | return ((Tuple activation) -> { | 67 | // return ((Tuple activation) -> { |
81 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 68 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
82 | var modelElement = activation.get(0); | 69 | // var modelElement = activation.get(0); |
83 | 70 | // | |
84 | var newClassElement = dseAdapter.createObject(); | 71 | // var newClassElement = dseAdapter.createObject(); |
85 | var newClassElementId = newClassElement.get(0); | 72 | // var newClassElementId = newClassElement.get(0); |
86 | 73 | // | |
87 | featuresInterpretation.put(Tuple.of(modelElement, newClassElementId), true); | 74 | // featuresInterpretation.put(Tuple.of(modelElement, newClassElementId), true); |
88 | featureInterpretation.put(Tuple.of(newClassElementId), true); | 75 | // featureInterpretation.put(Tuple.of(newClassElementId), true); |
89 | }); | 76 | // }); |
90 | }); | 77 | // }); |
91 | 78 | // | |
92 | var store = ModelStore.builder() | 79 | // var store = ModelStore.builder() |
93 | .symbols(classModel, classElement, feature, isEncapsulatedBy, encapsulates, classes, features) | 80 | // .symbols(classModel, classElement, feature, isEncapsulatedBy, encapsulates, classes, features) |
94 | .with(ViatraModelQueryAdapter.builder() | 81 | // .with(ViatraModelQueryAdapter.builder() |
95 | .queries(createClassPrecondition, createFeaturePrecondition)) | 82 | // .queries(createClassPrecondition, createFeaturePrecondition)) |
96 | .with(ModelVisualizerAdapter.builder() | 83 | // .with(ModelVisualizerAdapter.builder() |
97 | .withOutputpath("test_output") | 84 | // .withOutputpath("test_output") |
98 | .withFormat(FileFormat.DOT) | 85 | // .withFormat(FileFormat.DOT) |
99 | .withFormat(FileFormat.SVG) | 86 | // .withFormat(FileFormat.SVG) |
100 | .saveStates() | 87 | // .saveStates() |
101 | .saveDesignSpace() | 88 | // .saveDesignSpace() |
102 | ) | 89 | // ) |
103 | .with(DesignSpaceExplorationAdapter.builder() | 90 | // .with(DesignSpaceExplorationAdapter.builder() |
104 | .transformations(createClassRule, createFeatureRule) | 91 | // .transformations(createClassRule, createFeatureRule) |
105 | .objectives(new AlwaysSatisfiedRandomHardObjective()) | 92 | // .objectives(new AlwaysSatisfiedRandomHardObjective()) |
106 | .strategy(new DepthFirstStrategy().withDepthLimit(4).continueIfHardObjectivesFulfilled() | 93 | // .strategy(new DepthFirstStrategy().withDepthLimit(4).continueIfHardObjectivesFulfilled() |
107 | // .strategy(new BestFirstStrategy().withDepthLimit(4).continueIfHardObjectivesFulfilled() | 94 | //// .strategy(new BestFirstStrategy().withDepthLimit(4).continueIfHardObjectivesFulfilled() |
108 | // .goOnOnlyIfFitnessIsBetter() | 95 | //// .goOnOnlyIfFitnessIsBetter() |
109 | )) | 96 | // )) |
110 | .build(); | 97 | // .build(); |
111 | 98 | // | |
112 | var model = store.createEmptyModel(); | 99 | // var model = store.createEmptyModel(); |
113 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 100 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
114 | // dseAdapter.setRandom(1); | 101 | //// dseAdapter.setRandom(1); |
115 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); | 102 | // var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
116 | 103 | // | |
117 | var modelElementInterpretation = model.getInterpretation(classModel); | 104 | // var modelElementInterpretation = model.getInterpretation(classModel); |
118 | var classElementInterpretation = model.getInterpretation(classElement); | 105 | // var classElementInterpretation = model.getInterpretation(classElement); |
119 | var modelElement = dseAdapter.createObject(); | 106 | // var modelElement = dseAdapter.createObject(); |
120 | modelElementInterpretation.put(modelElement, true); | 107 | // modelElementInterpretation.put(modelElement, true); |
121 | classElementInterpretation.put(modelElement, true); | 108 | // classElementInterpretation.put(modelElement, true); |
122 | queryEngine.flushChanges(); | 109 | // queryEngine.flushChanges(); |
123 | 110 | // | |
124 | 111 | // | |
125 | var states = dseAdapter.explore(); | 112 | // var states = dseAdapter.explore(); |
126 | System.out.println("states size: " + states.size()); | 113 | // System.out.println("states size: " + states.size()); |
127 | 114 | // | |
128 | } | 115 | // } |
129 | } | 116 | } |
diff --git a/subprojects/store-dse/src/test/java/tools/refinery/store/dse/DesignSpaceExplorationTest.java b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/DesignSpaceExplorationTest.java index 083f7ec3..f5f13433 100644 --- a/subprojects/store-dse/src/test/java/tools/refinery/store/dse/DesignSpaceExplorationTest.java +++ b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/DesignSpaceExplorationTest.java | |||
@@ -5,21 +5,9 @@ | |||
5 | */ | 5 | */ |
6 | package tools.refinery.store.dse; | 6 | package tools.refinery.store.dse; |
7 | 7 | ||
8 | import org.junit.jupiter.api.Test; | ||
9 | import tools.refinery.store.dse.transition.DesignSpaceExplorationAdapter; | ||
10 | import tools.refinery.store.model.ModelStore; | ||
11 | import tools.refinery.store.query.ModelQueryAdapter; | ||
12 | import tools.refinery.store.query.dnf.Query; | ||
13 | import tools.refinery.store.dse.transition.TransformationRule; | ||
14 | import tools.refinery.store.dse.strategy.BestFirstStrategy; | ||
15 | import tools.refinery.store.dse.strategy.DepthFirstStrategy; | ||
16 | import tools.refinery.store.query.viatra.ViatraModelQueryAdapter; | ||
17 | import tools.refinery.store.query.view.AnySymbolView; | 8 | import tools.refinery.store.query.view.AnySymbolView; |
18 | import tools.refinery.store.query.view.KeyOnlyView; | 9 | import tools.refinery.store.query.view.KeyOnlyView; |
19 | import tools.refinery.store.representation.Symbol; | 10 | import tools.refinery.store.representation.Symbol; |
20 | import tools.refinery.store.tuple.Tuple; | ||
21 | |||
22 | import static org.junit.jupiter.api.Assertions.assertEquals; | ||
23 | 11 | ||
24 | class DesignSpaceExplorationTest { | 12 | class DesignSpaceExplorationTest { |
25 | // private static final Symbol<Boolean> namedElement = Symbol.of("NamedElement", 1); | 13 | // private static final Symbol<Boolean> namedElement = Symbol.of("NamedElement", 1); |
@@ -46,563 +34,563 @@ class DesignSpaceExplorationTest { | |||
46 | private static final AnySymbolView featuresView = new KeyOnlyView<>(features); | 34 | private static final AnySymbolView featuresView = new KeyOnlyView<>(features); |
47 | private static final AnySymbolView classesView = new KeyOnlyView<>(classes); | 35 | private static final AnySymbolView classesView = new KeyOnlyView<>(classes); |
48 | 36 | ||
49 | @Test | 37 | // @Test |
50 | void createObjectTest() { | 38 | // void createObjectTest() { |
51 | var store = ModelStore.builder() | 39 | // var store = ModelStore.builder() |
52 | .with(ViatraModelQueryAdapter.builder()) | 40 | // .with(ViatraModelQueryAdapter.builder()) |
53 | .with(DesignSpaceExplorationAdapter.builder() | 41 | // .with(DesignSpaceExplorationAdapter.builder() |
54 | .strategy(new DepthFirstStrategy().withDepthLimit(0))) | 42 | // .strategy(new DepthFirstStrategy().withDepthLimit(0))) |
55 | .build(); | 43 | // .build(); |
56 | 44 | // | |
57 | var model = store.createEmptyModel(); | 45 | // var model = store.createEmptyModel(); |
58 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 46 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
59 | 47 | // | |
60 | assertEquals(0, dseAdapter.getModelSize()); | 48 | // assertEquals(0, dseAdapter.getModelSize()); |
61 | 49 | // | |
62 | var newModel = dseAdapter.createObject(); | 50 | // var newModel = dseAdapter.createObject(); |
63 | var newModelId = newModel.get(0); | 51 | // var newModelId = newModel.get(0); |
64 | var newClass1 = dseAdapter.createObject(); | 52 | // var newClass1 = dseAdapter.createObject(); |
65 | var newClass1Id = newClass1.get(0); | 53 | // var newClass1Id = newClass1.get(0); |
66 | var newClass2 = dseAdapter.createObject(); | 54 | // var newClass2 = dseAdapter.createObject(); |
67 | var newClass2Id = newClass2.get(0); | 55 | // var newClass2Id = newClass2.get(0); |
68 | var newField = dseAdapter.createObject(); | 56 | // var newField = dseAdapter.createObject(); |
69 | var newFieldId = newField.get(0); | 57 | // var newFieldId = newField.get(0); |
70 | 58 | // | |
71 | assertEquals(0, newModelId); | 59 | // assertEquals(0, newModelId); |
72 | assertEquals(1, newClass1Id); | 60 | // assertEquals(1, newClass1Id); |
73 | assertEquals(2, newClass2Id); | 61 | // assertEquals(2, newClass2Id); |
74 | assertEquals(3, newFieldId); | 62 | // assertEquals(3, newFieldId); |
75 | assertEquals(4, dseAdapter.getModelSize()); | 63 | // assertEquals(4, dseAdapter.getModelSize()); |
76 | } | 64 | // } |
77 | 65 | ||
78 | @Test | 66 | // @Test |
79 | void deleteMiddleObjectTest() { | 67 | // void deleteMiddleObjectTest() { |
80 | var store = ModelStore.builder() | 68 | // var store = ModelStore.builder() |
81 | .with(ViatraModelQueryAdapter.builder()) | 69 | // .with(ViatraModelQueryAdapter.builder()) |
82 | .with(DesignSpaceExplorationAdapter.builder() | 70 | // .with(DesignSpaceExplorationAdapter.builder() |
83 | .strategy(new DepthFirstStrategy())) | 71 | // .strategy(new DepthFirstStrategy())) |
84 | .build(); | 72 | // .build(); |
85 | 73 | // | |
86 | var model = store.createEmptyModel(); | 74 | // var model = store.createEmptyModel(); |
87 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 75 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
88 | 76 | // | |
89 | assertEquals(0, dseAdapter.getModelSize()); | 77 | // assertEquals(0, dseAdapter.getModelSize()); |
90 | 78 | // | |
91 | var newObject0 = dseAdapter.createObject(); | 79 | // var newObject0 = dseAdapter.createObject(); |
92 | var newObject0Id = newObject0.get(0); | 80 | // var newObject0Id = newObject0.get(0); |
93 | var newObject1 = dseAdapter.createObject(); | 81 | // var newObject1 = dseAdapter.createObject(); |
94 | var newObject1Id = newObject1.get(0); | 82 | // var newObject1Id = newObject1.get(0); |
95 | var newObject2 = dseAdapter.createObject(); | 83 | // var newObject2 = dseAdapter.createObject(); |
96 | var newObject2Id = newObject2.get(0); | 84 | // var newObject2Id = newObject2.get(0); |
97 | var newObject3 = dseAdapter.createObject(); | 85 | // var newObject3 = dseAdapter.createObject(); |
98 | var newObject3Id = newObject3.get(0); | 86 | // var newObject3Id = newObject3.get(0); |
99 | 87 | // | |
100 | assertEquals(0, newObject0Id); | 88 | // assertEquals(0, newObject0Id); |
101 | assertEquals(1, newObject1Id); | 89 | // assertEquals(1, newObject1Id); |
102 | assertEquals(2, newObject2Id); | 90 | // assertEquals(2, newObject2Id); |
103 | assertEquals(3, newObject3Id); | 91 | // assertEquals(3, newObject3Id); |
104 | assertEquals(4, dseAdapter.getModelSize()); | 92 | // assertEquals(4, dseAdapter.getModelSize()); |
105 | 93 | // | |
106 | dseAdapter.deleteObject(newObject1); | 94 | // dseAdapter.deleteObject(newObject1); |
107 | assertEquals(4, dseAdapter.getModelSize()); | 95 | // assertEquals(4, dseAdapter.getModelSize()); |
108 | 96 | // | |
109 | var newObject4 = dseAdapter.createObject(); | 97 | // var newObject4 = dseAdapter.createObject(); |
110 | var newObject4Id = newObject4.get(0); | 98 | // var newObject4Id = newObject4.get(0); |
111 | assertEquals(4, newObject4Id); | 99 | // assertEquals(4, newObject4Id); |
112 | assertEquals(5, dseAdapter.getModelSize()); | 100 | // assertEquals(5, dseAdapter.getModelSize()); |
113 | 101 | // | |
114 | dseAdapter.deleteObject(newObject4); | 102 | // dseAdapter.deleteObject(newObject4); |
115 | assertEquals(5, dseAdapter.getModelSize()); | 103 | // assertEquals(5, dseAdapter.getModelSize()); |
116 | } | 104 | // } |
117 | 105 | // | |
118 | @Test | 106 | // @Test |
119 | void DFSTrivialTest() { | 107 | // void DFSTrivialTest() { |
120 | var store = ModelStore.builder() | 108 | // var store = ModelStore.builder() |
121 | .symbols(classModel) | 109 | // .symbols(classModel) |
122 | .with(ViatraModelQueryAdapter.builder()) | 110 | // .with(ViatraModelQueryAdapter.builder()) |
123 | .with(DesignSpaceExplorationAdapter.builder() | 111 | // .with(DesignSpaceExplorationAdapter.builder() |
124 | .strategy(new DepthFirstStrategy().withDepthLimit(0))) | 112 | // .strategy(new DepthFirstStrategy().withDepthLimit(0))) |
125 | .build(); | 113 | // .build(); |
126 | 114 | // | |
127 | var model = store.createEmptyModel(); | 115 | // var model = store.createEmptyModel(); |
128 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 116 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
129 | 117 | // | |
130 | var states = dseAdapter.explore(); | 118 | // var states = dseAdapter.explore(); |
131 | assertEquals(1, states.size()); | 119 | // assertEquals(1, states.size()); |
132 | } | 120 | // } |
133 | 121 | // | |
134 | @Test | 122 | // @Test |
135 | void DFSOneRuleTest() { | 123 | // void DFSOneRuleTest() { |
136 | var createClassPrecondition = Query.of("CreateClassPrecondition", | 124 | // var createClassPrecondition = Query.of("CreateClassPrecondition", |
137 | (builder, model) -> builder.clause( | 125 | // (builder, model) -> builder.clause( |
138 | classModelView.call(model) | 126 | // classModelView.call(model) |
139 | )); | 127 | // )); |
140 | 128 | // | |
141 | var createClassRule = new TransformationRule("CreateClass", | 129 | // var createClassRule = new TransformationRule("CreateClass", |
142 | createClassPrecondition, | 130 | // createClassPrecondition, |
143 | (model) -> { | 131 | // (model) -> { |
144 | var classesInterpretation = model.getInterpretation(classes); | 132 | // var classesInterpretation = model.getInterpretation(classes); |
145 | var classElementInterpretation = model.getInterpretation(classElement); | 133 | // var classElementInterpretation = model.getInterpretation(classElement); |
146 | return ((Tuple activation) -> { | 134 | // return ((Tuple activation) -> { |
147 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 135 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
148 | var modelElement = activation.get(0); | 136 | // var modelElement = activation.get(0); |
149 | 137 | // | |
150 | var newClassElement = dseAdapter.createObject(); | 138 | // var newClassElement = dseAdapter.createObject(); |
151 | var newClassElementId = newClassElement.get(0); | 139 | // var newClassElementId = newClassElement.get(0); |
152 | 140 | // | |
153 | classesInterpretation.put(Tuple.of(modelElement, newClassElementId), true); | 141 | // classesInterpretation.put(Tuple.of(modelElement, newClassElementId), true); |
154 | classElementInterpretation.put(Tuple.of(newClassElementId), true); | 142 | // classElementInterpretation.put(Tuple.of(newClassElementId), true); |
155 | }); | 143 | // }); |
156 | }); | 144 | // }); |
157 | 145 | // | |
158 | var store = ModelStore.builder() | 146 | // var store = ModelStore.builder() |
159 | .symbols(classModel, classElement, classes) | 147 | // .symbols(classModel, classElement, classes) |
160 | .with(ViatraModelQueryAdapter.builder() | 148 | // .with(ViatraModelQueryAdapter.builder() |
161 | .queries(createClassPrecondition)) | 149 | // .queries(createClassPrecondition)) |
162 | .with(DesignSpaceExplorationAdapter.builder() | 150 | // .with(DesignSpaceExplorationAdapter.builder() |
163 | .transformations(createClassRule) | 151 | // .transformations(createClassRule) |
164 | .strategy(new DepthFirstStrategy().withDepthLimit(0) | 152 | // .strategy(new DepthFirstStrategy().withDepthLimit(0) |
165 | )) | 153 | // )) |
166 | .build(); | 154 | // .build(); |
167 | 155 | // | |
168 | var model = store.createEmptyModel(); | 156 | // var model = store.createEmptyModel(); |
169 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 157 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
170 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); | 158 | // var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
171 | 159 | // | |
172 | var modelElementInterpretation = model.getInterpretation(classModel); | 160 | // var modelElementInterpretation = model.getInterpretation(classModel); |
173 | modelElementInterpretation.put(dseAdapter.createObject(), true); | 161 | // modelElementInterpretation.put(dseAdapter.createObject(), true); |
174 | queryEngine.flushChanges(); | 162 | // queryEngine.flushChanges(); |
175 | 163 | // | |
176 | var states = dseAdapter.explore(); | 164 | // var states = dseAdapter.explore(); |
177 | assertEquals(1, states.size()); | 165 | // assertEquals(1, states.size()); |
178 | } | 166 | // } |
179 | 167 | // | |
180 | @Test | 168 | // @Test |
181 | void DFSContinueTest() { | 169 | // void DFSContinueTest() { |
182 | var createClassPrecondition = Query.of("CreateClassPrecondition", | 170 | // var createClassPrecondition = Query.of("CreateClassPrecondition", |
183 | (builder, model) -> builder.clause( | 171 | // (builder, model) -> builder.clause( |
184 | classModelView.call(model) | 172 | // classModelView.call(model) |
185 | )); | 173 | // )); |
186 | 174 | // | |
187 | var createClassRule = new TransformationRule("CreateClass", | 175 | // var createClassRule = new TransformationRule("CreateClass", |
188 | createClassPrecondition, | 176 | // createClassPrecondition, |
189 | (model) -> { | 177 | // (model) -> { |
190 | var classesInterpretation = model.getInterpretation(classes); | 178 | // var classesInterpretation = model.getInterpretation(classes); |
191 | var classElementInterpretation = model.getInterpretation(classElement); | 179 | // var classElementInterpretation = model.getInterpretation(classElement); |
192 | return ((Tuple activation) -> { | 180 | // return ((Tuple activation) -> { |
193 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 181 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
194 | var modelElement = activation.get(0); | 182 | // var modelElement = activation.get(0); |
195 | 183 | // | |
196 | var newClassElement = dseAdapter.createObject(); | 184 | // var newClassElement = dseAdapter.createObject(); |
197 | var newClassElementId = newClassElement.get(0); | 185 | // var newClassElementId = newClassElement.get(0); |
198 | 186 | // | |
199 | classesInterpretation.put(Tuple.of(modelElement, newClassElementId), true); | 187 | // classesInterpretation.put(Tuple.of(modelElement, newClassElementId), true); |
200 | classElementInterpretation.put(Tuple.of(newClassElementId), true); | 188 | // classElementInterpretation.put(Tuple.of(newClassElementId), true); |
201 | }); | 189 | // }); |
202 | }); | 190 | // }); |
203 | 191 | // | |
204 | var store = ModelStore.builder() | 192 | // var store = ModelStore.builder() |
205 | .symbols(classModel, classElement, classes) | 193 | // .symbols(classModel, classElement, classes) |
206 | .with(ViatraModelQueryAdapter.builder() | 194 | // .with(ViatraModelQueryAdapter.builder() |
207 | .queries(createClassPrecondition)) | 195 | // .queries(createClassPrecondition)) |
208 | .with(DesignSpaceExplorationAdapter.builder() | 196 | // .with(DesignSpaceExplorationAdapter.builder() |
209 | .transformations(createClassRule) | 197 | // .transformations(createClassRule) |
210 | .strategy(new DepthFirstStrategy().withDepthLimit(4).continueIfHardObjectivesFulfilled() | 198 | // .strategy(new DepthFirstStrategy().withDepthLimit(4).continueIfHardObjectivesFulfilled() |
211 | )) | 199 | // )) |
212 | .build(); | 200 | // .build(); |
213 | 201 | // | |
214 | var model = store.createEmptyModel(); | 202 | // var model = store.createEmptyModel(); |
215 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 203 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
216 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); | 204 | // var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
217 | 205 | // | |
218 | var modelElementInterpretation = model.getInterpretation(classModel); | 206 | // var modelElementInterpretation = model.getInterpretation(classModel); |
219 | modelElementInterpretation.put(dseAdapter.createObject(), true); | 207 | // modelElementInterpretation.put(dseAdapter.createObject(), true); |
220 | queryEngine.flushChanges(); | 208 | // queryEngine.flushChanges(); |
221 | 209 | // | |
222 | var states = dseAdapter.explore(); | 210 | // var states = dseAdapter.explore(); |
223 | assertEquals(5, states.size()); | 211 | // assertEquals(5, states.size()); |
224 | } | 212 | // } |
225 | 213 | // | |
226 | @Test | 214 | // @Test |
227 | void DFSCompletenessTest() { | 215 | // void DFSCompletenessTest() { |
228 | var createClassPrecondition = Query.of("CreateClassPrecondition", | 216 | // var createClassPrecondition = Query.of("CreateClassPrecondition", |
229 | (builder, model) -> builder.clause( | 217 | // (builder, model) -> builder.clause( |
230 | classModelView.call(model) | 218 | // classModelView.call(model) |
231 | )); | 219 | // )); |
232 | 220 | // | |
233 | var createClassRule = new TransformationRule("CreateClass", | 221 | // var createClassRule = new TransformationRule("CreateClass", |
234 | createClassPrecondition, | 222 | // createClassPrecondition, |
235 | (model) -> { | 223 | // (model) -> { |
236 | var classesInterpretation = model.getInterpretation(classes); | 224 | // var classesInterpretation = model.getInterpretation(classes); |
237 | var classElementInterpretation = model.getInterpretation(classElement); | 225 | // var classElementInterpretation = model.getInterpretation(classElement); |
238 | return ((Tuple activation) -> { | 226 | // return ((Tuple activation) -> { |
239 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 227 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
240 | var modelElement = activation.get(0); | 228 | // var modelElement = activation.get(0); |
241 | 229 | // | |
242 | var newClassElement = dseAdapter.createObject(); | 230 | // var newClassElement = dseAdapter.createObject(); |
243 | var newClassElementId = newClassElement.get(0); | 231 | // var newClassElementId = newClassElement.get(0); |
244 | 232 | // | |
245 | classesInterpretation.put(Tuple.of(modelElement, newClassElementId), true); | 233 | // classesInterpretation.put(Tuple.of(modelElement, newClassElementId), true); |
246 | classElementInterpretation.put(Tuple.of(newClassElementId), true); | 234 | // classElementInterpretation.put(Tuple.of(newClassElementId), true); |
247 | }); | 235 | // }); |
248 | }); | 236 | // }); |
249 | 237 | // | |
250 | var createFeaturePrecondition = Query.of("CreateFeaturePrecondition", | 238 | // var createFeaturePrecondition = Query.of("CreateFeaturePrecondition", |
251 | (builder, model) -> builder.clause( | 239 | // (builder, model) -> builder.clause( |
252 | classModelView.call(model) | 240 | // classModelView.call(model) |
253 | )); | 241 | // )); |
254 | 242 | // | |
255 | var createFeatureRule = new TransformationRule("CreateFeature", | 243 | // var createFeatureRule = new TransformationRule("CreateFeature", |
256 | createFeaturePrecondition, | 244 | // createFeaturePrecondition, |
257 | (model) -> { | 245 | // (model) -> { |
258 | var featuresInterpretation = model.getInterpretation(features); | 246 | // var featuresInterpretation = model.getInterpretation(features); |
259 | var featureInterpretation = model.getInterpretation(feature); | 247 | // var featureInterpretation = model.getInterpretation(feature); |
260 | return ((Tuple activation) -> { | 248 | // return ((Tuple activation) -> { |
261 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 249 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
262 | var modelElement = activation.get(0); | 250 | // var modelElement = activation.get(0); |
263 | 251 | // | |
264 | var newClassElement = dseAdapter.createObject(); | 252 | // var newClassElement = dseAdapter.createObject(); |
265 | var newClassElementId = newClassElement.get(0); | 253 | // var newClassElementId = newClassElement.get(0); |
266 | 254 | // | |
267 | featuresInterpretation.put(Tuple.of(modelElement, newClassElementId), true); | 255 | // featuresInterpretation.put(Tuple.of(modelElement, newClassElementId), true); |
268 | featureInterpretation.put(Tuple.of(newClassElementId), true); | 256 | // featureInterpretation.put(Tuple.of(newClassElementId), true); |
269 | }); | 257 | // }); |
270 | }); | 258 | // }); |
271 | 259 | // | |
272 | var store = ModelStore.builder() | 260 | // var store = ModelStore.builder() |
273 | .symbols(classModel, classElement, classes, feature, features, isEncapsulatedBy, encapsulates) | 261 | // .symbols(classModel, classElement, classes, feature, features, isEncapsulatedBy, encapsulates) |
274 | .with(ViatraModelQueryAdapter.builder() | 262 | // .with(ViatraModelQueryAdapter.builder() |
275 | .queries(createClassPrecondition, createFeaturePrecondition)) | 263 | // .queries(createClassPrecondition, createFeaturePrecondition)) |
276 | .with(DesignSpaceExplorationAdapter.builder() | 264 | // .with(DesignSpaceExplorationAdapter.builder() |
277 | .transformations(createClassRule, createFeatureRule) | 265 | // .transformations(createClassRule, createFeatureRule) |
278 | .strategy(new DepthFirstStrategy().withDepthLimit(10).continueIfHardObjectivesFulfilled() | 266 | // .strategy(new DepthFirstStrategy().withDepthLimit(10).continueIfHardObjectivesFulfilled() |
279 | )) | 267 | // )) |
280 | .build(); | 268 | // .build(); |
281 | 269 | // | |
282 | var model = store.createEmptyModel(); | 270 | // var model = store.createEmptyModel(); |
283 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 271 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
284 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); | 272 | // var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
285 | 273 | // | |
286 | var modelElementInterpretation = model.getInterpretation(classModel); | 274 | // var modelElementInterpretation = model.getInterpretation(classModel); |
287 | modelElementInterpretation.put(dseAdapter.createObject(), true); | 275 | // modelElementInterpretation.put(dseAdapter.createObject(), true); |
288 | queryEngine.flushChanges(); | 276 | // queryEngine.flushChanges(); |
289 | 277 | // | |
290 | var states = dseAdapter.explore(); | 278 | // var states = dseAdapter.explore(); |
291 | assertEquals(2047, states.size()); | 279 | // assertEquals(2047, states.size()); |
292 | } | 280 | // } |
293 | 281 | // | |
294 | @Test | 282 | // @Test |
295 | void DFSSolutionLimitTest() { | 283 | // void DFSSolutionLimitTest() { |
296 | var createClassPrecondition = Query.of("CreateClassPrecondition", | 284 | // var createClassPrecondition = Query.of("CreateClassPrecondition", |
297 | (builder, model) -> builder.clause( | 285 | // (builder, model) -> builder.clause( |
298 | classModelView.call(model) | 286 | // classModelView.call(model) |
299 | )); | 287 | // )); |
300 | 288 | // | |
301 | var createClassRule = new TransformationRule("CreateClass", | 289 | // var createClassRule = new TransformationRule("CreateClass", |
302 | createClassPrecondition, | 290 | // createClassPrecondition, |
303 | (model) -> { | 291 | // (model) -> { |
304 | var classesInterpretation = model.getInterpretation(classes); | 292 | // var classesInterpretation = model.getInterpretation(classes); |
305 | var classElementInterpretation = model.getInterpretation(classElement); | 293 | // var classElementInterpretation = model.getInterpretation(classElement); |
306 | return ((Tuple activation) -> { | 294 | // return ((Tuple activation) -> { |
307 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 295 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
308 | var modelElement = activation.get(0); | 296 | // var modelElement = activation.get(0); |
309 | 297 | // | |
310 | var newClassElement = dseAdapter.createObject(); | 298 | // var newClassElement = dseAdapter.createObject(); |
311 | var newClassElementId = newClassElement.get(0); | 299 | // var newClassElementId = newClassElement.get(0); |
312 | 300 | // | |
313 | classesInterpretation.put(Tuple.of(modelElement, newClassElementId), true); | 301 | // classesInterpretation.put(Tuple.of(modelElement, newClassElementId), true); |
314 | classElementInterpretation.put(Tuple.of(newClassElementId), true); | 302 | // classElementInterpretation.put(Tuple.of(newClassElementId), true); |
315 | }); | 303 | // }); |
316 | }); | 304 | // }); |
317 | 305 | // | |
318 | var createFeaturePrecondition = Query.of("CreateFeaturePrecondition", | 306 | // var createFeaturePrecondition = Query.of("CreateFeaturePrecondition", |
319 | (builder, model) -> builder.clause( | 307 | // (builder, model) -> builder.clause( |
320 | classModelView.call(model) | 308 | // classModelView.call(model) |
321 | )); | 309 | // )); |
322 | 310 | // | |
323 | var createFeatureRule = new TransformationRule("CreateFeature", | 311 | // var createFeatureRule = new TransformationRule("CreateFeature", |
324 | createFeaturePrecondition, | 312 | // createFeaturePrecondition, |
325 | (model) -> { | 313 | // (model) -> { |
326 | var featuresInterpretation = model.getInterpretation(features); | 314 | // var featuresInterpretation = model.getInterpretation(features); |
327 | var featureInterpretation = model.getInterpretation(feature); | 315 | // var featureInterpretation = model.getInterpretation(feature); |
328 | return ((Tuple activation) -> { | 316 | // return ((Tuple activation) -> { |
329 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 317 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
330 | var modelElement = activation.get(0); | 318 | // var modelElement = activation.get(0); |
331 | 319 | // | |
332 | var newClassElement = dseAdapter.createObject(); | 320 | // var newClassElement = dseAdapter.createObject(); |
333 | var newClassElementId = newClassElement.get(0); | 321 | // var newClassElementId = newClassElement.get(0); |
334 | 322 | // | |
335 | featuresInterpretation.put(Tuple.of(modelElement, newClassElementId), true); | 323 | // featuresInterpretation.put(Tuple.of(modelElement, newClassElementId), true); |
336 | featureInterpretation.put(Tuple.of(newClassElementId), true); | 324 | // featureInterpretation.put(Tuple.of(newClassElementId), true); |
337 | }); | 325 | // }); |
338 | }); | 326 | // }); |
339 | 327 | // | |
340 | var store = ModelStore.builder() | 328 | // var store = ModelStore.builder() |
341 | .symbols(classModel, classElement, classes, feature, features, isEncapsulatedBy, encapsulates) | 329 | // .symbols(classModel, classElement, classes, feature, features, isEncapsulatedBy, encapsulates) |
342 | .with(ViatraModelQueryAdapter.builder() | 330 | // .with(ViatraModelQueryAdapter.builder() |
343 | .queries(createClassPrecondition, createFeaturePrecondition)) | 331 | // .queries(createClassPrecondition, createFeaturePrecondition)) |
344 | .with(DesignSpaceExplorationAdapter.builder() | 332 | // .with(DesignSpaceExplorationAdapter.builder() |
345 | .transformations(createClassRule, createFeatureRule) | 333 | // .transformations(createClassRule, createFeatureRule) |
346 | .strategy(new DepthFirstStrategy().withSolutionLimit(222) | 334 | // .strategy(new DepthFirstStrategy().withSolutionLimit(222) |
347 | .continueIfHardObjectivesFulfilled() | 335 | // .continueIfHardObjectivesFulfilled() |
348 | )) | 336 | // )) |
349 | .build(); | 337 | // .build(); |
350 | 338 | // | |
351 | var model = store.createEmptyModel(); | 339 | // var model = store.createEmptyModel(); |
352 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 340 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
353 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); | 341 | // var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
354 | 342 | // | |
355 | var modelElementInterpretation = model.getInterpretation(classModel); | 343 | // var modelElementInterpretation = model.getInterpretation(classModel); |
356 | modelElementInterpretation.put(dseAdapter.createObject(), true); | 344 | // modelElementInterpretation.put(dseAdapter.createObject(), true); |
357 | queryEngine.flushChanges(); | 345 | // queryEngine.flushChanges(); |
358 | 346 | // | |
359 | var states = dseAdapter.explore(); | 347 | // var states = dseAdapter.explore(); |
360 | assertEquals(222, states.size()); | 348 | // assertEquals(222, states.size()); |
361 | } | 349 | // } |
362 | 350 | // | |
363 | @Test | 351 | // @Test |
364 | void BeFSTrivialTest() { | 352 | // void BeFSTrivialTest() { |
365 | var store = ModelStore.builder() | 353 | // var store = ModelStore.builder() |
366 | .symbols(classModel) | 354 | // .symbols(classModel) |
367 | .with(ViatraModelQueryAdapter.builder()) | 355 | // .with(ViatraModelQueryAdapter.builder()) |
368 | .with(DesignSpaceExplorationAdapter.builder() | 356 | // .with(DesignSpaceExplorationAdapter.builder() |
369 | .strategy(new BestFirstStrategy().withDepthLimit(0))) | 357 | // .strategy(new BestFirstStrategy().withDepthLimit(0))) |
370 | .build(); | 358 | // .build(); |
371 | 359 | // | |
372 | var model = store.createEmptyModel(); | 360 | // var model = store.createEmptyModel(); |
373 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 361 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
374 | 362 | // | |
375 | var states = dseAdapter.explore(); | 363 | // var states = dseAdapter.explore(); |
376 | assertEquals(1, states.size()); | 364 | // assertEquals(1, states.size()); |
377 | } | 365 | // } |
378 | 366 | // | |
379 | @Test | 367 | // @Test |
380 | void BeFSOneRuleTest() { | 368 | // void BeFSOneRuleTest() { |
381 | var createClassPrecondition = Query.of("CreateClassPrecondition", | 369 | // var createClassPrecondition = Query.of("CreateClassPrecondition", |
382 | (builder, model) -> builder.clause( | 370 | // (builder, model) -> builder.clause( |
383 | classModelView.call(model) | 371 | // classModelView.call(model) |
384 | )); | 372 | // )); |
385 | 373 | // | |
386 | var createClassRule = new TransformationRule("CreateClass", | 374 | // var createClassRule = new TransformationRule("CreateClass", |
387 | createClassPrecondition, | 375 | // createClassPrecondition, |
388 | (model) -> { | 376 | // (model) -> { |
389 | var classesInterpretation = model.getInterpretation(classes); | 377 | // var classesInterpretation = model.getInterpretation(classes); |
390 | var classElementInterpretation = model.getInterpretation(classElement); | 378 | // var classElementInterpretation = model.getInterpretation(classElement); |
391 | return ((Tuple activation) -> { | 379 | // return ((Tuple activation) -> { |
392 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 380 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
393 | var modelElement = activation.get(0); | 381 | // var modelElement = activation.get(0); |
394 | 382 | // | |
395 | var newClassElement = dseAdapter.createObject(); | 383 | // var newClassElement = dseAdapter.createObject(); |
396 | var newClassElementId = newClassElement.get(0); | 384 | // var newClassElementId = newClassElement.get(0); |
397 | 385 | // | |
398 | classesInterpretation.put(Tuple.of(modelElement, newClassElementId), true); | 386 | // classesInterpretation.put(Tuple.of(modelElement, newClassElementId), true); |
399 | classElementInterpretation.put(Tuple.of(newClassElementId), true); | 387 | // classElementInterpretation.put(Tuple.of(newClassElementId), true); |
400 | }); | 388 | // }); |
401 | }); | 389 | // }); |
402 | 390 | // | |
403 | var store = ModelStore.builder() | 391 | // var store = ModelStore.builder() |
404 | .symbols(classModel, classElement, classes) | 392 | // .symbols(classModel, classElement, classes) |
405 | .with(ViatraModelQueryAdapter.builder() | 393 | // .with(ViatraModelQueryAdapter.builder() |
406 | .queries(createClassPrecondition)) | 394 | // .queries(createClassPrecondition)) |
407 | .with(DesignSpaceExplorationAdapter.builder() | 395 | // .with(DesignSpaceExplorationAdapter.builder() |
408 | .transformations(createClassRule) | 396 | // .transformations(createClassRule) |
409 | .strategy(new BestFirstStrategy().withDepthLimit(4) | 397 | // .strategy(new BestFirstStrategy().withDepthLimit(4) |
410 | )) | 398 | // )) |
411 | .build(); | 399 | // .build(); |
412 | 400 | // | |
413 | var model = store.createEmptyModel(); | 401 | // var model = store.createEmptyModel(); |
414 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 402 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
415 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); | 403 | // var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
416 | 404 | // | |
417 | var modelElementInterpretation = model.getInterpretation(classModel); | 405 | // var modelElementInterpretation = model.getInterpretation(classModel); |
418 | modelElementInterpretation.put(dseAdapter.createObject(), true); | 406 | // modelElementInterpretation.put(dseAdapter.createObject(), true); |
419 | queryEngine.flushChanges(); | 407 | // queryEngine.flushChanges(); |
420 | 408 | // | |
421 | var states = dseAdapter.explore(); | 409 | // var states = dseAdapter.explore(); |
422 | assertEquals(1, states.size()); | 410 | // assertEquals(1, states.size()); |
423 | } | 411 | // } |
424 | 412 | // | |
425 | @Test | 413 | // @Test |
426 | void BeFSContinueTest() { | 414 | // void BeFSContinueTest() { |
427 | var createClassPrecondition = Query.of("CreateClassPrecondition", | 415 | // var createClassPrecondition = Query.of("CreateClassPrecondition", |
428 | (builder, model) -> builder.clause( | 416 | // (builder, model) -> builder.clause( |
429 | classModelView.call(model) | 417 | // classModelView.call(model) |
430 | )); | 418 | // )); |
431 | 419 | // | |
432 | var createClassRule = new TransformationRule("CreateClass", | 420 | // var createClassRule = new TransformationRule("CreateClass", |
433 | createClassPrecondition, | 421 | // createClassPrecondition, |
434 | (model) -> { | 422 | // (model) -> { |
435 | var classesInterpretation = model.getInterpretation(classes); | 423 | // var classesInterpretation = model.getInterpretation(classes); |
436 | var classElementInterpretation = model.getInterpretation(classElement); | 424 | // var classElementInterpretation = model.getInterpretation(classElement); |
437 | return ((Tuple activation) -> { | 425 | // return ((Tuple activation) -> { |
438 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 426 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
439 | var modelElement = activation.get(0); | 427 | // var modelElement = activation.get(0); |
440 | 428 | // | |
441 | var newClassElement = dseAdapter.createObject(); | 429 | // var newClassElement = dseAdapter.createObject(); |
442 | var newClassElementId = newClassElement.get(0); | 430 | // var newClassElementId = newClassElement.get(0); |
443 | 431 | // | |
444 | classesInterpretation.put(Tuple.of(modelElement, newClassElementId), true); | 432 | // classesInterpretation.put(Tuple.of(modelElement, newClassElementId), true); |
445 | classElementInterpretation.put(Tuple.of(newClassElementId), true); | 433 | // classElementInterpretation.put(Tuple.of(newClassElementId), true); |
446 | }); | 434 | // }); |
447 | }); | 435 | // }); |
448 | 436 | // | |
449 | var store = ModelStore.builder() | 437 | // var store = ModelStore.builder() |
450 | .symbols(classModel, classElement, classes) | 438 | // .symbols(classModel, classElement, classes) |
451 | .with(ViatraModelQueryAdapter.builder() | 439 | // .with(ViatraModelQueryAdapter.builder() |
452 | .queries(createClassPrecondition)) | 440 | // .queries(createClassPrecondition)) |
453 | .with(DesignSpaceExplorationAdapter.builder() | 441 | // .with(DesignSpaceExplorationAdapter.builder() |
454 | .transformations(createClassRule) | 442 | // .transformations(createClassRule) |
455 | .strategy(new BestFirstStrategy().withDepthLimit(4).continueIfHardObjectivesFulfilled() | 443 | // .strategy(new BestFirstStrategy().withDepthLimit(4).continueIfHardObjectivesFulfilled() |
456 | )) | 444 | // )) |
457 | .build(); | 445 | // .build(); |
458 | 446 | // | |
459 | var model = store.createEmptyModel(); | 447 | // var model = store.createEmptyModel(); |
460 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 448 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
461 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); | 449 | // var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
462 | 450 | // | |
463 | var modelElementInterpretation = model.getInterpretation(classModel); | 451 | // var modelElementInterpretation = model.getInterpretation(classModel); |
464 | modelElementInterpretation.put(dseAdapter.createObject(), true); | 452 | // modelElementInterpretation.put(dseAdapter.createObject(), true); |
465 | queryEngine.flushChanges(); | 453 | // queryEngine.flushChanges(); |
466 | 454 | // | |
467 | var states = dseAdapter.explore(); | 455 | // var states = dseAdapter.explore(); |
468 | assertEquals(5, states.size()); | 456 | // assertEquals(5, states.size()); |
469 | } | 457 | // } |
470 | 458 | // | |
471 | @Test | 459 | // @Test |
472 | void BeFSCompletenessTest() { | 460 | // void BeFSCompletenessTest() { |
473 | var createClassPrecondition = Query.of("CreateClassPrecondition", | 461 | // var createClassPrecondition = Query.of("CreateClassPrecondition", |
474 | (builder, model) -> builder.clause( | 462 | // (builder, model) -> builder.clause( |
475 | classModelView.call(model) | 463 | // classModelView.call(model) |
476 | )); | 464 | // )); |
477 | 465 | // | |
478 | var createClassRule = new TransformationRule("CreateClass", | 466 | // var createClassRule = new TransformationRule("CreateClass", |
479 | createClassPrecondition, | 467 | // createClassPrecondition, |
480 | (model) -> { | 468 | // (model) -> { |
481 | var classesInterpretation = model.getInterpretation(classes); | 469 | // var classesInterpretation = model.getInterpretation(classes); |
482 | var classElementInterpretation = model.getInterpretation(classElement); | 470 | // var classElementInterpretation = model.getInterpretation(classElement); |
483 | return ((Tuple activation) -> { | 471 | // return ((Tuple activation) -> { |
484 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 472 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
485 | var modelElement = activation.get(0); | 473 | // var modelElement = activation.get(0); |
486 | 474 | // | |
487 | var newClassElement = dseAdapter.createObject(); | 475 | // var newClassElement = dseAdapter.createObject(); |
488 | var newClassElementId = newClassElement.get(0); | 476 | // var newClassElementId = newClassElement.get(0); |
489 | 477 | // | |
490 | classesInterpretation.put(Tuple.of(modelElement, newClassElementId), true); | 478 | // classesInterpretation.put(Tuple.of(modelElement, newClassElementId), true); |
491 | classElementInterpretation.put(Tuple.of(newClassElementId), true); | 479 | // classElementInterpretation.put(Tuple.of(newClassElementId), true); |
492 | }); | 480 | // }); |
493 | }); | 481 | // }); |
494 | 482 | // | |
495 | var createFeaturePrecondition = Query.of("CreateFeaturePrecondition", | 483 | // var createFeaturePrecondition = Query.of("CreateFeaturePrecondition", |
496 | (builder, model) -> builder.clause( | 484 | // (builder, model) -> builder.clause( |
497 | classModelView.call(model) | 485 | // classModelView.call(model) |
498 | )); | 486 | // )); |
499 | 487 | // | |
500 | var createFeatureRule = new TransformationRule("CreateFeature", | 488 | // var createFeatureRule = new TransformationRule("CreateFeature", |
501 | createFeaturePrecondition, | 489 | // createFeaturePrecondition, |
502 | (model) -> { | 490 | // (model) -> { |
503 | var featuresInterpretation = model.getInterpretation(features); | 491 | // var featuresInterpretation = model.getInterpretation(features); |
504 | var featureInterpretation = model.getInterpretation(feature); | 492 | // var featureInterpretation = model.getInterpretation(feature); |
505 | return ((Tuple activation) -> { | 493 | // return ((Tuple activation) -> { |
506 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 494 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
507 | var modelElement = activation.get(0); | 495 | // var modelElement = activation.get(0); |
508 | 496 | // | |
509 | var newClassElement = dseAdapter.createObject(); | 497 | // var newClassElement = dseAdapter.createObject(); |
510 | var newClassElementId = newClassElement.get(0); | 498 | // var newClassElementId = newClassElement.get(0); |
511 | 499 | // | |
512 | featuresInterpretation.put(Tuple.of(modelElement, newClassElementId), true); | 500 | // featuresInterpretation.put(Tuple.of(modelElement, newClassElementId), true); |
513 | featureInterpretation.put(Tuple.of(newClassElementId), true); | 501 | // featureInterpretation.put(Tuple.of(newClassElementId), true); |
514 | }); | 502 | // }); |
515 | }); | 503 | // }); |
516 | 504 | // | |
517 | var store = ModelStore.builder() | 505 | // var store = ModelStore.builder() |
518 | .symbols(classModel, classElement, classes, feature, features, isEncapsulatedBy, encapsulates) | 506 | // .symbols(classModel, classElement, classes, feature, features, isEncapsulatedBy, encapsulates) |
519 | .with(ViatraModelQueryAdapter.builder() | 507 | // .with(ViatraModelQueryAdapter.builder() |
520 | .queries(createClassPrecondition, createFeaturePrecondition)) | 508 | // .queries(createClassPrecondition, createFeaturePrecondition)) |
521 | .with(DesignSpaceExplorationAdapter.builder() | 509 | // .with(DesignSpaceExplorationAdapter.builder() |
522 | .transformations(createClassRule, createFeatureRule) | 510 | // .transformations(createClassRule, createFeatureRule) |
523 | .strategy(new BestFirstStrategy().withDepthLimit(10).continueIfHardObjectivesFulfilled() | 511 | // .strategy(new BestFirstStrategy().withDepthLimit(10).continueIfHardObjectivesFulfilled() |
524 | )) | 512 | // )) |
525 | .build(); | 513 | // .build(); |
526 | 514 | // | |
527 | var model = store.createEmptyModel(); | 515 | // var model = store.createEmptyModel(); |
528 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 516 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
529 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); | 517 | // var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
530 | 518 | // | |
531 | var modelElementInterpretation = model.getInterpretation(classModel); | 519 | // var modelElementInterpretation = model.getInterpretation(classModel); |
532 | modelElementInterpretation.put(dseAdapter.createObject(), true); | 520 | // modelElementInterpretation.put(dseAdapter.createObject(), true); |
533 | queryEngine.flushChanges(); | 521 | // queryEngine.flushChanges(); |
534 | 522 | // | |
535 | var states = dseAdapter.explore(); | 523 | // var states = dseAdapter.explore(); |
536 | assertEquals(2047, states.size()); | 524 | // assertEquals(2047, states.size()); |
537 | } | 525 | // } |
538 | 526 | // | |
539 | @Test | 527 | // @Test |
540 | void BeFSSolutionLimitTest() { | 528 | // void BeFSSolutionLimitTest() { |
541 | var createClassPrecondition = Query.of("CreateClassPrecondition", | 529 | // var createClassPrecondition = Query.of("CreateClassPrecondition", |
542 | (builder, model) -> builder.clause( | 530 | // (builder, model) -> builder.clause( |
543 | classModelView.call(model) | 531 | // classModelView.call(model) |
544 | )); | 532 | // )); |
545 | 533 | // | |
546 | var createClassRule = new TransformationRule("CreateClass", | 534 | // var createClassRule = new TransformationRule("CreateClass", |
547 | createClassPrecondition, | 535 | // createClassPrecondition, |
548 | (model) -> { | 536 | // (model) -> { |
549 | var classesInterpretation = model.getInterpretation(classes); | 537 | // var classesInterpretation = model.getInterpretation(classes); |
550 | var classElementInterpretation = model.getInterpretation(classElement); | 538 | // var classElementInterpretation = model.getInterpretation(classElement); |
551 | return ((Tuple activation) -> { | 539 | // return ((Tuple activation) -> { |
552 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 540 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
553 | var modelElement = activation.get(0); | 541 | // var modelElement = activation.get(0); |
554 | 542 | // | |
555 | var newClassElement = dseAdapter.createObject(); | 543 | // var newClassElement = dseAdapter.createObject(); |
556 | var newClassElementId = newClassElement.get(0); | 544 | // var newClassElementId = newClassElement.get(0); |
557 | 545 | // | |
558 | classesInterpretation.put(Tuple.of(modelElement, newClassElementId), true); | 546 | // classesInterpretation.put(Tuple.of(modelElement, newClassElementId), true); |
559 | classElementInterpretation.put(Tuple.of(newClassElementId), true); | 547 | // classElementInterpretation.put(Tuple.of(newClassElementId), true); |
560 | }); | 548 | // }); |
561 | }); | 549 | // }); |
562 | 550 | // | |
563 | var createFeaturePrecondition = Query.of("CreateFeaturePrecondition", | 551 | // var createFeaturePrecondition = Query.of("CreateFeaturePrecondition", |
564 | (builder, model) -> builder.clause( | 552 | // (builder, model) -> builder.clause( |
565 | classModelView.call(model) | 553 | // classModelView.call(model) |
566 | )); | 554 | // )); |
567 | 555 | // | |
568 | var createFeatureRule = new TransformationRule("CreateFeature", | 556 | // var createFeatureRule = new TransformationRule("CreateFeature", |
569 | createFeaturePrecondition, | 557 | // createFeaturePrecondition, |
570 | (model) -> { | 558 | // (model) -> { |
571 | var featuresInterpretation = model.getInterpretation(features); | 559 | // var featuresInterpretation = model.getInterpretation(features); |
572 | var featureInterpretation = model.getInterpretation(feature); | 560 | // var featureInterpretation = model.getInterpretation(feature); |
573 | return ((Tuple activation) -> { | 561 | // return ((Tuple activation) -> { |
574 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 562 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
575 | var modelElement = activation.get(0); | 563 | // var modelElement = activation.get(0); |
576 | 564 | // | |
577 | var newClassElement = dseAdapter.createObject(); | 565 | // var newClassElement = dseAdapter.createObject(); |
578 | var newClassElementId = newClassElement.get(0); | 566 | // var newClassElementId = newClassElement.get(0); |
579 | 567 | // | |
580 | featuresInterpretation.put(Tuple.of(modelElement, newClassElementId), true); | 568 | // featuresInterpretation.put(Tuple.of(modelElement, newClassElementId), true); |
581 | featureInterpretation.put(Tuple.of(newClassElementId), true); | 569 | // featureInterpretation.put(Tuple.of(newClassElementId), true); |
582 | }); | 570 | // }); |
583 | }); | 571 | // }); |
584 | 572 | // | |
585 | var store = ModelStore.builder() | 573 | // var store = ModelStore.builder() |
586 | .symbols(classModel, classElement, classes, feature, features, isEncapsulatedBy, encapsulates) | 574 | // .symbols(classModel, classElement, classes, feature, features, isEncapsulatedBy, encapsulates) |
587 | .with(ViatraModelQueryAdapter.builder() | 575 | // .with(ViatraModelQueryAdapter.builder() |
588 | .queries(createClassPrecondition, createFeaturePrecondition)) | 576 | // .queries(createClassPrecondition, createFeaturePrecondition)) |
589 | .with(DesignSpaceExplorationAdapter.builder() | 577 | // .with(DesignSpaceExplorationAdapter.builder() |
590 | .transformations(createClassRule, createFeatureRule) | 578 | // .transformations(createClassRule, createFeatureRule) |
591 | .strategy(new BestFirstStrategy().withSolutionLimit(222) | 579 | // .strategy(new BestFirstStrategy().withSolutionLimit(222) |
592 | .continueIfHardObjectivesFulfilled() | 580 | // .continueIfHardObjectivesFulfilled() |
593 | )) | 581 | // )) |
594 | .build(); | 582 | // .build(); |
595 | 583 | // | |
596 | var model = store.createEmptyModel(); | 584 | // var model = store.createEmptyModel(); |
597 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 585 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
598 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); | 586 | // var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
599 | 587 | // | |
600 | var modelElementInterpretation = model.getInterpretation(classModel); | 588 | // var modelElementInterpretation = model.getInterpretation(classModel); |
601 | modelElementInterpretation.put(dseAdapter.createObject(), true); | 589 | // modelElementInterpretation.put(dseAdapter.createObject(), true); |
602 | queryEngine.flushChanges(); | 590 | // queryEngine.flushChanges(); |
603 | 591 | // | |
604 | var states = dseAdapter.explore(); | 592 | // var states = dseAdapter.explore(); |
605 | assertEquals(222, states.size()); | 593 | // assertEquals(222, states.size()); |
606 | } | 594 | // } |
607 | 595 | ||
608 | } | 596 | } |
diff --git a/subprojects/store-dse/src/test/java/tools/refinery/store/dse/TransformationRuleTest.java b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/TransformationRuleTest.java index 1672b63a..43b04e0d 100644 --- a/subprojects/store-dse/src/test/java/tools/refinery/store/dse/TransformationRuleTest.java +++ b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/TransformationRuleTest.java | |||
@@ -6,409 +6,409 @@ | |||
6 | package tools.refinery.store.dse; | 6 | package tools.refinery.store.dse; |
7 | 7 | ||
8 | import org.junit.jupiter.api.Test; | 8 | import org.junit.jupiter.api.Test; |
9 | import tools.refinery.store.dse.strategy.DepthFirstStrategy; | 9 | // |
10 | import tools.refinery.store.dse.transition.DesignSpaceExplorationAdapter; | 10 | //import tools.refinery.store.dse.transition.DesignSpaceExplorationAdapter; |
11 | import tools.refinery.store.model.ModelStore; | 11 | //import tools.refinery.store.model.ModelStore; |
12 | import tools.refinery.store.query.ModelQueryAdapter; | 12 | //import tools.refinery.store.query.ModelQueryAdapter; |
13 | import tools.refinery.store.query.dnf.Query; | 13 | //import tools.refinery.store.query.dnf.Query; |
14 | import tools.refinery.store.dse.transition.TransformationRule; | 14 | //import tools.refinery.store.dse.transition.TransformationRule; |
15 | import tools.refinery.store.query.viatra.ViatraModelQueryAdapter; | 15 | //import tools.refinery.store.query.viatra.ViatraModelQueryAdapter; |
16 | import tools.refinery.store.query.view.AnySymbolView; | 16 | //import tools.refinery.store.query.view.AnySymbolView; |
17 | import tools.refinery.store.query.view.KeyOnlyView; | 17 | //import tools.refinery.store.query.view.KeyOnlyView; |
18 | import tools.refinery.store.representation.Symbol; | 18 | //import tools.refinery.store.representation.Symbol; |
19 | import tools.refinery.store.tuple.Tuple; | 19 | //import tools.refinery.store.tuple.Tuple; |
20 | 20 | // | |
21 | import java.util.List; | 21 | //import java.util.List; |
22 | import java.util.Map; | 22 | //import java.util.Map; |
23 | 23 | // | |
24 | import static org.junit.jupiter.api.Assertions.assertEquals; | 24 | //import static org.junit.jupiter.api.Assertions.assertEquals; |
25 | import static tools.refinery.store.query.literal.Literals.not; | 25 | //import static tools.refinery.store.query.literal.Literals.not; |
26 | import static tools.refinery.store.dse.tests.QueryAssertions.assertResults; | 26 | //import static tools.refinery.store.dse.tests.QueryAssertions.assertResults; |
27 | 27 | // | |
28 | class TransformationRuleTest { | 28 | class TransformationRuleTest { |
29 | 29 | // | |
30 | private static final Symbol<Boolean> classModel = Symbol.of("ClassModel", 1); | 30 | // private static final Symbol<Boolean> classModel = Symbol.of("ClassModel", 1); |
31 | private static final Symbol<Boolean> classElement = Symbol.of("ClassElement", 1); | 31 | // private static final Symbol<Boolean> classElement = Symbol.of("ClassElement", 1); |
32 | private static final Symbol<Boolean> feature = Symbol.of("Feature", 1); | 32 | // private static final Symbol<Boolean> feature = Symbol.of("Feature", 1); |
33 | 33 | // | |
34 | private static final Symbol<Boolean> isEncapsulatedBy = Symbol.of("IsEncapsulatedBy", 2); | 34 | // private static final Symbol<Boolean> isEncapsulatedBy = Symbol.of("IsEncapsulatedBy", 2); |
35 | private static final Symbol<Boolean> encapsulates = Symbol.of("Encapsulates", 2); | 35 | // private static final Symbol<Boolean> encapsulates = Symbol.of("Encapsulates", 2); |
36 | 36 | // | |
37 | private static final Symbol<Boolean> features = Symbol.of("Features", 2); | 37 | // private static final Symbol<Boolean> features = Symbol.of("Features", 2); |
38 | private static final Symbol<Boolean> classes = Symbol.of("Classes", 2); | 38 | // private static final Symbol<Boolean> classes = Symbol.of("Classes", 2); |
39 | 39 | // | |
40 | private static final AnySymbolView classModelView = new KeyOnlyView<>(classModel); | 40 | // private static final AnySymbolView classModelView = new KeyOnlyView<>(classModel); |
41 | private static final AnySymbolView classElementView = new KeyOnlyView<>(classElement); | 41 | // private static final AnySymbolView classElementView = new KeyOnlyView<>(classElement); |
42 | private static final AnySymbolView featureView = new KeyOnlyView<>(feature); | 42 | // private static final AnySymbolView featureView = new KeyOnlyView<>(feature); |
43 | private static final AnySymbolView isEncapsulatedByView = new KeyOnlyView<>(isEncapsulatedBy); | 43 | // private static final AnySymbolView isEncapsulatedByView = new KeyOnlyView<>(isEncapsulatedBy); |
44 | private static final AnySymbolView encapsulatesView = new KeyOnlyView<>(encapsulates); | 44 | // private static final AnySymbolView encapsulatesView = new KeyOnlyView<>(encapsulates); |
45 | private static final AnySymbolView featuresView = new KeyOnlyView<>(features); | 45 | // private static final AnySymbolView featuresView = new KeyOnlyView<>(features); |
46 | private static final AnySymbolView classesView = new KeyOnlyView<>(classes); | 46 | // private static final AnySymbolView classesView = new KeyOnlyView<>(classes); |
47 | 47 | // | |
48 | @Test | 48 | // @Test |
49 | void activationsTest() { | 49 | // void activationsTest() { |
50 | var assignFeaturePreconditionHelper = Query.of("AssignFeaturePreconditionHelper", | 50 | // var assignFeaturePreconditionHelper = Query.of("AssignFeaturePreconditionHelper", |
51 | (builder, model, c, f) -> builder.clause( | 51 | // (builder, model, c, f) -> builder.clause( |
52 | classElementView.call(c), | 52 | // classElementView.call(c), |
53 | classesView.call(model, c), | 53 | // classesView.call(model, c), |
54 | encapsulatesView.call(c, f) | 54 | // encapsulatesView.call(c, f) |
55 | )); | 55 | // )); |
56 | 56 | // | |
57 | var assignFeaturePrecondition = Query.of("AssignFeaturePrecondition", (builder, c2, f) | 57 | // var assignFeaturePrecondition = Query.of("AssignFeaturePrecondition", (builder, c2, f) |
58 | -> builder.clause((model, c1) -> List.of( | 58 | // -> builder.clause((model, c1) -> List.of( |
59 | classModelView.call(model), | 59 | // classModelView.call(model), |
60 | featureView.call(f), | 60 | // featureView.call(f), |
61 | classElementView.call(c2), | 61 | // classElementView.call(c2), |
62 | featuresView.call(model, f), | 62 | // featuresView.call(model, f), |
63 | classesView.call(model, c1), | 63 | // classesView.call(model, c1), |
64 | not(assignFeaturePreconditionHelper.call(model, c2, f)), | 64 | // not(assignFeaturePreconditionHelper.call(model, c2, f)), |
65 | not(encapsulatesView.call(c2, f)) | 65 | // not(encapsulatesView.call(c2, f)) |
66 | ))); | 66 | // ))); |
67 | 67 | // | |
68 | var deleteEmptyClassPrecondition = Query.of("DeleteEmptyClassPrecondition", | 68 | // var deleteEmptyClassPrecondition = Query.of("DeleteEmptyClassPrecondition", |
69 | (builder, model, c) -> builder.clause((f) -> List.of( | 69 | // (builder, model, c) -> builder.clause((f) -> List.of( |
70 | classModelView.call(model), | 70 | // classModelView.call(model), |
71 | classElementView.call(c), | 71 | // classElementView.call(c), |
72 | featuresView.call(model, f), | 72 | // featuresView.call(model, f), |
73 | not(encapsulatesView.call(c, f)) | 73 | // not(encapsulatesView.call(c, f)) |
74 | ))); | 74 | // ))); |
75 | 75 | // | |
76 | TransformationRule assignFeatureRule = new TransformationRule("AssignFeature", | 76 | // TransformationRule assignFeatureRule = new TransformationRule("AssignFeature", |
77 | assignFeaturePrecondition, | 77 | // assignFeaturePrecondition, |
78 | (model) -> { | 78 | // (model) -> { |
79 | var isEncapsulatedByInterpretation = model.getInterpretation(isEncapsulatedBy); | 79 | // var isEncapsulatedByInterpretation = model.getInterpretation(isEncapsulatedBy); |
80 | return ((Tuple activation) -> { | 80 | // return ((Tuple activation) -> { |
81 | var feature = activation.get(0); | 81 | // var feature = activation.get(0); |
82 | var classElement = activation.get(1); | 82 | // var classElement = activation.get(1); |
83 | 83 | // | |
84 | isEncapsulatedByInterpretation.put(Tuple.of(feature, classElement), true); | 84 | // isEncapsulatedByInterpretation.put(Tuple.of(feature, classElement), true); |
85 | }); | 85 | // }); |
86 | }); | 86 | // }); |
87 | 87 | // | |
88 | TransformationRule deleteEmptyClassRule = new TransformationRule("DeleteEmptyClass", | 88 | // TransformationRule deleteEmptyClassRule = new TransformationRule("DeleteEmptyClass", |
89 | deleteEmptyClassPrecondition, | 89 | // deleteEmptyClassPrecondition, |
90 | (model) -> { | 90 | // (model) -> { |
91 | var classesInterpretation = model.getInterpretation(classes); | 91 | // var classesInterpretation = model.getInterpretation(classes); |
92 | var classElementInterpretation = model.getInterpretation(classElement); | 92 | // var classElementInterpretation = model.getInterpretation(classElement); |
93 | return ((Tuple activation) -> { | 93 | // return ((Tuple activation) -> { |
94 | var modelElement = activation.get(0); | 94 | // var modelElement = activation.get(0); |
95 | var classElement = activation.get(1); | 95 | // var classElement = activation.get(1); |
96 | 96 | // | |
97 | classesInterpretation.put(Tuple.of(modelElement, classElement), false); | 97 | // classesInterpretation.put(Tuple.of(modelElement, classElement), false); |
98 | classElementInterpretation.put(Tuple.of(classElement), false); | 98 | // classElementInterpretation.put(Tuple.of(classElement), false); |
99 | }); | 99 | // }); |
100 | }); | 100 | // }); |
101 | 101 | // | |
102 | 102 | // | |
103 | var store = ModelStore.builder() | 103 | // var store = ModelStore.builder() |
104 | .symbols(classModel, classElement, feature, isEncapsulatedBy, encapsulates, classes, features) | 104 | // .symbols(classModel, classElement, feature, isEncapsulatedBy, encapsulates, classes, features) |
105 | .with(ViatraModelQueryAdapter.builder() | 105 | // .with(ViatraModelQueryAdapter.builder() |
106 | .queries(assignFeaturePrecondition, assignFeaturePreconditionHelper, | 106 | // .queries(assignFeaturePrecondition, assignFeaturePreconditionHelper, |
107 | deleteEmptyClassPrecondition)) | 107 | // deleteEmptyClassPrecondition)) |
108 | .with(DesignSpaceExplorationAdapter.builder() | 108 | // .with(DesignSpaceExplorationAdapter.builder() |
109 | .strategy(new DepthFirstStrategy().withDepthLimit(0))) | 109 | // .strategy(new DepthFirstStrategy().withDepthLimit(0))) |
110 | .build(); | 110 | // .build(); |
111 | 111 | // | |
112 | var model = store.createEmptyModel(); | 112 | // var model = store.createEmptyModel(); |
113 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); | 113 | // var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
114 | assignFeatureRule.prepare(model, queryEngine); | 114 | // assignFeatureRule.prepare(model, queryEngine); |
115 | deleteEmptyClassRule.prepare(model, queryEngine); | 115 | // deleteEmptyClassRule.prepare(model, queryEngine); |
116 | 116 | // | |
117 | var classModelInterpretation = model.getInterpretation(classModel); | 117 | // var classModelInterpretation = model.getInterpretation(classModel); |
118 | var classElementInterpretation = model.getInterpretation(classElement); | 118 | // var classElementInterpretation = model.getInterpretation(classElement); |
119 | var featureInterpretation = model.getInterpretation(feature); | 119 | // var featureInterpretation = model.getInterpretation(feature); |
120 | var featuresInterpretation = model.getInterpretation(features); | 120 | // var featuresInterpretation = model.getInterpretation(features); |
121 | var classesInterpretation = model.getInterpretation(classes); | 121 | // var classesInterpretation = model.getInterpretation(classes); |
122 | 122 | // | |
123 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 123 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
124 | var newModel = dseAdapter.createObject(); | 124 | // var newModel = dseAdapter.createObject(); |
125 | var newModelId = newModel.get(0); | 125 | // var newModelId = newModel.get(0); |
126 | var newClass1 = dseAdapter.createObject(); | 126 | // var newClass1 = dseAdapter.createObject(); |
127 | var newClass1Id = newClass1.get(0); | 127 | // var newClass1Id = newClass1.get(0); |
128 | var newClass2 = dseAdapter.createObject(); | 128 | // var newClass2 = dseAdapter.createObject(); |
129 | var newClass2Id = newClass2.get(0); | 129 | // var newClass2Id = newClass2.get(0); |
130 | var newField = dseAdapter.createObject(); | 130 | // var newField = dseAdapter.createObject(); |
131 | var newFieldId = newField.get(0); | 131 | // var newFieldId = newField.get(0); |
132 | 132 | // | |
133 | classModelInterpretation.put(newModel, true); | 133 | // classModelInterpretation.put(newModel, true); |
134 | classElementInterpretation.put(newClass1, true); | 134 | // classElementInterpretation.put(newClass1, true); |
135 | classElementInterpretation.put(newClass2, true); | 135 | // classElementInterpretation.put(newClass2, true); |
136 | featureInterpretation.put(newField, true); | 136 | // featureInterpretation.put(newField, true); |
137 | classesInterpretation.put(Tuple.of(newModelId, newClass1Id), true); | 137 | // classesInterpretation.put(Tuple.of(newModelId, newClass1Id), true); |
138 | classesInterpretation.put(Tuple.of(newModelId, newClass2Id), true); | 138 | // classesInterpretation.put(Tuple.of(newModelId, newClass2Id), true); |
139 | featuresInterpretation.put(Tuple.of(newModelId, newFieldId), true); | 139 | // featuresInterpretation.put(Tuple.of(newModelId, newFieldId), true); |
140 | 140 | // | |
141 | queryEngine.flushChanges(); | 141 | // queryEngine.flushChanges(); |
142 | 142 | // | |
143 | var assignFeatureRuleActivations = assignFeatureRule.getAllActivationsAsResultSet(); | 143 | // var assignFeatureRuleActivations = assignFeatureRule.getAllActivationsAsResultSet(); |
144 | var deleteEmptyClassRuleActivations = deleteEmptyClassRule.getAllActivationsAsResultSet(); | 144 | // var deleteEmptyClassRuleActivations = deleteEmptyClassRule.getAllActivationsAsResultSet(); |
145 | 145 | // | |
146 | assertResults(Map.of( | 146 | // assertResults(Map.of( |
147 | Tuple.of(newClass1Id, newFieldId), true, | 147 | // Tuple.of(newClass1Id, newFieldId), true, |
148 | Tuple.of(newClass2Id, newFieldId), true | 148 | // Tuple.of(newClass2Id, newFieldId), true |
149 | ), assignFeatureRuleActivations); | 149 | // ), assignFeatureRuleActivations); |
150 | 150 | // | |
151 | assertResults(Map.of( | 151 | // assertResults(Map.of( |
152 | Tuple.of(newModelId, newClass1Id), true, | 152 | // Tuple.of(newModelId, newClass1Id), true, |
153 | Tuple.of(newModelId, newClass2Id), true | 153 | // Tuple.of(newModelId, newClass2Id), true |
154 | ), deleteEmptyClassRuleActivations); | 154 | // ), deleteEmptyClassRuleActivations); |
155 | } | 155 | // } |
156 | 156 | // | |
157 | @Test | 157 | // @Test |
158 | void randomActivationTest() { | 158 | // void randomActivationTest() { |
159 | var deleteEmptyClassPrecondition = Query.of("DeleteEmptyClassPrecondition", | 159 | // var deleteEmptyClassPrecondition = Query.of("DeleteEmptyClassPrecondition", |
160 | (builder, model, c) -> builder.clause((f) -> List.of( | 160 | // (builder, model, c) -> builder.clause((f) -> List.of( |
161 | classModelView.call(model), | 161 | // classModelView.call(model), |
162 | classElementView.call(c), | 162 | // classElementView.call(c), |
163 | featuresView.call(model, f), | 163 | // featuresView.call(model, f), |
164 | not(encapsulatesView.call(c, f)) | 164 | // not(encapsulatesView.call(c, f)) |
165 | ))); | 165 | // ))); |
166 | 166 | // | |
167 | TransformationRule deleteEmptyClassRule0 = new TransformationRule("DeleteEmptyClass0", | 167 | // TransformationRule deleteEmptyClassRule0 = new TransformationRule("DeleteEmptyClass0", |
168 | deleteEmptyClassPrecondition, | 168 | // deleteEmptyClassPrecondition, |
169 | (model) -> { | 169 | // (model) -> { |
170 | var classesInterpretation = model.getInterpretation(classes); | 170 | // var classesInterpretation = model.getInterpretation(classes); |
171 | var classElementInterpretation = model.getInterpretation(classElement); | 171 | // var classElementInterpretation = model.getInterpretation(classElement); |
172 | return ((Tuple activation) -> { | 172 | // return ((Tuple activation) -> { |
173 | var modelElement = activation.get(0); | 173 | // var modelElement = activation.get(0); |
174 | var classElement = activation.get(1); | 174 | // var classElement = activation.get(1); |
175 | 175 | // | |
176 | classesInterpretation.put(Tuple.of(modelElement, classElement), false); | 176 | // classesInterpretation.put(Tuple.of(modelElement, classElement), false); |
177 | classElementInterpretation.put(Tuple.of(classElement), false); | 177 | // classElementInterpretation.put(Tuple.of(classElement), false); |
178 | }); | 178 | // }); |
179 | }, | 179 | // }, |
180 | 0L); | 180 | // 0L); |
181 | 181 | // | |
182 | TransformationRule deleteEmptyClassRule1 = new TransformationRule("DeleteEmptyClass1", | 182 | // TransformationRule deleteEmptyClassRule1 = new TransformationRule("DeleteEmptyClass1", |
183 | deleteEmptyClassPrecondition, | 183 | // deleteEmptyClassPrecondition, |
184 | (model) -> { | 184 | // (model) -> { |
185 | var classesInterpretation = model.getInterpretation(classes); | 185 | // var classesInterpretation = model.getInterpretation(classes); |
186 | var classElementInterpretation = model.getInterpretation(classElement); | 186 | // var classElementInterpretation = model.getInterpretation(classElement); |
187 | return ((Tuple activation) -> { | 187 | // return ((Tuple activation) -> { |
188 | var modelElement = activation.get(0); | 188 | // var modelElement = activation.get(0); |
189 | var classElement = activation.get(1); | 189 | // var classElement = activation.get(1); |
190 | 190 | // | |
191 | classesInterpretation.put(Tuple.of(modelElement, classElement), false); | 191 | // classesInterpretation.put(Tuple.of(modelElement, classElement), false); |
192 | classElementInterpretation.put(Tuple.of(classElement), false); | 192 | // classElementInterpretation.put(Tuple.of(classElement), false); |
193 | }); | 193 | // }); |
194 | }, | 194 | // }, |
195 | 78634L); | 195 | // 78634L); |
196 | 196 | // | |
197 | var store = ModelStore.builder() | 197 | // var store = ModelStore.builder() |
198 | .symbols(classModel, classElement, feature, isEncapsulatedBy, encapsulates, classes, features) | 198 | // .symbols(classModel, classElement, feature, isEncapsulatedBy, encapsulates, classes, features) |
199 | .with(ViatraModelQueryAdapter.builder() | 199 | // .with(ViatraModelQueryAdapter.builder() |
200 | .queries(deleteEmptyClassPrecondition)) | 200 | // .queries(deleteEmptyClassPrecondition)) |
201 | .with(DesignSpaceExplorationAdapter.builder() | 201 | // .with(DesignSpaceExplorationAdapter.builder() |
202 | .strategy(new DepthFirstStrategy().withDepthLimit(0))) | 202 | // .strategy(new DepthFirstStrategy().withDepthLimit(0))) |
203 | .build(); | 203 | // .build(); |
204 | 204 | // | |
205 | var model = store.createEmptyModel(); | 205 | // var model = store.createEmptyModel(); |
206 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); | 206 | // var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
207 | deleteEmptyClassRule0.prepare(model, queryEngine); | 207 | // deleteEmptyClassRule0.prepare(model, queryEngine); |
208 | deleteEmptyClassRule1.prepare(model, queryEngine); | 208 | // deleteEmptyClassRule1.prepare(model, queryEngine); |
209 | 209 | // | |
210 | var classModelInterpretation = model.getInterpretation(classModel); | 210 | // var classModelInterpretation = model.getInterpretation(classModel); |
211 | var classElementInterpretation = model.getInterpretation(classElement); | 211 | // var classElementInterpretation = model.getInterpretation(classElement); |
212 | var featureInterpretation = model.getInterpretation(feature); | 212 | // var featureInterpretation = model.getInterpretation(feature); |
213 | var featuresInterpretation = model.getInterpretation(features); | 213 | // var featuresInterpretation = model.getInterpretation(features); |
214 | var classesInterpretation = model.getInterpretation(classes); | 214 | // var classesInterpretation = model.getInterpretation(classes); |
215 | 215 | // | |
216 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 216 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
217 | var newModel = dseAdapter.createObject(); | 217 | // var newModel = dseAdapter.createObject(); |
218 | var newModelId = newModel.get(0); | 218 | // var newModelId = newModel.get(0); |
219 | var newClass1 = dseAdapter.createObject(); | 219 | // var newClass1 = dseAdapter.createObject(); |
220 | var newClass1Id = newClass1.get(0); | 220 | // var newClass1Id = newClass1.get(0); |
221 | var newClass2 = dseAdapter.createObject(); | 221 | // var newClass2 = dseAdapter.createObject(); |
222 | var newClass2Id = newClass2.get(0); | 222 | // var newClass2Id = newClass2.get(0); |
223 | var newField = dseAdapter.createObject(); | 223 | // var newField = dseAdapter.createObject(); |
224 | var newFieldId = newField.get(0); | 224 | // var newFieldId = newField.get(0); |
225 | 225 | // | |
226 | classModelInterpretation.put(newModel, true); | 226 | // classModelInterpretation.put(newModel, true); |
227 | classElementInterpretation.put(newClass1, true); | 227 | // classElementInterpretation.put(newClass1, true); |
228 | classElementInterpretation.put(newClass2, true); | 228 | // classElementInterpretation.put(newClass2, true); |
229 | featureInterpretation.put(newField, true); | 229 | // featureInterpretation.put(newField, true); |
230 | classesInterpretation.put(Tuple.of(newModelId, newClass1Id), true); | 230 | // classesInterpretation.put(Tuple.of(newModelId, newClass1Id), true); |
231 | classesInterpretation.put(Tuple.of(newModelId, newClass2Id), true); | 231 | // classesInterpretation.put(Tuple.of(newModelId, newClass2Id), true); |
232 | featuresInterpretation.put(Tuple.of(newModelId, newFieldId), true); | 232 | // featuresInterpretation.put(Tuple.of(newModelId, newFieldId), true); |
233 | 233 | // | |
234 | queryEngine.flushChanges(); | 234 | // queryEngine.flushChanges(); |
235 | 235 | // | |
236 | 236 | // | |
237 | var activation0 = deleteEmptyClassRule0.getRandomActivation().activation(); | 237 | // var activation0 = deleteEmptyClassRule0.getRandomActivation().activation(); |
238 | var activation1 = deleteEmptyClassRule1.getRandomActivation().activation(); | 238 | // var activation1 = deleteEmptyClassRule1.getRandomActivation().activation(); |
239 | 239 | // | |
240 | assertResults(Map.of( | 240 | // assertResults(Map.of( |
241 | Tuple.of(newModelId, newClass1Id), true, | 241 | // Tuple.of(newModelId, newClass1Id), true, |
242 | Tuple.of(newModelId, newClass2Id), true | 242 | // Tuple.of(newModelId, newClass2Id), true |
243 | ), deleteEmptyClassRule0.getAllActivationsAsResultSet()); | 243 | // ), deleteEmptyClassRule0.getAllActivationsAsResultSet()); |
244 | 244 | // | |
245 | assertResults(Map.of( | 245 | // assertResults(Map.of( |
246 | Tuple.of(newModelId, newClass1Id), true, | 246 | // Tuple.of(newModelId, newClass1Id), true, |
247 | Tuple.of(newModelId, newClass2Id), true | 247 | // Tuple.of(newModelId, newClass2Id), true |
248 | ), deleteEmptyClassRule1.getAllActivationsAsResultSet()); | 248 | // ), deleteEmptyClassRule1.getAllActivationsAsResultSet()); |
249 | 249 | // | |
250 | assertEquals(Tuple.of(newModelId, newClass2Id), activation0); | 250 | // assertEquals(Tuple.of(newModelId, newClass2Id), activation0); |
251 | assertEquals(Tuple.of(newModelId, newClass1Id), activation1); | 251 | // assertEquals(Tuple.of(newModelId, newClass1Id), activation1); |
252 | 252 | // | |
253 | } | 253 | // } |
254 | 254 | // | |
255 | @Test | 255 | // @Test |
256 | void fireTest() { | 256 | // void fireTest() { |
257 | var deleteEmptyClassPrecondition = Query.of("DeleteEmptyClassPrecondition", | 257 | // var deleteEmptyClassPrecondition = Query.of("DeleteEmptyClassPrecondition", |
258 | (builder, model, c) -> builder.clause((f) -> List.of( | 258 | // (builder, model, c) -> builder.clause((f) -> List.of( |
259 | classModelView.call(model), | 259 | // classModelView.call(model), |
260 | classElementView.call(c), | 260 | // classElementView.call(c), |
261 | featuresView.call(model, f), | 261 | // featuresView.call(model, f), |
262 | not(encapsulatesView.call(c, f)) | 262 | // not(encapsulatesView.call(c, f)) |
263 | ))); | 263 | // ))); |
264 | 264 | // | |
265 | TransformationRule deleteEmptyClassRule = new TransformationRule("DeleteEmptyClass", | 265 | // TransformationRule deleteEmptyClassRule = new TransformationRule("DeleteEmptyClass", |
266 | deleteEmptyClassPrecondition, | 266 | // deleteEmptyClassPrecondition, |
267 | (model) -> { | 267 | // (model) -> { |
268 | var classesInterpretation = model.getInterpretation(classes); | 268 | // var classesInterpretation = model.getInterpretation(classes); |
269 | var classElementInterpretation = model.getInterpretation(classElement); | 269 | // var classElementInterpretation = model.getInterpretation(classElement); |
270 | return ((Tuple activation) -> { | 270 | // return ((Tuple activation) -> { |
271 | var modelElement = activation.get(0); | 271 | // var modelElement = activation.get(0); |
272 | var classElement = activation.get(1); | 272 | // var classElement = activation.get(1); |
273 | 273 | // | |
274 | classesInterpretation.put(Tuple.of(modelElement, classElement), false); | 274 | // classesInterpretation.put(Tuple.of(modelElement, classElement), false); |
275 | classElementInterpretation.put(Tuple.of(classElement), false); | 275 | // classElementInterpretation.put(Tuple.of(classElement), false); |
276 | }); | 276 | // }); |
277 | }); | 277 | // }); |
278 | 278 | // | |
279 | var store = ModelStore.builder() | 279 | // var store = ModelStore.builder() |
280 | .symbols(classModel, classElement, feature, isEncapsulatedBy, encapsulates, classes, features) | 280 | // .symbols(classModel, classElement, feature, isEncapsulatedBy, encapsulates, classes, features) |
281 | .with(ViatraModelQueryAdapter.builder() | 281 | // .with(ViatraModelQueryAdapter.builder() |
282 | .queries(deleteEmptyClassPrecondition)) | 282 | // .queries(deleteEmptyClassPrecondition)) |
283 | .with(DesignSpaceExplorationAdapter.builder() | 283 | // .with(DesignSpaceExplorationAdapter.builder() |
284 | .strategy(new DepthFirstStrategy().withDepthLimit(0))) | 284 | // .strategy(new DepthFirstStrategy().withDepthLimit(0))) |
285 | .build(); | 285 | // .build(); |
286 | 286 | // | |
287 | var model = store.createEmptyModel(); | 287 | // var model = store.createEmptyModel(); |
288 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); | 288 | // var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
289 | deleteEmptyClassRule.prepare(model, queryEngine); | 289 | // deleteEmptyClassRule.prepare(model, queryEngine); |
290 | 290 | // | |
291 | var classModelInterpretation = model.getInterpretation(classModel); | 291 | // var classModelInterpretation = model.getInterpretation(classModel); |
292 | var classElementInterpretation = model.getInterpretation(classElement); | 292 | // var classElementInterpretation = model.getInterpretation(classElement); |
293 | var featureInterpretation = model.getInterpretation(feature); | 293 | // var featureInterpretation = model.getInterpretation(feature); |
294 | var featuresInterpretation = model.getInterpretation(features); | 294 | // var featuresInterpretation = model.getInterpretation(features); |
295 | var classesInterpretation = model.getInterpretation(classes); | 295 | // var classesInterpretation = model.getInterpretation(classes); |
296 | 296 | // | |
297 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 297 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
298 | var newModel = dseAdapter.createObject(); | 298 | // var newModel = dseAdapter.createObject(); |
299 | var newModelId = newModel.get(0); | 299 | // var newModelId = newModel.get(0); |
300 | var newClass1 = dseAdapter.createObject(); | 300 | // var newClass1 = dseAdapter.createObject(); |
301 | var newClass1Id = newClass1.get(0); | 301 | // var newClass1Id = newClass1.get(0); |
302 | var newClass2 = dseAdapter.createObject(); | 302 | // var newClass2 = dseAdapter.createObject(); |
303 | var newClass2Id = newClass2.get(0); | 303 | // var newClass2Id = newClass2.get(0); |
304 | var newField = dseAdapter.createObject(); | 304 | // var newField = dseAdapter.createObject(); |
305 | var newFieldId = newField.get(0); | 305 | // var newFieldId = newField.get(0); |
306 | 306 | // | |
307 | classModelInterpretation.put(newModel, true); | 307 | // classModelInterpretation.put(newModel, true); |
308 | classElementInterpretation.put(newClass1, true); | 308 | // classElementInterpretation.put(newClass1, true); |
309 | classElementInterpretation.put(newClass2, true); | 309 | // classElementInterpretation.put(newClass2, true); |
310 | featureInterpretation.put(newField, true); | 310 | // featureInterpretation.put(newField, true); |
311 | classesInterpretation.put(Tuple.of(newModelId, newClass1Id), true); | 311 | // classesInterpretation.put(Tuple.of(newModelId, newClass1Id), true); |
312 | classesInterpretation.put(Tuple.of(newModelId, newClass2Id), true); | 312 | // classesInterpretation.put(Tuple.of(newModelId, newClass2Id), true); |
313 | featuresInterpretation.put(Tuple.of(newModelId, newFieldId), true); | 313 | // featuresInterpretation.put(Tuple.of(newModelId, newFieldId), true); |
314 | 314 | // | |
315 | queryEngine.flushChanges(); | 315 | // queryEngine.flushChanges(); |
316 | 316 | // | |
317 | assertResults(Map.of( | 317 | // assertResults(Map.of( |
318 | Tuple.of(newModelId, newClass1Id), true, | 318 | // Tuple.of(newModelId, newClass1Id), true, |
319 | Tuple.of(newModelId, newClass2Id), true | 319 | // Tuple.of(newModelId, newClass2Id), true |
320 | ), deleteEmptyClassRule.getAllActivationsAsResultSet()); | 320 | // ), deleteEmptyClassRule.getAllActivationsAsResultSet()); |
321 | 321 | // | |
322 | 322 | // | |
323 | deleteEmptyClassRule.fireActivation(Tuple.of(0, 1)); | 323 | // deleteEmptyClassRule.fireActivation(Tuple.of(0, 1)); |
324 | 324 | // | |
325 | assertResults(Map.of( | 325 | // assertResults(Map.of( |
326 | Tuple.of(newModelId, newClass1Id), false, | 326 | // Tuple.of(newModelId, newClass1Id), false, |
327 | Tuple.of(newModelId, newClass2Id), true | 327 | // Tuple.of(newModelId, newClass2Id), true |
328 | ), deleteEmptyClassRule.getAllActivationsAsResultSet()); | 328 | // ), deleteEmptyClassRule.getAllActivationsAsResultSet()); |
329 | } | 329 | // } |
330 | 330 | // | |
331 | @Test | 331 | // @Test |
332 | void randomFireTest() { | 332 | // void randomFireTest() { |
333 | var deleteEmptyClassPrecondition = Query.of("DeleteEmptyClassPrecondition", | 333 | // var deleteEmptyClassPrecondition = Query.of("DeleteEmptyClassPrecondition", |
334 | (builder, model, c) -> builder.clause((f) -> List.of( | 334 | // (builder, model, c) -> builder.clause((f) -> List.of( |
335 | classModelView.call(model), | 335 | // classModelView.call(model), |
336 | classElementView.call(c), | 336 | // classElementView.call(c), |
337 | featuresView.call(model, f), | 337 | // featuresView.call(model, f), |
338 | not(encapsulatesView.call(c, f)) | 338 | // not(encapsulatesView.call(c, f)) |
339 | ))); | 339 | // ))); |
340 | 340 | // | |
341 | TransformationRule deleteEmptyClassRule = new TransformationRule("DeleteEmptyClass0", | 341 | // TransformationRule deleteEmptyClassRule = new TransformationRule("DeleteEmptyClass0", |
342 | deleteEmptyClassPrecondition, | 342 | // deleteEmptyClassPrecondition, |
343 | (model) -> { | 343 | // (model) -> { |
344 | var classesInterpretation = model.getInterpretation(classes); | 344 | // var classesInterpretation = model.getInterpretation(classes); |
345 | var classElementInterpretation = model.getInterpretation(classElement); | 345 | // var classElementInterpretation = model.getInterpretation(classElement); |
346 | return ((Tuple activation) -> { | 346 | // return ((Tuple activation) -> { |
347 | var modelElement = activation.get(0); | 347 | // var modelElement = activation.get(0); |
348 | var classElement = activation.get(1); | 348 | // var classElement = activation.get(1); |
349 | 349 | // | |
350 | classesInterpretation.put(Tuple.of(modelElement, classElement), false); | 350 | // classesInterpretation.put(Tuple.of(modelElement, classElement), false); |
351 | classElementInterpretation.put(Tuple.of(classElement), false); | 351 | // classElementInterpretation.put(Tuple.of(classElement), false); |
352 | }); | 352 | // }); |
353 | }, | 353 | // }, |
354 | 0L); | 354 | // 0L); |
355 | 355 | // | |
356 | var store = ModelStore.builder() | 356 | // var store = ModelStore.builder() |
357 | .symbols(classModel, classElement, feature, isEncapsulatedBy, encapsulates, classes, features) | 357 | // .symbols(classModel, classElement, feature, isEncapsulatedBy, encapsulates, classes, features) |
358 | .with(ViatraModelQueryAdapter.builder() | 358 | // .with(ViatraModelQueryAdapter.builder() |
359 | .queries(deleteEmptyClassPrecondition)) | 359 | // .queries(deleteEmptyClassPrecondition)) |
360 | .with(DesignSpaceExplorationAdapter.builder() | 360 | // .with(DesignSpaceExplorationAdapter.builder() |
361 | .strategy(new DepthFirstStrategy().withDepthLimit(0))) | 361 | // .strategy(new DepthFirstStrategy().withDepthLimit(0))) |
362 | .build(); | 362 | // .build(); |
363 | 363 | // | |
364 | var model = store.createEmptyModel(); | 364 | // var model = store.createEmptyModel(); |
365 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); | 365 | // var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
366 | deleteEmptyClassRule.prepare(model, queryEngine); | 366 | // deleteEmptyClassRule.prepare(model, queryEngine); |
367 | 367 | // | |
368 | var classModelInterpretation = model.getInterpretation(classModel); | 368 | // var classModelInterpretation = model.getInterpretation(classModel); |
369 | var classElementInterpretation = model.getInterpretation(classElement); | 369 | // var classElementInterpretation = model.getInterpretation(classElement); |
370 | var featureInterpretation = model.getInterpretation(feature); | 370 | // var featureInterpretation = model.getInterpretation(feature); |
371 | var featuresInterpretation = model.getInterpretation(features); | 371 | // var featuresInterpretation = model.getInterpretation(features); |
372 | var classesInterpretation = model.getInterpretation(classes); | 372 | // var classesInterpretation = model.getInterpretation(classes); |
373 | 373 | // | |
374 | var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 374 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); |
375 | var newModel = dseAdapter.createObject(); | 375 | // var newModel = dseAdapter.createObject(); |
376 | var newModelId = newModel.get(0); | 376 | // var newModelId = newModel.get(0); |
377 | var newClass1 = dseAdapter.createObject(); | 377 | // var newClass1 = dseAdapter.createObject(); |
378 | var newClass1Id = newClass1.get(0); | 378 | // var newClass1Id = newClass1.get(0); |
379 | var newClass2 = dseAdapter.createObject(); | 379 | // var newClass2 = dseAdapter.createObject(); |
380 | var newClass2Id = newClass2.get(0); | 380 | // var newClass2Id = newClass2.get(0); |
381 | var newField = dseAdapter.createObject(); | 381 | // var newField = dseAdapter.createObject(); |
382 | var newFieldId = newField.get(0); | 382 | // var newFieldId = newField.get(0); |
383 | 383 | // | |
384 | classModelInterpretation.put(newModel, true); | 384 | // classModelInterpretation.put(newModel, true); |
385 | classElementInterpretation.put(newClass1, true); | 385 | // classElementInterpretation.put(newClass1, true); |
386 | classElementInterpretation.put(newClass2, true); | 386 | // classElementInterpretation.put(newClass2, true); |
387 | featureInterpretation.put(newField, true); | 387 | // featureInterpretation.put(newField, true); |
388 | classesInterpretation.put(Tuple.of(newModelId, newClass1Id), true); | 388 | // classesInterpretation.put(Tuple.of(newModelId, newClass1Id), true); |
389 | classesInterpretation.put(Tuple.of(newModelId, newClass2Id), true); | 389 | // classesInterpretation.put(Tuple.of(newModelId, newClass2Id), true); |
390 | featuresInterpretation.put(Tuple.of(newModelId, newFieldId), true); | 390 | // featuresInterpretation.put(Tuple.of(newModelId, newFieldId), true); |
391 | 391 | // | |
392 | queryEngine.flushChanges(); | 392 | // queryEngine.flushChanges(); |
393 | 393 | // | |
394 | assertResults(Map.of( | 394 | // assertResults(Map.of( |
395 | Tuple.of(newModelId, newClass1Id), true, | 395 | // Tuple.of(newModelId, newClass1Id), true, |
396 | Tuple.of(newModelId, newClass2Id), true | 396 | // Tuple.of(newModelId, newClass2Id), true |
397 | ), deleteEmptyClassRule.getAllActivationsAsResultSet()); | 397 | // ), deleteEmptyClassRule.getAllActivationsAsResultSet()); |
398 | 398 | // | |
399 | deleteEmptyClassRule.fireRandomActivation(); | 399 | // deleteEmptyClassRule.fireRandomActivation(); |
400 | 400 | // | |
401 | assertResults(Map.of( | 401 | // assertResults(Map.of( |
402 | Tuple.of(newModelId, newClass1Id), true, | 402 | // Tuple.of(newModelId, newClass1Id), true, |
403 | Tuple.of(newModelId, newClass2Id), false | 403 | // Tuple.of(newModelId, newClass2Id), false |
404 | ), deleteEmptyClassRule.getAllActivationsAsResultSet()); | 404 | // ), deleteEmptyClassRule.getAllActivationsAsResultSet()); |
405 | 405 | // | |
406 | deleteEmptyClassRule.fireRandomActivation(); | 406 | // deleteEmptyClassRule.fireRandomActivation(); |
407 | 407 | // | |
408 | assertResults(Map.of( | 408 | // assertResults(Map.of( |
409 | Tuple.of(newModelId, newClass1Id), false, | 409 | // Tuple.of(newModelId, newClass1Id), false, |
410 | Tuple.of(newModelId, newClass2Id), false | 410 | // Tuple.of(newModelId, newClass2Id), false |
411 | ), deleteEmptyClassRule.getAllActivationsAsResultSet()); | 411 | // ), deleteEmptyClassRule.getAllActivationsAsResultSet()); |
412 | 412 | // | |
413 | } | 413 | // } |
414 | } | 414 | } |