aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store-dse/src/test/java/tools/refinery/store/dse/DebugTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/store-dse/src/test/java/tools/refinery/store/dse/DebugTest.java')
-rw-r--r--subprojects/store-dse/src/test/java/tools/refinery/store/dse/DebugTest.java117
1 files changed, 117 insertions, 0 deletions
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
new file mode 100644
index 00000000..911c0661
--- /dev/null
+++ b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/DebugTest.java
@@ -0,0 +1,117 @@
1package tools.refinery.store.dse;
2
3import org.junit.jupiter.api.Test;
4import tools.refinery.store.model.ModelStore;
5import tools.refinery.store.query.ModelQueryAdapter;
6import tools.refinery.store.query.dnf.Query;
7import tools.refinery.store.dse.internal.TransformationRule;
8import tools.refinery.store.dse.strategy.BestFirstStrategy;
9import tools.refinery.store.dse.strategy.DepthFirstStrategy;
10import tools.refinery.store.query.viatra.ViatraModelQueryAdapter;
11import tools.refinery.store.query.view.AnySymbolView;
12import tools.refinery.store.query.view.KeyOnlyView;
13import tools.refinery.store.representation.Symbol;
14import tools.refinery.store.tuple.Tuple;
15import tools.refinery.visualization.ModelVisualizerAdapter;
16import tools.refinery.visualization.internal.FileFormat;
17
18public class DebugTest {
19 private static final Symbol<Boolean> classModel = Symbol.of("ClassModel", 1);
20 private static final Symbol<Boolean> classElement = Symbol.of("ClassElement", 1);
21 private static final Symbol<Boolean> feature = Symbol.of("Feature", 1);
22
23 private static final Symbol<Boolean> isEncapsulatedBy = Symbol.of("IsEncapsulatedBy", 2);
24 private static final Symbol<Boolean> encapsulates = Symbol.of("Encapsulates", 2);
25
26 private static final Symbol<Boolean> features = Symbol.of("Features", 2);
27 private static final Symbol<Boolean> classes = Symbol.of("Classes", 2);
28
29 private static final AnySymbolView classModelView = new KeyOnlyView<>(classModel);
30 private static final AnySymbolView classElementView = new KeyOnlyView<>(classElement);
31 private static final AnySymbolView featureView = new KeyOnlyView<>(feature);
32 private static final AnySymbolView isEncapsulatedByView = new KeyOnlyView<>(isEncapsulatedBy);
33 private static final AnySymbolView encapsulatesView = new KeyOnlyView<>(encapsulates);
34 private static final AnySymbolView featuresView = new KeyOnlyView<>(features);
35 private static final AnySymbolView classesView = new KeyOnlyView<>(classes);
36
37
38 @Test
39 void BFSTest() {
40 var createClassPrecondition = Query.of("CreateClassPrecondition",
41 (builder, model) -> builder.clause(
42 classModelView.call(model)
43 ));
44
45 var createClassRule = new TransformationRule("CreateClass",
46 createClassPrecondition,
47 (model) -> {
48 var classesInterpretation = model.getInterpretation(classes);
49 var classElementInterpretation = model.getInterpretation(classElement);
50 return ((Tuple activation) -> {
51 var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class);
52 var modelElement = activation.get(0);
53
54 var newClassElement = dseAdapter.createObject();
55 var newClassElementId = newClassElement.get(0);
56
57 classesInterpretation.put(Tuple.of(modelElement, newClassElementId), true);
58 classElementInterpretation.put(Tuple.of(newClassElementId), true);
59 });
60 });
61
62 var createFeaturePrecondition = Query.of("CreateFeaturePrecondition",
63 (builder, model) -> builder.clause(
64 classModelView.call(model)
65 ));
66
67 var createFeatureRule = new TransformationRule("CreateFeature",
68 createFeaturePrecondition,
69 (model) -> {
70 var featuresInterpretation = model.getInterpretation(features);
71 var featureInterpretation = model.getInterpretation(feature);
72 return ((Tuple activation) -> {
73 var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class);
74 var modelElement = activation.get(0);
75
76 var newClassElement = dseAdapter.createObject();
77 var newClassElementId = newClassElement.get(0);
78
79 featuresInterpretation.put(Tuple.of(modelElement, newClassElementId), true);
80 featureInterpretation.put(Tuple.of(newClassElementId), true);
81 });
82 });
83
84 var store = ModelStore.builder()
85 .symbols(classModel, classElement, feature, isEncapsulatedBy, encapsulates, classes, features)
86 .with(ViatraModelQueryAdapter.builder()
87 .queries(createClassPrecondition, createFeaturePrecondition))
88 .with(ModelVisualizerAdapter.builder())
89 .with(DesignSpaceExplorationAdapter.builder()
90 .transformations(createClassRule, createFeatureRule)
91 .strategy(new DepthFirstStrategy(4).continueIfHardObjectivesFulfilled()
92// .strategy(new BestFirstStrategy(4).continueIfHardObjectivesFulfilled()
93// .goOnOnlyIfFitnessIsBetter()
94 ))
95 .build();
96
97 var model = store.createEmptyModel();
98 var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class);
99// dseAdapter.setRandom(1);
100 var queryEngine = model.getAdapter(ModelQueryAdapter.class);
101
102 var modelElementInterpretation = model.getInterpretation(classModel);
103 var classElementInterpretation = model.getInterpretation(classElement);
104 var modelElement = dseAdapter.createObject();
105 modelElementInterpretation.put(modelElement, true);
106 classElementInterpretation.put(modelElement, true);
107 queryEngine.flushChanges();
108
109
110 var states = dseAdapter.explore();
111 var visualizer = model.getAdapter(ModelVisualizerAdapter.class);
112 visualizer.renderDesignSpace("test_output", FileFormat.SVG);
113 System.out.println("states size: " + states.size());
114 System.out.println("states: " + states);
115
116 }
117}