|
|
@@ -1,20 +1,28 @@
|
|
|
package ua.ansymo.hintco.test
|
|
|
|
|
|
+import java.util.Map
|
|
|
+import org.jgrapht.alg.connectivity.GabowStrongConnectivityInspector
|
|
|
import org.junit.Test
|
|
|
import ua.ansymo.hintco.AlgebraicLoopVariantProcessor
|
|
|
import ua.ansymo.hintco.CandidatesGenerator
|
|
|
+import ua.ansymo.hintco.CompleteTriggerSequence
|
|
|
import ua.ansymo.hintco.ConstraintChecker
|
|
|
import ua.ansymo.hintco.CosimUnitInstance
|
|
|
+import ua.ansymo.hintco.EmptyTriggerSequence
|
|
|
+import ua.ansymo.hintco.FmuLoader
|
|
|
+import ua.ansymo.hintco.IDed
|
|
|
+import ua.ansymo.hintco.IOutputProcessor
|
|
|
import ua.ansymo.hintco.ModelQuery
|
|
|
import ua.ansymo.hintco.ModelStorage
|
|
|
+import ua.ansymo.hintco.OutputPortInstance
|
|
|
+import ua.ansymo.hintco.PartialTriggerSequence
|
|
|
+import ua.ansymo.hintco.RootCandidateScenario
|
|
|
+import ua.ansymo.hintco.SingleCosimRunner
|
|
|
+import ua.ansymo.hintco.VariantProcessor
|
|
|
+import ua.ansymo.hintco.VariantValidator
|
|
|
|
|
|
import static org.junit.Assert.*
|
|
|
-import org.jgrapht.alg.connectivity.GabowStrongConnectivityInspector
|
|
|
-import ua.ansymo.hintco.RootCandidateScenario
|
|
|
-import org.jgrapht.graph.DefaultWeightedEdge
|
|
|
-import ua.ansymo.hintco.EmptyTriggerSequence
|
|
|
-import ua.ansymo.hintco.CompleteTriggerSequence
|
|
|
-import ua.ansymo.hintco.PartialTriggerSequence
|
|
|
+import ua.ansymo.hintco.OutputProcessor
|
|
|
|
|
|
class AlgebraicLoopProcessingTests {
|
|
|
|
|
|
@@ -110,4 +118,45 @@ class AlgebraicLoopProcessingTests {
|
|
|
])
|
|
|
}
|
|
|
|
|
|
+ @Test
|
|
|
+ def void createOperationsOrderTest(){
|
|
|
+ loadAndRunAlgLoopsSample([ scenario |
|
|
|
+ val algLoopProcessor = new AlgebraicLoopVariantProcessor(null)
|
|
|
+ val graph = algLoopProcessor.transformToCosimUnitGraph(scenario)
|
|
|
+ val searchGraphAndTriggerSeq = algLoopProcessor.findOptimalTriggerSequence(graph)
|
|
|
+ val searchGraph = searchGraphAndTriggerSeq.key
|
|
|
+ val triggerSeq = searchGraphAndTriggerSeq.value
|
|
|
+
|
|
|
+ val precedenceNodeOrder = algLoopProcessor.createOperationsOrder(triggerSeq)
|
|
|
+
|
|
|
+ val getIdIdx = [Integer i | (precedenceNodeOrder.get(i) as IDed).identifier]
|
|
|
+
|
|
|
+ assertEquals("B", getIdIdx.apply(0))
|
|
|
+ assertEquals("3toA", getIdIdx.apply(1))
|
|
|
+ assertEquals("3toC", getIdIdx.apply(2))
|
|
|
+ assertEquals("A", getIdIdx.apply(precedenceNodeOrder.length-3))
|
|
|
+ assertEquals("4toB", getIdIdx.apply(precedenceNodeOrder.length-2))
|
|
|
+ assertEquals("3toC", getIdIdx.apply(precedenceNodeOrder.length-1))
|
|
|
+ ])
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Test
|
|
|
+ def void executeMSDCaseStudyTest(){
|
|
|
+ val resultsDirPath = "results-gen/msdalglooptest"
|
|
|
+ val loader = new ModelStorage()
|
|
|
+ val src = loader.loadCandidates("examples/case_study_msd_algloop.hintco")
|
|
|
+
|
|
|
+// val runner = new SingleCosimRunner(new IOutputProcessor{
|
|
|
+// override initialize(RootCandidateScenario scenario, String variantID) {}
|
|
|
+// override terminate() {}
|
|
|
+// override setOutputs(int step, double time, Map<OutputPortInstance, Double> outVals) {}
|
|
|
+// }, new FmuLoader)
|
|
|
+ val runner = new SingleCosimRunner(new OutputProcessor(resultsDirPath), new FmuLoader)
|
|
|
+ val generator = new CandidatesGenerator(new ConstraintChecker,new VariantValidator, new AlgebraicLoopVariantProcessor(runner))
|
|
|
+ generator.createVariantTree(src)
|
|
|
+ generator.generateVariants(src, 1, true)
|
|
|
+ runner.close()
|
|
|
+ }
|
|
|
+
|
|
|
}
|