diff options
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.java | 289 |
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 | */ |
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 | } |