From e7b208c529bfaa22550575ef8ea083bdb920b4b1 Mon Sep 17 00:00:00 2001 From: OszkarSemerath Date: Mon, 16 Oct 2017 14:43:41 +0200 Subject: measurement and mutant coverage --- .../dslreasoner/run/DiverseMeasurementRunner.xtend | 60 +++++++------- .../run/SGraphInconsistencyDetector.xtend | 91 +++++++++------------- .../run/VisualiseAllModelInDirectory.xtend | 67 +++++++++------- 3 files changed, 108 insertions(+), 110 deletions(-) (limited to 'Tests/hu.bme.mit.inf.dslreasoner.run/src') 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 40edbd02..12fe775a 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 @@ -1,5 +1,7 @@ package hu.bme.mit.inf.dslreasoner.run +import hu.bme.mit.inf.dlsreasoner.alloy.reasoner.AlloySolver +import hu.bme.mit.inf.dlsreasoner.alloy.reasoner.AlloySolverConfiguration import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2LogicConfiguration import hu.bme.mit.inf.dslreasoner.ecore2logic.EcoreMetamodelDescriptor @@ -18,25 +20,21 @@ import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.TypeInferenceMethod import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.InstanceModel2Logic 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.viatrasolver.partialinterpretationlanguage.visualisation.PartialInterpretation2Gml import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.DiversityDescriptor import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.StateCoderStrategy import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasoner import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasonerConfiguration +import hu.bme.mit.inf.dslreasoner.visualisation.pi2graphviz.GraphvizVisualisation import hu.bme.mit.inf.dslreasoner.workspace.FileSystemWorkspace +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 org.eclipse.viatra.query.runtime.api.IPatternMatch -import org.eclipse.viatra.query.runtime.api.IQuerySpecification -import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher import org.eclipse.xtend.lib.annotations.Data -import java.util.LinkedList -import hu.bme.mit.inf.dlsreasoner.alloy.reasoner.AlloySolver -import hu.bme.mit.inf.dlsreasoner.alloy.reasoner.AlloySolverConfiguration -import hu.bme.mit.inf.dslreasoner.visualisation.pi2graphviz.GraphvisVisualisation -import hu.bme.mit.inf.dslreasoner.visualisation.pi2graphviz.GraphvizVisualisation +import org.eclipse.viatra.query.runtime.api.IQuerySpecification +import java.util.Set +import java.util.Comparator enum Metamodel { FAM, YakinduWOSynch, Yakindu @@ -111,17 +109,18 @@ class ScenarioRunner { } else if(scenario.constraints == Constraints.MinusOne) { var first = true - //for(remove : vq.validationPatterns) { + + for(remove : vq.validationPatterns) { for(run : 1..scenario.runs) { - //val removeName = remove.fullyQualifiedName - //val desc = new ViatraQuerySetDescriptor(vq.patterns,vq.validationPatterns.filter[it != remove].toSet,emptyMap) - runCase(first,"minusOne"+run,run,scenario,mm,vq,ps) + val removeName = remove.fullyQualifiedName + val vq_m = new ViatraQuerySetDescriptor(vq.patterns.filter[it != remove].toList,vq.validationPatterns.filter[it != remove].toSet,emptyMap) + runCase(first,"minusOne_"+removeName+"_"+run,run,scenario,mm,vq_m,ps) first = false System.gc System.gc System.gc - //Thread.sleep(3000) + Thread.sleep(3000) } - //} + } } } @@ -170,7 +169,7 @@ class ScenarioRunner { loader = if(metamodel == Metamodel::FAM) { new FAMLoader(inputs) } else if(metamodel == Metamodel::Yakindu || metamodel == Metamodel::YakinduWOSynch) { - new YakinduLoader(inputs) => [it.useSynchronization = false] + new YakinduLoader(inputs) => [it.useSynchronization = false it.useComplexStates = true] } else throw new IllegalArgumentException('''Unknown domain: «metamodel»''') } @@ -193,28 +192,28 @@ class ScenarioRunner { it.nameNewElements = false it.typeInferenceMethod = TypeInferenceMethod.PreliminaryAnalysis it.searchSpaceConstraints.additionalGlobalConstraints += loader.additionalConstraints - it.debugCongiguration.partalInterpretationVisualisationFrequency = 1 - it.debugCongiguration.partialInterpretatioVisualiser = new GraphvizVisualisation + //it.debugCongiguration.partalInterpretationVisualisationFrequency = 1 + //it.debugCongiguration.partialInterpretatioVisualiser = new GraphvizVisualisation it.stateCoderStrategy = if(scenario.statecoder == StateCoder::ID) { StateCoderStrategy::IDBased } else { StateCoderStrategy::Neighbourhood } if(scenario.statecoder != StateCoder::ID || scenario.statecoder != StateCoder::Normal) { - val range = if(scenario.statecoder != StateCoder::R1) { + val range = if(scenario.statecoder === StateCoder::R1) { 1 - } else if(scenario.statecoder != StateCoder::R2) { + } else if(scenario.statecoder === StateCoder::R2) { 2 - } else if(scenario.statecoder != StateCoder::R3) { + } else if(scenario.statecoder === StateCoder::R3) { 3 } it.diversityRequirement = new DiversityDescriptor => [ it.relevantTypes = null it.relevantRelations = null - it.maxNumber = 1 + it.maxNumber = 0 it.range = range - it.parallels = 1 + it.parallels = 0 ] } ] @@ -254,10 +253,15 @@ class ScenarioRunner { val representationNumber = representationIndex + 1 if(representation instanceof PartialInterpretation) { workspace.writeModel(representation, '''solution«representationNumber».partialinterpretation''') - val partialInterpretation2GML = new PartialInterpretation2Gml - val gml = partialInterpretation2GML.transform(representation) - //ecore2GML.transform(root) - workspace.writeText('''solutionVisualisation«representationNumber».gml''',gml) +// val partialInterpretation2GML = new PartialInterpretation2Gml +// 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»''') + } else { workspace.writeText('''solution«representationNumber».txt''',representation.toString) } @@ -313,7 +317,7 @@ class ScenarioRunner { class DiverseMeasurementRunner { def static void main(String[] args) { - val scenario = new Scenario(30,49,Metamodel::Yakindu,Constraints.All,StateCoder.Normal,1,Solver::ViatraSolver) + val scenario = new Scenario(30,29,Metamodel::YakinduWOSynch,Constraints.Metamodel,StateCoder.R1,20,Solver::Alloy) val scenarioRunner = new ScenarioRunner scenarioRunner.runScenario(scenario) } diff --git a/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/SGraphInconsistencyDetector.xtend b/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/SGraphInconsistencyDetector.xtend index 4022804c..22addd3d 100644 --- a/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/SGraphInconsistencyDetector.xtend +++ b/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/SGraphInconsistencyDetector.xtend @@ -12,7 +12,7 @@ class SGraphInconsistencyDetector extends ModelGenerationMethodBasedGlobalConstr var ViatraQueryMatcher noEntry var ViatraQueryMatcher entryHasNoOutgoing var ViatraQueryMatcher choiceHasNoOutgiong - var ViatraQueryMatcher choiceHasNoIncoming + //var ViatraQueryMatcher choiceHasNoIncoming var ViatraQueryMatcher noSynch var ViatraQueryMatcher synchronizationHasNoOutgoing @@ -27,63 +27,48 @@ class SGraphInconsistencyDetector extends ModelGenerationMethodBasedGlobalConstr return SGraphInconsistencyDetector.simpleName } + def private selectMatcher(ThreadContext context, String name) { + val x = method.unfinishedWF.filter[ + it.fullyQualifiedName.equals(name) + ].head + if(x!==null) { + x.getMatcher(context.queryEngine) + } else { + return null + } + } + + def private numberOfMatches(ViatraQueryMatcher matcher) { + if(matcher!==null) { + matcher.countMatches + } else { + return 0 + } + } + override init(ThreadContext context) { partialInterpretation = context.model as PartialInterpretation - - try{ - this.noEntry = method.unfinishedWF.filter[ - it.fullyQualifiedName.equals("unfinishedBy_pattern_hu_bme_mit_inf_dslreasoner_partialsnapshot_mavo_yakindu_noEntryInRegion") - ].head.getMatcher(context.queryEngine) - - this.entryHasNoOutgoing = method.unfinishedWF.filter[ - it.fullyQualifiedName.equals("unfinishedBy_pattern_hu_bme_mit_inf_dslreasoner_partialsnapshot_mavo_yakindu_noOutgoingTransitionFromEntry") - ].head.getMatcher(context.queryEngine) - - this.noStateInRegion = method.unfinishedWF.filter[ - it.fullyQualifiedName.equals("unfinishedBy_pattern_hu_bme_mit_inf_dslreasoner_partialsnapshot_mavo_yakindu_noStateInRegion") - ].head.getMatcher(context.queryEngine) - - this.choiceHasNoOutgiong = method.unfinishedWF.filter[ - it.fullyQualifiedName.equals("unfinishedBy_pattern_hu_bme_mit_inf_dslreasoner_partialsnapshot_mavo_yakindu_choiceHasNoOutgoing") - ].head.getMatcher(context.queryEngine) - - } catch(Exception e) { } - try{ - this.noSynch = method.unfinishedWF.filter[ - it.fullyQualifiedName.equals("unfinishedBy_pattern_hu_bme_mit_inf_dslreasoner_partialsnapshot_mavo_yakindu_noSynch") - ].head.getMatcher(context.queryEngine) - - this.synchronizedSiblingRegions = method.unfinishedWF.filter[ - it.fullyQualifiedName.equals("unfinishedBy_pattern_hu_bme_mit_inf_dslreasoner_partialsnapshot_mavo_yakindu_SynchronizedRegionDoesNotHaveMultipleRegions") - ].head.getMatcher(context.queryEngine) - - this.synchronizationHasNoOutgoing = method.unfinishedWF.filter[ - it.fullyQualifiedName.equals("unfinishedBy_pattern_hu_bme_mit_inf_dslreasoner_partialsnapshot_mavo_yakindu_synchHasNoOutgoing") - ].head.getMatcher(context.queryEngine) - } catch(Exception e) { } + this.noEntry = context.selectMatcher("unfinishedBy_pattern_hu_bme_mit_inf_dslreasoner_partialsnapshot_mavo_yakindu_noEntryInRegion") + this.entryHasNoOutgoing = context.selectMatcher("unfinishedBy_pattern_hu_bme_mit_inf_dslreasoner_partialsnapshot_mavo_yakindu_noOutgoingTransitionFromEntry") + this.noStateInRegion = context.selectMatcher("unfinishedBy_pattern_hu_bme_mit_inf_dslreasoner_partialsnapshot_mavo_yakindu_noStateInRegion") + this.choiceHasNoOutgiong = context.selectMatcher("unfinishedBy_pattern_hu_bme_mit_inf_dslreasoner_partialsnapshot_mavo_yakindu_choiceHasNoOutgoing") + this.noSynch = context.selectMatcher("unfinishedBy_pattern_hu_bme_mit_inf_dslreasoner_partialsnapshot_mavo_yakindu_noSynch") + this.synchronizedSiblingRegions = context.selectMatcher("unfinishedBy_pattern_hu_bme_mit_inf_dslreasoner_partialsnapshot_mavo_yakindu_SynchronizedRegionDoesNotHaveMultipleRegions") + this.synchronizationHasNoOutgoing = context.selectMatcher("unfinishedBy_pattern_hu_bme_mit_inf_dslreasoner_partialsnapshot_mavo_yakindu_synchHasNoOutgoing") } override checkGlobalConstraint(ThreadContext context) { - if(noEntry !== null) { - var requiredNewObjects = noEntry.countMatches*2 +entryHasNoOutgoing.countMatches + noStateInRegion.countMatches - if(choiceHasNoOutgiong!=null) { - requiredNewObjects+=choiceHasNoOutgiong.countMatches - } - if(synchronizationHasNoOutgoing!= null) { - requiredNewObjects += - noSynch.countMatches*2 + - synchronizationHasNoOutgoing.countMatches + - synchronizedSiblingRegions.countMatches*4 - } - - val availableNewObjects = partialInterpretation.maxNewElements - val res = availableNewObjects >= requiredNewObjects - //println('''[«availableNewObjects» >= «requiredNewObjects»] = «res»''') - return res - } else { - true - } - + var requiredNewObjects = + noEntry.numberOfMatches*2 + + entryHasNoOutgoing.numberOfMatches + + noStateInRegion.numberOfMatches + + choiceHasNoOutgiong.numberOfMatches + + noSynch.numberOfMatches*2 + + synchronizationHasNoOutgoing.numberOfMatches + + synchronizedSiblingRegions.numberOfMatches*4 + val availableNewObjects = partialInterpretation.maxNewElements + val res = availableNewObjects >= requiredNewObjects + return res } override createNew() { return new SGraphInconsistencyDetector(this.method) diff --git a/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/VisualiseAllModelInDirectory.xtend b/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/VisualiseAllModelInDirectory.xtend index f0059a85..6b74d161 100644 --- a/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/VisualiseAllModelInDirectory.xtend +++ b/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/VisualiseAllModelInDirectory.xtend @@ -26,39 +26,48 @@ class VisualiseAllModelInDirectory { // val folderName = new File("D:/Data/ICSE18/FAM+WF/Largest-by-Graph-Solver") // for(subFolderName : folderName.listFiles) { // subFolderName.absolutePath.visualiseModel -// } +// } + visualise('''D:\FASE18Meas\OneMinus_Alloy''') } - def static visualiseModel(String folderName) { - val file = new File(folderName+"/"+"solution1.partialinterpretation") - val hasSource = file.exists - - - if(hasSource) { - val hasPng = new File(folderName+"/"+"solution1.png").exists - val hasGml = new File(folderName+"/"+"solution1.gml").exists - - val workspace = new FileSystemWorkspace(folderName,"") - val model = workspace.readModel(PartialInterpretation,"solution1.partialinterpretation") - - if(!hasGml) { - val partialInterpretation2GML = new PartialInterpretation2Gml - val gmlText = partialInterpretation2GML.transform(model) - workspace.writeText('''solution1.gml''',gmlText) - println('''solution1.gml''') + def static void visualise(String path) { + val file = new File(path) + if(file.isDirectory) { + for(subFileName : file.list) { + (path + "/" + subFileName).visualise } - - if(!hasPng && model.newElements.size <160) { - val visualiser = new GraphvizVisualisation - val visualisation = visualiser.visualiseConcretization(model) - visualisation.writeToFile(workspace,"solution1") - println("solution1.png") - println("Need png!") + } else if(file.isFile) { + if(path.endsWith("partialinterpretation")) { + visualiseModel(file,path) } - - println('''«folderName» visualised''') - } else { - println('''«folderName» missing''') + } + } + + def static visualiseModel(File file, String fileName) { + val list = file.name.split("\\.") + val fileNameWithoutExtension = list.subList(0,list.length-1).join('.') + val parent = file.parent + + val hasPng = new File(parent + "/" + fileNameWithoutExtension+".png").exists + val hasGml = new File(parent + "/" + fileNameWithoutExtension+".gml").exists + + val workspace = new FileSystemWorkspace(parent,"") + val model = workspace.readModel(PartialInterpretation,'''«fileNameWithoutExtension».partialinterpretation''') + + if(!hasGml) { + val partialInterpretation2GML = new PartialInterpretation2Gml + val gmlText = partialInterpretation2GML.transform(model) + workspace.writeText('''«fileNameWithoutExtension».gml''',gmlText) + println('''«fileNameWithoutExtension».gml''') } + + if(!hasPng && model.newElements.size <160) { + val visualiser = new GraphvizVisualisation + val visualisation = visualiser.visualiseConcretization(model) + visualisation.writeToFile(workspace,fileNameWithoutExtension) + println('''«fileNameWithoutExtension».png''') + } + + println('''«parent»/«fileNameWithoutExtension» visualised''') } } -- cgit v1.2.3-54-g00ecf