aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store-dse/src/test/java/tools/refinery/store/dse/CRAExamplesTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/store-dse/src/test/java/tools/refinery/store/dse/CRAExamplesTest.java')
-rw-r--r--subprojects/store-dse/src/test/java/tools/refinery/store/dse/CRAExamplesTest.java289
1 files changed, 140 insertions, 149 deletions
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 */
6package tools.refinery.store.dse; 6package tools.refinery.store.dse;
7 7
8import org.junit.jupiter.api.Disabled; 8import tools.refinery.store.dse.transition.TransformationRule;
9import org.junit.jupiter.api.Test;
10import tools.refinery.store.dse.objectives.AlwaysSatisfiedRandomHardObjective;
11import tools.refinery.store.dse.transition.DesignSpaceExplorationAdapter;
12import tools.refinery.store.model.ModelStore;
13import tools.refinery.store.query.ModelQueryAdapter;
14import tools.refinery.store.query.dnf.Query; 9import tools.refinery.store.query.dnf.Query;
15import tools.refinery.store.query.dnf.RelationalQuery; 10import tools.refinery.store.query.dnf.RelationalQuery;
16import tools.refinery.store.dse.transition.TransformationRule;
17import tools.refinery.store.dse.strategy.BestFirstStrategy;
18import tools.refinery.store.query.viatra.ViatraModelQueryAdapter;
19import tools.refinery.store.query.view.AnySymbolView; 11import tools.refinery.store.query.view.AnySymbolView;
20import tools.refinery.store.query.view.KeyOnlyView; 12import tools.refinery.store.query.view.KeyOnlyView;
21import tools.refinery.store.representation.Symbol; 13import tools.refinery.store.representation.Symbol;
22import tools.refinery.store.tuple.Tuple; 14import tools.refinery.store.tuple.Tuple;
23import tools.refinery.visualization.ModelVisualizerAdapter;
24import tools.refinery.visualization.internal.FileFormat;
25 15
26import java.util.List; 16import java.util.List;
27 17
28import static tools.refinery.store.query.literal.Literals.not; 18import static tools.refinery.store.query.literal.Literals.not;
29 19
30class CRAExamplesTest { 20class 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}