aboutsummaryrefslogtreecommitdiffstats
path: root/Tests
diff options
context:
space:
mode:
authorLibravatar OszkarSemerath <oszka@152.66.252.189>2017-10-27 17:54:20 +0200
committerLibravatar OszkarSemerath <oszka@152.66.252.189>2017-10-27 17:54:20 +0200
commitbafe7aef99b0a087a9b65d2d02ab687b2e08ae4c (patch)
tree1e84cc6d0c1fa51acfbcb6b4ab0fde57476856a6 /Tests
parentneighbourhood calculated to fix range (diff)
downloadVIATRA-Generator-bafe7aef99b0a087a9b65d2d02ab687b2e08ae4c.tar.gz
VIATRA-Generator-bafe7aef99b0a087a9b65d2d02ab687b2e08ae4c.tar.zst
VIATRA-Generator-bafe7aef99b0a087a9b65d2d02ab687b2e08ae4c.zip
Test and measurement runners
Diffstat (limited to 'Tests')
-rw-r--r--Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/CountMatches.xtend16
-rw-r--r--Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/DiverseMeasurementRunner.xtend10
-rw-r--r--Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/MeasureDiversity.xtend191
-rw-r--r--Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/MeasureInternalDiversity.xtend107
-rw-r--r--Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/MetamodelLoader.xtend1
5 files changed, 315 insertions, 10 deletions
diff --git a/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/CountMatches.xtend b/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/CountMatches.xtend
index f9086683..02caf9dd 100644
--- a/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/CountMatches.xtend
+++ b/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/CountMatches.xtend
@@ -58,7 +58,7 @@ class CountMatches {
58 FOR mutant : wfPatterns.filter[query2Reference.keySet.contains(it)] SEPARATOR ';'»diff(« 58 FOR mutant : wfPatterns.filter[query2Reference.keySet.contains(it)] SEPARATOR ';'»diff(«
59 mutant.fullyQualifiedName.split("\\.").last»)«ENDFOR»''' 59 mutant.fullyQualifiedName.split("\\.").last»)«ENDFOR»'''
60 ) 60 )
61 countMatches('''D:/FASE18Meas/MetamodelOnly_Alloy_Symmetry30''') 61 countMatches('''D:/FASE18Meas/RemoHF''')
62 } 62 }
63 63
64 def private static simpleName(IQuerySpecification<?> wfPattern) { 64 def private static simpleName(IQuerySpecification<?> wfPattern) {
@@ -82,15 +82,21 @@ class CountMatches {
82 } 82 }
83 83
84 def static void countMatches(File file, String path) { 84 def static void countMatches(File file, String path) {
85 val parent = file.parent 85
86 86
87 val pathSegments = path.split("/") 87 val pathSegments = path.split("/")
88 val groupName = pathSegments.get(pathSegments.size-2).split("\\.").last.split("_").get(0) 88 val groupName = pathSegments.get(pathSegments.size-2).split("\\.").last.split("_").get(0)
89 print(groupName +";") 89 print(groupName +";")
90 val nameExtension = pathSegments.get(pathSegments.size-1).split("\\.").get(0).split("_") 90 val nameExtension = pathSegments.get(pathSegments.size-1).split("\\.").get(0).split("_")
91 val runNumber = nameExtension.get(1) 91 try{
92 val modelNumber = nameExtension.get(2) 92 val runNumber = nameExtension.get(1)
93 print('''«runNumber»;«modelNumber»''') 93 val modelNumber = nameExtension.get(2)
94 print('''«runNumber»;«modelNumber»''')
95 } catch(Exception e) {
96 print('''«file.name»;0''')
97 }
98
99 val parent = file.parent
94 val workspace = new FileSystemWorkspace(parent,"") 100 val workspace = new FileSystemWorkspace(parent,"")
95 val model = workspace.readModel(EObject,file.name) 101 val model = workspace.readModel(EObject,file.name)
96 102
diff --git a/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/DiverseMeasurementRunner.xtend b/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/DiverseMeasurementRunner.xtend
index 702b1740..daa932fd 100644
--- a/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/DiverseMeasurementRunner.xtend
+++ b/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/DiverseMeasurementRunner.xtend
@@ -258,10 +258,10 @@ class ScenarioRunner {
258// val gml = partialInterpretation2GML.transform(representation) 258// val gml = partialInterpretation2GML.transform(representation)
259// ecore2GML.transform(root) 259// ecore2GML.transform(root)
260// workspace.writeText('''solutionVisualisation«representationNumber».gml''',gml) 260// workspace.writeText('''solutionVisualisation«representationNumber».gml''',gml)
261 261//
262// val visualiser = new GraphvizVisualisation 262 val visualiser = new GraphvizVisualisation
263// val visualisation = visualiser.visualiseConcretization(representation) 263 val visualisation = visualiser.visualiseConcretization(representation)
264// visualisation.writeToFile(workspace,'''solutionVisualisation«representationNumber»''') 264 visualisation.writeToFile(workspace,'''solutionVisualisation«representationNumber»''')
265 265
266 } else { 266 } else {
267 workspace.writeText('''solution«representationNumber».txt''',representation.toString) 267 workspace.writeText('''solution«representationNumber».txt''',representation.toString)
@@ -318,7 +318,7 @@ class ScenarioRunner {
318 318
319class DiverseMeasurementRunner { 319class DiverseMeasurementRunner {
320 def static void main(String[] args) { 320 def static void main(String[] args) {
321 val scenario = new Scenario(30,29,Metamodel::YakinduWOSynch,Constraints.Metamodel,StateCoder.R3,20,Solver::Alloy 321 val scenario = new Scenario(10,29,Metamodel::YakinduWOSynch,Constraints.None,StateCoder.R1,10,Solver::ViatraSolver
322 ) 322 )
323 val scenarioRunner = new ScenarioRunner 323 val scenarioRunner = new ScenarioRunner
324 scenarioRunner.runScenario(scenario) 324 scenarioRunner.runScenario(scenario)
diff --git a/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/MeasureDiversity.xtend b/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/MeasureDiversity.xtend
new file mode 100644
index 00000000..70f7b033
--- /dev/null
+++ b/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/MeasureDiversity.xtend
@@ -0,0 +1,191 @@
1package hu.bme.mit.inf.dslreasoner.run
2
3import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic
4import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2LogicConfiguration
5import hu.bme.mit.inf.dslreasoner.ecore2logic.ecore2logicannotations.Ecore2logicannotationsPackage
6import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.LogiclanguagePackage
7import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicproblemPackage
8import hu.bme.mit.inf.dslreasoner.viatra2logic.viatra2logicannotations.Viatra2LogicAnnotationsPackage
9import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.InstanceModel2PartialInterpretation
10import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.neighbourhood.PartialInterpretation2ImmutableTypeLattice
11import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
12import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialinterpretationPackage
13import hu.bme.mit.inf.dslreasoner.workspace.FileSystemWorkspace
14import java.io.File
15import java.util.HashMap
16import java.util.LinkedList
17import java.util.List
18import org.eclipse.emf.ecore.EObject
19import org.eclipse.emf.ecore.resource.Resource
20import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl
21import java.util.HashSet
22import java.util.ArrayList
23import java.util.Comparator
24
25class MeasureDiversity {
26 static val partialInterpretation2Logic = new InstanceModel2PartialInterpretation
27 static val neiguboirhoodComputer = new PartialInterpretation2ImmutableTypeLattice
28
29 static val Ecore2Logic ecore2Logic = new Ecore2Logic
30
31 static private def init() {
32 LogiclanguagePackage.eINSTANCE.class
33 LogicproblemPackage.eINSTANCE.class
34 PartialinterpretationPackage.eINSTANCE.class
35 Ecore2logicannotationsPackage.eINSTANCE.class
36 Viatra2LogicAnnotationsPackage.eINSTANCE.class
37 Resource.Factory.Registry.INSTANCE.extensionToFactoryMap.put("*",new XMIResourceFactoryImpl)
38 }
39
40
41 def static void main(String[] args) {
42 init()
43 val range = 20
44 val path = '''D:/FASE18Meas/'''
45 val scenarios = #[
46 "MetamodelOnly_Alloy_Symmetry0",
47 "MetamodelOnly_Alloy_Symmetry10",
48 //"MetamodelOnly_Alloy_Symmetry30",
49 "MetamodelOnly_Alloy_SymmetryDefault",
50 //"MetamodelOnly_VS_Fix_No",
51 "MetamodelOnly_VS_Fix_R1",
52 "MetamodelOnly_VS_Fix_R2",
53 "MetamodelOnly_VS_Fix_R3"
54 //,"RemoHF"
55 ]
56
57 println('''Scenario;Run;Model1;Model2;«FOR i: 0..<range SEPARATOR ';'»r«i»«ENDFOR»''')
58 for(scenario : scenarios) {
59 measureDiversity(scenario,path+"/"+scenario,range)
60 }
61 //println()println()
62
63// println('''Scenario;Run;Model;«FOR i: 0..<range SEPARATOR ';'»r«i»«ENDFOR»;sn/gn''')
64// for(scenario : scenarios) {
65// MeasureInternalDiversity::run(path+"/"+scenario,scenario)
66// }
67 }
68
69 def static void measureDiversity(String scenario, String path, int depth) {
70 val file = new File(path)
71 if(file.isDirectory) {
72 val subfiles = file.list
73 val xmiSubfiles = subfiles.filter[it.endsWith(".xmi")]
74 if(!xmiSubfiles.empty) {
75 measureDiversity(scenario, file,xmiSubfiles.map[new File(path+"/"+it)].toList,path,depth)
76 } else {
77 for(subfile : subfiles) {
78 measureDiversity(scenario, path+"/"+subfile,depth)
79 }
80 }
81 } else if(file.isFile) {
82 // Do nothing
83 }
84 }
85
86 def static void measureDiversity(String scenario, File parent, List<File> files, String path, int depth) {
87 val workspace = new FileSystemWorkspace(path, "")
88 //val file2Neighbourhood = new HashMap
89
90 files.sort(new FileComparator)
91
92 val neighbours = new ArrayList
93 for(i:0..<depth){
94 neighbours.add(new HashSet)
95 }
96
97 for (file : files.filter[Integer.parseInt(it.name.runIndex) <= 20]) {
98 val MetamodelLoader loader = new YakinduLoader(workspace) => [
99 it.useSynchronization = false
100 it.useComplexStates = true
101 ]
102 val metamodelTransformationOutput = ecore2Logic.transformMetamodel(loader.loadMetamodel,
103 new Ecore2LogicConfiguration)
104
105 val model = workspace.readModel(EObject, file.name)
106 val partialModel = partialInterpretation2Logic.transform(metamodelTransformationOutput, model.eResource,
107 false)
108 val list = representationList(partialModel, depth)
109
110 //file2Neighbourhood.put(file, list)
111
112 print('''«scenario»;«file.name.runIndex»;«file.name.modelIndex»''')
113 for (i : 0 ..< list.size) {
114 val s1 = list.get(i)
115 neighbours.get(i).addAll(s1)
116 print(";" + neighbours.get(i).size)
117 }
118 println()
119 }
120 }
121
122
123// def static void measureDiversity(String scenario, File parent, List<File> files, String path, int depth) {
124// val workspace = new FileSystemWorkspace(path,"")
125// val file2Neighbourhood = new HashMap
126// for(file : files) {
127// val MetamodelLoader loader = new YakinduLoader(workspace) => [it.useSynchronization = false it.useComplexStates = true]
128// val metamodelTransformationOutput = ecore2Logic.transformMetamodel(loader.loadMetamodel,new Ecore2LogicConfiguration)
129//
130// val model = workspace.readModel(EObject,file.name)
131// val partialModel = partialInterpretation2Logic.transform(metamodelTransformationOutput,model.eResource,false)
132// val list = representationList(partialModel,depth)
133//
134// file2Neighbourhood.put(file,list)
135// }
136// for(file1Index : 0..<files.size) {
137// val file1 = files.get(file1Index)
138// if(Integer.parseInt(file1.name.runIndex)<=20) {
139// for(file2Index : 0..<file1Index) {
140// val file2 = files.get(file2Index)
141// val file1Representation = file2Neighbourhood.get(file1)
142// val file2Representation = file2Neighbourhood.get(file2)
143// print('''«scenario»;«file1.name.runIndex»;«file1.name.modelIndex»;«file2.name.modelIndex»''')
144// if(file1Representation.size == file1Representation.size) {
145// for(i : 0..<file1Representation.size) {
146// val s1 = file1Representation.get(i)
147// val s2 = file2Representation.get(i)
148//
149// val commonSet = new HashSet(s1)
150// commonSet.addAll(s2)
151//
152// val diff = (commonSet.size-s1.size) + (commonSet.size-s2.size)
153// print(";"+diff)
154// }
155// } else {
156// throw new AssertionError('''length of representations is !=''')
157// }
158// println()
159// }
160// }
161// }
162// }
163
164 protected def static runIndex(String name) {
165 name.split("\\.").head.split('_').get(1)
166 }
167 protected def static modelIndex(String name) {
168 name.split("\\.").head.split('_').get(2)
169 }
170
171 protected def static representationList(PartialInterpretation partialModel, int depth) {
172 val list = new LinkedList
173 for(i : 0..<depth) {
174 val neighbourhood = neiguboirhoodComputer.createRepresentation(partialModel,i,0,0)
175 //val m = neighbourhood.modelRepresentation
176 //println(m)
177 list.add(neighbourhood.modelRepresentation.keySet.map[it.hashCode].toSet)
178 }
179 return list
180 }
181}
182
183class FileComparator implements Comparator<File> {
184
185 override compare(File arg0, File arg1) {
186 val a = Integer.parseInt(MeasureDiversity::modelIndex(arg0.name))
187 val b = Integer.parseInt(MeasureDiversity::modelIndex(arg1.name))
188 Integer.compare(a,b)
189 }
190
191} \ No newline at end of file
diff --git a/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/MeasureInternalDiversity.xtend b/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/MeasureInternalDiversity.xtend
new file mode 100644
index 00000000..c4737672
--- /dev/null
+++ b/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/MeasureInternalDiversity.xtend
@@ -0,0 +1,107 @@
1package hu.bme.mit.inf.dslreasoner.run
2
3import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic
4import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2LogicConfiguration
5import hu.bme.mit.inf.dslreasoner.ecore2logic.ecore2logicannotations.Ecore2logicannotationsPackage
6import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.LogiclanguagePackage
7import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicproblemPackage
8import hu.bme.mit.inf.dslreasoner.viatra2logic.viatra2logicannotations.Viatra2LogicAnnotationsPackage
9import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.InstanceModel2PartialInterpretation
10import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.neighbourhood.PartialInterpretation2ImmutableTypeLattice
11import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
12import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialinterpretationPackage
13import hu.bme.mit.inf.dslreasoner.workspace.FileSystemWorkspace
14import java.io.File
15import java.util.LinkedList
16import java.util.List
17import org.eclipse.emf.ecore.EObject
18import org.eclipse.emf.ecore.resource.Resource
19import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl
20
21class MeasureInternalDiversity {
22 static val partialInterpretation2Logic = new InstanceModel2PartialInterpretation
23 static val neiguboirhoodComputer = new PartialInterpretation2ImmutableTypeLattice
24
25 static val Ecore2Logic ecore2Logic = new Ecore2Logic
26
27 static private def init() {
28 LogiclanguagePackage.eINSTANCE.class
29 LogicproblemPackage.eINSTANCE.class
30 PartialinterpretationPackage.eINSTANCE.class
31 Ecore2logicannotationsPackage.eINSTANCE.class
32 Viatra2LogicAnnotationsPackage.eINSTANCE.class
33 Resource.Factory.Registry.INSTANCE.extensionToFactoryMap.put("*",new XMIResourceFactoryImpl)
34 }
35
36
37 def static void main(String[] args) {
38 init()
39
40 }
41
42 def static run(String path, String scenario) {
43 val range = 20
44
45 measureDiversity(scenario,path,range)
46 }
47
48 def static void measureDiversity(String scenario, String path, int depth) {
49 val file = new File(path)
50 if(file.isDirectory) {
51 val subfiles = file.list
52 val xmiSubfiles = subfiles.filter[it.endsWith(".xmi")]
53 if(!xmiSubfiles.empty) {
54 measureDiversity(scenario,file,xmiSubfiles.map[new File(path+"/"+it)].toList,path,depth)
55 } else {
56 for(subfile : subfiles) {
57 measureDiversity(scenario,path+"/"+subfile,depth)
58 }
59 }
60 } else if(file.isFile) {
61 // Do nothing
62 }
63 }
64
65 def static void measureDiversity(String scenario, File parent, List<File> files, String path, int depth) {
66 val workspace = new FileSystemWorkspace(path,"")
67 //val file2Neighbourhood = new HashMap<File,List<?>>
68 for(file : files) {
69 val MetamodelLoader loader = new YakinduLoader(workspace) => [it.useSynchronization = false it.useComplexStates = true]
70 val metamodelTransformationOutput = ecore2Logic.transformMetamodel(loader.loadMetamodel,new Ecore2LogicConfiguration)
71
72 val model = workspace.readModel(EObject,file.name)
73 val partialModel = partialInterpretation2Logic.transform(metamodelTransformationOutput,model.eResource,false)
74 val list = representationList(partialModel,depth)
75 try {
76 val runIndex = file.name.runIndex
77 val modelIndex = file.name.modelIndex
78 print('''«scenario»;«runIndex»;«modelIndex»''')
79 } catch (Exception e) {
80 print('''«scenario»;0;«file.name»''')
81 }
82 for(i : 0..<list.size) {
83 print(''';«list.get(i).keySet.size»''')
84 }
85 print(";"+(list.last.keySet.size*1.0 /partialModel.newElements.size))
86 println
87 }
88 }
89
90 protected def static runIndex(String name) {
91 name.split("\\.").head.split('_').get(1)
92 }
93 protected def static modelIndex(String name) {
94 name.split("\\.").head.split('_').get(2)
95 }
96
97 protected def static representationList(PartialInterpretation partialModel, int depth) {
98 val list = new LinkedList
99 for(i : 0..<depth) {
100 val neighbourhood = neiguboirhoodComputer.createRepresentation(partialModel,i,0,0)
101 //val m = neighbourhood.modelRepresentation
102 //println(m)
103 list.add(neighbourhood.modelRepresentation)
104 }
105 return list
106 }
107} \ No newline at end of file
diff --git a/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/MetamodelLoader.xtend b/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/MetamodelLoader.xtend
index 10072f5a..e07da778 100644
--- a/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/MetamodelLoader.xtend
+++ b/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/MetamodelLoader.xtend
@@ -101,6 +101,7 @@ class YakinduLoader extends MetamodelLoader{
101 public static val patternsWithComplexStates =#["outgoingFromExit","outgoingFromFinal","choiceHasNoOutgoing","choiceHasNoIncoming"] 101 public static val patternsWithComplexStates =#["outgoingFromExit","outgoingFromFinal","choiceHasNoOutgoing","choiceHasNoIncoming"]
102 new(ReasonerWorkspace workspace) { 102 new(ReasonerWorkspace workspace) {
103 super(workspace) 103 super(workspace)
104 YakindummPackage.eINSTANCE.eClass
104 } 105 }
105 106
106 public def setUseSynchronization(boolean useSynchronization) { 107 public def setUseSynchronization(boolean useSynchronization) {