diff options
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.java | 117 |
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 @@ | |||
1 | package tools.refinery.store.dse; | ||
2 | |||
3 | import org.junit.jupiter.api.Test; | ||
4 | import tools.refinery.store.model.ModelStore; | ||
5 | import tools.refinery.store.query.ModelQueryAdapter; | ||
6 | import tools.refinery.store.query.dnf.Query; | ||
7 | import tools.refinery.store.dse.internal.TransformationRule; | ||
8 | import tools.refinery.store.dse.strategy.BestFirstStrategy; | ||
9 | import tools.refinery.store.dse.strategy.DepthFirstStrategy; | ||
10 | import tools.refinery.store.query.viatra.ViatraModelQueryAdapter; | ||
11 | import tools.refinery.store.query.view.AnySymbolView; | ||
12 | import tools.refinery.store.query.view.KeyOnlyView; | ||
13 | import tools.refinery.store.representation.Symbol; | ||
14 | import tools.refinery.store.tuple.Tuple; | ||
15 | import tools.refinery.visualization.ModelVisualizerAdapter; | ||
16 | import tools.refinery.visualization.internal.FileFormat; | ||
17 | |||
18 | public 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 | } | ||