aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store-dse/src/test/java/tools
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/store-dse/src/test/java/tools')
-rw-r--r--subprojects/store-dse/src/test/java/tools/refinery/store/dse/CRAExamplesTest.java28
-rw-r--r--subprojects/store-dse/src/test/java/tools/refinery/store/dse/DebugTest.java190
-rw-r--r--subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyCriterion.java5
-rw-r--r--subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyObjective.java5
-rw-r--r--subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyRandomCriterion.java25
-rw-r--r--subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyRandomObjective.java23
6 files changed, 176 insertions, 100 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 f4c38b18..831b9ff0 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
@@ -9,6 +9,8 @@ import org.junit.jupiter.api.Disabled;
9import org.junit.jupiter.api.Test; 9import org.junit.jupiter.api.Test;
10import tools.refinery.store.dse.modification.ModificationAdapter; 10import tools.refinery.store.dse.modification.ModificationAdapter;
11import tools.refinery.store.dse.strategy.BestFirstStoreManager; 11import tools.refinery.store.dse.strategy.BestFirstStoreManager;
12import tools.refinery.store.dse.tests.DummyRandomCriterion;
13import tools.refinery.store.dse.tests.DummyRandomObjective;
12import tools.refinery.store.dse.transition.DesignSpaceExplorationAdapter; 14import tools.refinery.store.dse.transition.DesignSpaceExplorationAdapter;
13import tools.refinery.store.dse.tests.DummyCriterion; 15import tools.refinery.store.dse.tests.DummyCriterion;
14import tools.refinery.store.dse.tests.DummyObjective; 16import tools.refinery.store.dse.tests.DummyObjective;
@@ -188,7 +190,7 @@ class CRAExamplesTest {
188 }); 190 });
189 191
190 @Test 192 @Test
191// @Disabled("This test is only for debugging purposes") 193 @Disabled("This test is only for debugging purposes")
192 void craTest() { 194 void craTest() {
193 var store = ModelStore.builder() 195 var store = ModelStore.builder()
194 .symbols(classElement, encapsulates, classes, features, attribute, method, dataDependency, 196 .symbols(classElement, encapsulates, classes, features, attribute, method, dataDependency,
@@ -197,24 +199,20 @@ class CRAExamplesTest {
197 .queries(feature, assignFeaturePreconditionHelper, assignFeaturePrecondition, 199 .queries(feature, assignFeaturePreconditionHelper, assignFeaturePrecondition,
198 deleteEmptyClassPrecondition, createClassPreconditionHelper, createClassPrecondition, 200 deleteEmptyClassPrecondition, createClassPreconditionHelper, createClassPrecondition,
199 moveFeaturePrecondition)) 201 moveFeaturePrecondition))
200// .with(ModelVisualizerAdapter.builder() 202 .with(ModelVisualizerAdapter.builder()
201// .withOutputpath("test_output") 203 .withOutputpath("test_output")
202// .withFormat(FileFormat.DOT) 204 .withFormat(FileFormat.DOT)
203// .withFormat(FileFormat.SVG) 205 .withFormat(FileFormat.SVG)
204// .saveStates() 206 .saveStates()
205// .saveDesignSpace() 207 .saveDesignSpace()
206// ) 208 )
207 .with(StateCoderAdapter.builder()) 209 .with(StateCoderAdapter.builder())
208 .with(ModificationAdapter.builder()) 210 .with(ModificationAdapter.builder())
209 .with(DesignSpaceExplorationAdapter.builder() 211 .with(DesignSpaceExplorationAdapter.builder()
210 .transformations(assignFeatureRule, deleteEmptyClassRule, createClassRule, moveFeatureRule) 212 .transformations(assignFeatureRule, deleteEmptyClassRule, createClassRule, moveFeatureRule)
211 .objectives(new DummyObjective()) 213 .objectives(new DummyRandomObjective())
212 .accept(new DummyCriterion(true)) 214 .accept(new DummyRandomCriterion())
213 .exclude(new DummyCriterion(false)) 215 .exclude(new DummyCriterion(false))
214// .objectives(new AlwaysSatisfiedRandomHardObjective())
215// .strategy(new DepthFirstStrategy().withDepthLimit(3).continueIfHardObjectivesFulfilled()
216// .strategy(new BestFirstStrategy().withDepthLimit(6).continueIfHardObjectivesFulfilled()
217// .goOnOnlyIfFitnessIsBetter())
218 ) 216 )
219 .build(); 217 .build();
220 218
@@ -296,7 +294,5 @@ class CRAExamplesTest {
296 bestFirst.startExploration(initialVersion); 294 bestFirst.startExploration(initialVersion);
297 var resultStore = bestFirst.getSolutionStore(); 295 var resultStore = bestFirst.getSolutionStore();
298 System.out.println("states size: " + resultStore.getSolutions().size()); 296 System.out.println("states size: " + resultStore.getSolutions().size());
299 var modelVisualizerAdapter = model.getAdapter(ModelVisualizerAdapter.class);
300 modelVisualizerAdapter.visualize();
301 } 297 }
302} 298}
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 1d757a5f..87c3892a 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,9 +5,27 @@
5 */ 5 */
6package tools.refinery.store.dse; 6package tools.refinery.store.dse;
7 7
8import org.junit.jupiter.api.Disabled;
9import org.junit.jupiter.api.Test;
10import tools.refinery.store.dse.modification.ModificationAdapter;
11import tools.refinery.store.dse.strategy.BestFirstStoreManager;
12import tools.refinery.store.dse.tests.DummyCriterion;
13import tools.refinery.store.dse.tests.DummyObjective;
14import tools.refinery.store.dse.tests.DummyRandomCriterion;
15import tools.refinery.store.dse.tests.DummyRandomObjective;
16import tools.refinery.store.dse.transition.DesignSpaceExplorationAdapter;
17import tools.refinery.store.dse.transition.TransformationRule;
18import tools.refinery.store.model.ModelStore;
19import tools.refinery.store.query.ModelQueryAdapter;
20import tools.refinery.store.query.dnf.Query;
21import tools.refinery.store.query.viatra.ViatraModelQueryAdapter;
8import tools.refinery.store.query.view.AnySymbolView; 22import tools.refinery.store.query.view.AnySymbolView;
9import tools.refinery.store.query.view.KeyOnlyView; 23import tools.refinery.store.query.view.KeyOnlyView;
10import tools.refinery.store.representation.Symbol; 24import tools.refinery.store.representation.Symbol;
25import tools.refinery.store.statecoding.StateCoderAdapter;
26import tools.refinery.store.tuple.Tuple;
27import tools.refinery.visualization.ModelVisualizerAdapter;
28import tools.refinery.visualization.internal.FileFormat;
11 29
12class DebugTest { 30class DebugTest {
13 private static final Symbol<Boolean> classModel = Symbol.of("ClassModel", 1); 31 private static final Symbol<Boolean> classModel = Symbol.of("ClassModel", 1);
@@ -29,88 +47,92 @@ class DebugTest {
29 private static final AnySymbolView classesView = new KeyOnlyView<>(classes); 47 private static final AnySymbolView classesView = new KeyOnlyView<>(classes);
30 48
31 49
32// @Test 50 @Test
33// @Disabled("This test is only for debugging purposes") 51 @Disabled("This test is only for debugging purposes")
34// void BFSTest() { 52 void BFSTest() {
35// var createClassPrecondition = Query.of("CreateClassPrecondition", 53 var createClassPrecondition = Query.of("CreateClassPrecondition",
36// (builder, model) -> builder.clause( 54 (builder, model) -> builder.clause(
37// classModelView.call(model) 55 classModelView.call(model)
38// )); 56 ));
39// 57
40// var createClassRule = new TransformationRule("CreateClass", 58 var createClassRule = new TransformationRule("CreateClass",
41// createClassPrecondition, 59 createClassPrecondition,
42// (model) -> { 60 (model) -> {
43// var classesInterpretation = model.getInterpretation(classes); 61 var classesInterpretation = model.getInterpretation(classes);
44// var classElementInterpretation = model.getInterpretation(classElement); 62 var classElementInterpretation = model.getInterpretation(classElement);
45// return ((Tuple activation) -> { 63 return ((Tuple activation) -> {
46// var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); 64 var dseAdapter = model.getAdapter(ModificationAdapter.class);
47// var modelElement = activation.get(0); 65 var modelElement = activation.get(0);
48// 66
49// var newClassElement = dseAdapter.createObject(); 67 var newClassElement = dseAdapter.createObject();
50// var newClassElementId = newClassElement.get(0); 68 var newClassElementId = newClassElement.get(0);
51// 69
52// classesInterpretation.put(Tuple.of(modelElement, newClassElementId), true); 70 classesInterpretation.put(Tuple.of(modelElement, newClassElementId), true);
53// classElementInterpretation.put(Tuple.of(newClassElementId), true); 71 classElementInterpretation.put(Tuple.of(newClassElementId), true);
54// }); 72 });
55// }); 73 });
56// 74
57// var createFeaturePrecondition = Query.of("CreateFeaturePrecondition", 75 var createFeaturePrecondition = Query.of("CreateFeaturePrecondition",
58// (builder, model) -> builder.clause( 76 (builder, model) -> builder.clause(
59// classModelView.call(model) 77 classModelView.call(model)
60// )); 78 ));
61// 79
62// var createFeatureRule = new TransformationRule("CreateFeature", 80 var createFeatureRule = new TransformationRule("CreateFeature",
63// createFeaturePrecondition, 81 createFeaturePrecondition,
64// (model) -> { 82 (model) -> {
65// var featuresInterpretation = model.getInterpretation(features); 83 var featuresInterpretation = model.getInterpretation(features);
66// var featureInterpretation = model.getInterpretation(feature); 84 var featureInterpretation = model.getInterpretation(feature);
67// return ((Tuple activation) -> { 85 return ((Tuple activation) -> {
68// var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); 86 var dseAdapter = model.getAdapter(ModificationAdapter.class);
69// var modelElement = activation.get(0); 87 var modelElement = activation.get(0);
70// 88
71// var newClassElement = dseAdapter.createObject(); 89 var newClassElement = dseAdapter.createObject();
72// var newClassElementId = newClassElement.get(0); 90 var newClassElementId = newClassElement.get(0);
73// 91
74// featuresInterpretation.put(Tuple.of(modelElement, newClassElementId), true); 92 featuresInterpretation.put(Tuple.of(modelElement, newClassElementId), true);
75// featureInterpretation.put(Tuple.of(newClassElementId), true); 93 featureInterpretation.put(Tuple.of(newClassElementId), true);
76// }); 94 });
77// }); 95 });
78// 96
79// var store = ModelStore.builder() 97 var store = ModelStore.builder()
80// .symbols(classModel, classElement, feature, isEncapsulatedBy, encapsulates, classes, features) 98 .symbols(classModel, classElement, feature, isEncapsulatedBy, encapsulates, classes, features)
81// .with(ViatraModelQueryAdapter.builder() 99 .with(ViatraModelQueryAdapter.builder()
82// .queries(createClassPrecondition, createFeaturePrecondition)) 100 .queries(createClassPrecondition, createFeaturePrecondition))
83// .with(ModelVisualizerAdapter.builder() 101 .with(ModelVisualizerAdapter.builder()
84// .withOutputpath("test_output") 102 .withOutputpath("test_output")
85// .withFormat(FileFormat.DOT) 103 .withFormat(FileFormat.DOT)
86// .withFormat(FileFormat.SVG) 104 .withFormat(FileFormat.SVG)
87// .saveStates() 105 .saveStates()
88// .saveDesignSpace() 106 .saveDesignSpace()
89// ) 107 )
90// .with(DesignSpaceExplorationAdapter.builder() 108 .with(StateCoderAdapter.builder())
91// .transformations(createClassRule, createFeatureRule) 109 .with(ModificationAdapter.builder())
92// .objectives(new AlwaysSatisfiedRandomHardObjective()) 110 .with(DesignSpaceExplorationAdapter.builder()
93// .strategy(new DepthFirstStrategy().withDepthLimit(4).continueIfHardObjectivesFulfilled() 111 .transformations(createClassRule, createFeatureRule)
94//// .strategy(new BestFirstStrategy().withDepthLimit(4).continueIfHardObjectivesFulfilled() 112 .objectives(new DummyRandomObjective())
95//// .goOnOnlyIfFitnessIsBetter() 113 .accept(new DummyRandomCriterion())
96// )) 114 .exclude(new DummyRandomCriterion())
97// .build(); 115 )
98// 116 .build();
99// var model = store.createEmptyModel(); 117
100// var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); 118 var model = store.createEmptyModel();
101//// dseAdapter.setRandom(1); 119 var dseAdapter = model.getAdapter(ModificationAdapter.class);
102// var queryEngine = model.getAdapter(ModelQueryAdapter.class); 120// dseAdapter.setRandom(1);
103// 121 var queryEngine = model.getAdapter(ModelQueryAdapter.class);
104// var modelElementInterpretation = model.getInterpretation(classModel); 122
105// var classElementInterpretation = model.getInterpretation(classElement); 123 var modelElementInterpretation = model.getInterpretation(classModel);
106// var modelElement = dseAdapter.createObject(); 124 var classElementInterpretation = model.getInterpretation(classElement);
107// modelElementInterpretation.put(modelElement, true); 125 var modelElement = dseAdapter.createObject();
108// classElementInterpretation.put(modelElement, true); 126 modelElementInterpretation.put(modelElement, true);
109// queryEngine.flushChanges(); 127 classElementInterpretation.put(modelElement, true);
110// 128 var initialVersion = model.commit();
111// 129 queryEngine.flushChanges();
112// var states = dseAdapter.explore(); 130
113// System.out.println("states size: " + states.size()); 131
114// 132 var bestFirst = new BestFirstStoreManager(store);
115// } 133 bestFirst.startExploration(initialVersion);
134 var resultStore = bestFirst.getSolutionStore();
135 System.out.println("states size: " + resultStore.getSolutions().size());
136
137 }
116} 138}
diff --git a/subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyCriterion.java b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyCriterion.java
index 6bcbd1c3..2d5a0f36 100644
--- a/subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyCriterion.java
+++ b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyCriterion.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.dse.tests; 6package tools.refinery.store.dse.tests;
2 7
3import tools.refinery.store.dse.transition.objectives.Criterion; 8import tools.refinery.store.dse.transition.objectives.Criterion;
diff --git a/subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyObjective.java b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyObjective.java
index 77a23d62..f5d281aa 100644
--- a/subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyObjective.java
+++ b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyObjective.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.dse.tests; 6package tools.refinery.store.dse.tests;
2 7
3import tools.refinery.store.dse.transition.objectives.Objective; 8import tools.refinery.store.dse.transition.objectives.Objective;
diff --git a/subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyRandomCriterion.java b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyRandomCriterion.java
new file mode 100644
index 00000000..71fd4403
--- /dev/null
+++ b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyRandomCriterion.java
@@ -0,0 +1,25 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.dse.tests;
7
8import tools.refinery.store.dse.transition.objectives.Criterion;
9import tools.refinery.store.dse.transition.objectives.CriterionCalculator;
10import tools.refinery.store.model.Model;
11
12import java.util.Random;
13
14public class DummyRandomCriterion implements Criterion {
15
16 @SuppressWarnings("squid:S2245")
17 private static final Random random = new Random(9856654);
18 public DummyRandomCriterion() {
19 }
20
21 @Override
22 public CriterionCalculator createCalculator(Model model) {
23 return random::nextBoolean;
24 }
25}
diff --git a/subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyRandomObjective.java b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyRandomObjective.java
new file mode 100644
index 00000000..219e74c6
--- /dev/null
+++ b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyRandomObjective.java
@@ -0,0 +1,23 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.dse.tests;
7
8import tools.refinery.store.dse.transition.objectives.Objective;
9import tools.refinery.store.dse.transition.objectives.ObjectiveCalculator;
10import tools.refinery.store.model.Model;
11
12import java.util.Random;
13
14public class DummyRandomObjective implements Objective {
15
16 @SuppressWarnings("squid:S2245")
17 private static final Random random = new Random(9856654);
18
19 @Override
20 public ObjectiveCalculator createCalculator(Model model) {
21 return random::nextDouble;
22 }
23}