From bafe7aef99b0a087a9b65d2d02ab687b2e08ae4c Mon Sep 17 00:00:00 2001 From: OszkarSemerath Date: Fri, 27 Oct 2017 17:54:20 +0200 Subject: Test and measurement runners --- .../bme/mit/inf/dslreasoner/run/CountMatches.xtend | 16 +- .../dslreasoner/run/DiverseMeasurementRunner.xtend | 10 +- .../mit/inf/dslreasoner/run/MeasureDiversity.xtend | 191 +++++++++++++++++++++ .../dslreasoner/run/MeasureInternalDiversity.xtend | 107 ++++++++++++ .../mit/inf/dslreasoner/run/MetamodelLoader.xtend | 1 + 5 files changed, 315 insertions(+), 10 deletions(-) create mode 100644 Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/MeasureDiversity.xtend create mode 100644 Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/MeasureInternalDiversity.xtend (limited to 'Tests') 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 { FOR mutant : wfPatterns.filter[query2Reference.keySet.contains(it)] SEPARATOR ';'»diff(« mutant.fullyQualifiedName.split("\\.").last»)«ENDFOR»''' ) - countMatches('''D:/FASE18Meas/MetamodelOnly_Alloy_Symmetry30''') + countMatches('''D:/FASE18Meas/RemoHF''') } def private static simpleName(IQuerySpecification wfPattern) { @@ -82,15 +82,21 @@ class CountMatches { } def static void countMatches(File file, String path) { - val parent = file.parent + val pathSegments = path.split("/") val groupName = pathSegments.get(pathSegments.size-2).split("\\.").last.split("_").get(0) print(groupName +";") val nameExtension = pathSegments.get(pathSegments.size-1).split("\\.").get(0).split("_") - val runNumber = nameExtension.get(1) - val modelNumber = nameExtension.get(2) - print('''«runNumber»;«modelNumber»''') + try{ + val runNumber = nameExtension.get(1) + val modelNumber = nameExtension.get(2) + print('''«runNumber»;«modelNumber»''') + } catch(Exception e) { + print('''«file.name»;0''') + } + + val parent = file.parent val workspace = new FileSystemWorkspace(parent,"") val model = workspace.readModel(EObject,file.name) 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 { // val gml = partialInterpretation2GML.transform(representation) // ecore2GML.transform(root) // workspace.writeText('''solutionVisualisation«representationNumber».gml''',gml) - -// val visualiser = new GraphvizVisualisation -// val visualisation = visualiser.visualiseConcretization(representation) -// visualisation.writeToFile(workspace,'''solutionVisualisation«representationNumber»''') +// + val visualiser = new GraphvizVisualisation + val visualisation = visualiser.visualiseConcretization(representation) + visualisation.writeToFile(workspace,'''solutionVisualisation«representationNumber»''') } else { workspace.writeText('''solution«representationNumber».txt''',representation.toString) @@ -318,7 +318,7 @@ class ScenarioRunner { class DiverseMeasurementRunner { def static void main(String[] args) { - val scenario = new Scenario(30,29,Metamodel::YakinduWOSynch,Constraints.Metamodel,StateCoder.R3,20,Solver::Alloy + val scenario = new Scenario(10,29,Metamodel::YakinduWOSynch,Constraints.None,StateCoder.R1,10,Solver::ViatraSolver ) val scenarioRunner = new ScenarioRunner 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 @@ +package hu.bme.mit.inf.dslreasoner.run + +import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic +import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2LogicConfiguration +import hu.bme.mit.inf.dslreasoner.ecore2logic.ecore2logicannotations.Ecore2logicannotationsPackage +import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.LogiclanguagePackage +import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicproblemPackage +import hu.bme.mit.inf.dslreasoner.viatra2logic.viatra2logicannotations.Viatra2LogicAnnotationsPackage +import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.InstanceModel2PartialInterpretation +import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.neighbourhood.PartialInterpretation2ImmutableTypeLattice +import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation +import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialinterpretationPackage +import hu.bme.mit.inf.dslreasoner.workspace.FileSystemWorkspace +import java.io.File +import java.util.HashMap +import java.util.LinkedList +import java.util.List +import org.eclipse.emf.ecore.EObject +import org.eclipse.emf.ecore.resource.Resource +import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl +import java.util.HashSet +import java.util.ArrayList +import java.util.Comparator + +class MeasureDiversity { + static val partialInterpretation2Logic = new InstanceModel2PartialInterpretation + static val neiguboirhoodComputer = new PartialInterpretation2ImmutableTypeLattice + + static val Ecore2Logic ecore2Logic = new Ecore2Logic + + static private def init() { + LogiclanguagePackage.eINSTANCE.class + LogicproblemPackage.eINSTANCE.class + PartialinterpretationPackage.eINSTANCE.class + Ecore2logicannotationsPackage.eINSTANCE.class + Viatra2LogicAnnotationsPackage.eINSTANCE.class + Resource.Factory.Registry.INSTANCE.extensionToFactoryMap.put("*",new XMIResourceFactoryImpl) + } + + + def static void main(String[] args) { + init() + val range = 20 + val path = '''D:/FASE18Meas/''' + val scenarios = #[ + "MetamodelOnly_Alloy_Symmetry0", + "MetamodelOnly_Alloy_Symmetry10", + //"MetamodelOnly_Alloy_Symmetry30", + "MetamodelOnly_Alloy_SymmetryDefault", + //"MetamodelOnly_VS_Fix_No", + "MetamodelOnly_VS_Fix_R1", + "MetamodelOnly_VS_Fix_R2", + "MetamodelOnly_VS_Fix_R3" + //,"RemoHF" + ] + + println('''Scenario;Run;Model1;Model2;«FOR i: 0.. files, String path, int depth) { + val workspace = new FileSystemWorkspace(path, "") + //val file2Neighbourhood = new HashMap + + files.sort(new FileComparator) + + val neighbours = new ArrayList + for(i:0.. [ + it.useSynchronization = false + it.useComplexStates = true + ] + val metamodelTransformationOutput = ecore2Logic.transformMetamodel(loader.loadMetamodel, + new Ecore2LogicConfiguration) + + val model = workspace.readModel(EObject, file.name) + val partialModel = partialInterpretation2Logic.transform(metamodelTransformationOutput, model.eResource, + false) + val list = representationList(partialModel, depth) + + //file2Neighbourhood.put(file, list) + + print('''«scenario»;«file.name.runIndex»;«file.name.modelIndex»''') + for (i : 0 ..< list.size) { + val s1 = list.get(i) + neighbours.get(i).addAll(s1) + print(";" + neighbours.get(i).size) + } + println() + } + } + + +// def static void measureDiversity(String scenario, File parent, List files, String path, int depth) { +// val workspace = new FileSystemWorkspace(path,"") +// val file2Neighbourhood = new HashMap +// for(file : files) { +// val MetamodelLoader loader = new YakinduLoader(workspace) => [it.useSynchronization = false it.useComplexStates = true] +// val metamodelTransformationOutput = ecore2Logic.transformMetamodel(loader.loadMetamodel,new Ecore2LogicConfiguration) +// +// val model = workspace.readModel(EObject,file.name) +// val partialModel = partialInterpretation2Logic.transform(metamodelTransformationOutput,model.eResource,false) +// val list = representationList(partialModel,depth) +// +// file2Neighbourhood.put(file,list) +// } +// for(file1Index : 0.. { + + override compare(File arg0, File arg1) { + val a = Integer.parseInt(MeasureDiversity::modelIndex(arg0.name)) + val b = Integer.parseInt(MeasureDiversity::modelIndex(arg1.name)) + Integer.compare(a,b) + } + +} \ 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 @@ +package hu.bme.mit.inf.dslreasoner.run + +import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic +import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2LogicConfiguration +import hu.bme.mit.inf.dslreasoner.ecore2logic.ecore2logicannotations.Ecore2logicannotationsPackage +import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.LogiclanguagePackage +import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicproblemPackage +import hu.bme.mit.inf.dslreasoner.viatra2logic.viatra2logicannotations.Viatra2LogicAnnotationsPackage +import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.InstanceModel2PartialInterpretation +import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.neighbourhood.PartialInterpretation2ImmutableTypeLattice +import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation +import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialinterpretationPackage +import hu.bme.mit.inf.dslreasoner.workspace.FileSystemWorkspace +import java.io.File +import java.util.LinkedList +import java.util.List +import org.eclipse.emf.ecore.EObject +import org.eclipse.emf.ecore.resource.Resource +import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl + +class MeasureInternalDiversity { + static val partialInterpretation2Logic = new InstanceModel2PartialInterpretation + static val neiguboirhoodComputer = new PartialInterpretation2ImmutableTypeLattice + + static val Ecore2Logic ecore2Logic = new Ecore2Logic + + static private def init() { + LogiclanguagePackage.eINSTANCE.class + LogicproblemPackage.eINSTANCE.class + PartialinterpretationPackage.eINSTANCE.class + Ecore2logicannotationsPackage.eINSTANCE.class + Viatra2LogicAnnotationsPackage.eINSTANCE.class + Resource.Factory.Registry.INSTANCE.extensionToFactoryMap.put("*",new XMIResourceFactoryImpl) + } + + + def static void main(String[] args) { + init() + + } + + def static run(String path, String scenario) { + val range = 20 + + measureDiversity(scenario,path,range) + } + + def static void measureDiversity(String scenario, String path, int depth) { + val file = new File(path) + if(file.isDirectory) { + val subfiles = file.list + val xmiSubfiles = subfiles.filter[it.endsWith(".xmi")] + if(!xmiSubfiles.empty) { + measureDiversity(scenario,file,xmiSubfiles.map[new File(path+"/"+it)].toList,path,depth) + } else { + for(subfile : subfiles) { + measureDiversity(scenario,path+"/"+subfile,depth) + } + } + } else if(file.isFile) { + // Do nothing + } + } + + def static void measureDiversity(String scenario, File parent, List files, String path, int depth) { + val workspace = new FileSystemWorkspace(path,"") + //val file2Neighbourhood = new HashMap> + for(file : files) { + val MetamodelLoader loader = new YakinduLoader(workspace) => [it.useSynchronization = false it.useComplexStates = true] + val metamodelTransformationOutput = ecore2Logic.transformMetamodel(loader.loadMetamodel,new Ecore2LogicConfiguration) + + val model = workspace.readModel(EObject,file.name) + val partialModel = partialInterpretation2Logic.transform(metamodelTransformationOutput,model.eResource,false) + val list = representationList(partialModel,depth) + try { + val runIndex = file.name.runIndex + val modelIndex = file.name.modelIndex + print('''«scenario»;«runIndex»;«modelIndex»''') + } catch (Exception e) { + print('''«scenario»;0;«file.name»''') + } + for(i : 0..