|
@@ -9,10 +9,13 @@ import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.AtomicUnity
|
|
|
import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.BoolLiteral
|
|
|
import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.CompositeOutputFunction
|
|
|
import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.CustomControlRule
|
|
|
+import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.Declaration
|
|
|
import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.InnerFMU
|
|
|
import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.MultiplyUnity
|
|
|
+import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.Neg
|
|
|
import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.Port
|
|
|
import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.SemanticAdaptation
|
|
|
+import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.SingleVarDeclaration
|
|
|
import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.Variable
|
|
|
import com.google.inject.Inject
|
|
|
import org.eclipse.xtext.testing.InjectWith
|
|
@@ -23,7 +26,6 @@ import org.eclipse.xtext.xbase.testing.CompilationTestHelper.Result
|
|
|
import org.junit.Assert
|
|
|
import org.junit.Test
|
|
|
import org.junit.runner.RunWith
|
|
|
-import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.Declaration
|
|
|
|
|
|
@RunWith(XtextRunner)
|
|
|
@InjectWith(SemanticAdaptationInjectorProvider)
|
|
@@ -34,14 +36,14 @@ class SemanticAdaptationGeneratorTest extends AbstractSemanticAdaptationTest{
|
|
|
@Test def test_inferTypesAndUnits_sample1() { __generate('input/canonical_generation/sample1.sa', new IAcceptor<CompilationTestHelper.Result>(){
|
|
|
override accept(Result t) {
|
|
|
var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head
|
|
|
- sa.name == "outerFMU"
|
|
|
- sa.eAllContents.filter(Port).filter[p | p.name=="ext_input_port3"].head.unity instanceof MultiplyUnity
|
|
|
- sa.eAllContents.filter(InnerFMU).filter[f | f.name=="innerFMU2"].head
|
|
|
- .eAllContents.filter(Port).filter[p | p.name=="innerFMU2__input_port1"].head.type == "Real"
|
|
|
- sa.eAllContents.filter(InnerFMU).filter[f | f.name=="innerFMU2"].head
|
|
|
- .eAllContents.filter(Port).filter[p | p.name=="innerFMU2__outout_port1"].head.type == "Real"
|
|
|
- sa.eAllContents.filter(InnerFMU).filter[f | f.name=="innerFMU2"].head
|
|
|
- .eAllContents.filter(Port).filter[p | p.name=="innerFMU2__outout_port1"].head.unity instanceof AtomicUnity
|
|
|
+ Assert.assertTrue(sa.name == "outerFMU")
|
|
|
+ Assert.assertTrue(sa.eAllContents.filter(Port).filter[p | p.name=="ext_input_port3"].head.unity instanceof MultiplyUnity)
|
|
|
+ Assert.assertTrue(sa.eAllContents.filter(InnerFMU).filter[f | f.name=="innerFMU2"].head
|
|
|
+ .eAllContents.filter(Port).filter[p | p.name=="innerFMU2__input_port1"].head.type == "Real")
|
|
|
+ Assert.assertTrue(sa.eAllContents.filter(InnerFMU).filter[f | f.name=="innerFMU2"].head
|
|
|
+ .eAllContents.filter(Port).filter[p | p.name=="innerFMU2__outout_port1"].head.type == "Real")
|
|
|
+ Assert.assertTrue(sa.eAllContents.filter(InnerFMU).filter[f | f.name=="innerFMU2"].head
|
|
|
+ .eAllContents.filter(Port).filter[p | p.name=="innerFMU2__outout_port1"].head.unity instanceof AtomicUnity)
|
|
|
|
|
|
}
|
|
|
}) }
|
|
@@ -49,9 +51,9 @@ class SemanticAdaptationGeneratorTest extends AbstractSemanticAdaptationTest{
|
|
|
@Test def test_addInputPorts_sample1() { __generate('input/canonical_generation/sample1.sa', new IAcceptor<CompilationTestHelper.Result>(){
|
|
|
override accept(Result t) {
|
|
|
var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head
|
|
|
- sa.inports.filter[p | p.name=="innerFMU1__input_port2"].head.type == "Bool"
|
|
|
+ Assert.assertTrue(sa.inports.filter[p | p.name=="innerFMU1__input_port2"].head.type == "Bool")
|
|
|
|
|
|
- sa.inports.filter[p | p.name=="innerFMU1__input_port1"].size == 0
|
|
|
+ Assert.assertTrue(sa.inports.filter[p | p.name=="innerFMU1__input_port1"].size == 0)
|
|
|
|
|
|
//sa.inports.filter[p | p.name=="innerFMU2__input_port3"].head.targetdependency.owner.name == "innerFMU2"
|
|
|
//sa.inports.filter[p | p.name=="innerFMU2__input_port3"].head.targetdependency.port.name == "input_port3"
|
|
@@ -61,32 +63,32 @@ class SemanticAdaptationGeneratorTest extends AbstractSemanticAdaptationTest{
|
|
|
@Test def test_addParams_sample1() { __generate('input/canonical_generation/sample1.sa', new IAcceptor<CompilationTestHelper.Result>(){
|
|
|
override accept(Result t) {
|
|
|
var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head
|
|
|
- sa.params.head.declarations.filter[p | p.name=="INIT_EXT_INPUT_PORT3"].head.type == "Real"
|
|
|
- sa.params.head.declarations.filter[p | p.name=="INIT_INNERFMU1__INPUT_PORT2"].head.expr instanceof BoolLiteral
|
|
|
+ Assert.assertTrue(sa.params.head.declarations.filter[p | p.name=="INIT_EXT_INPUT_PORT3"].head.type == "Real")
|
|
|
+ Assert.assertTrue(sa.params.head.declarations.filter[p | p.name=="INIT_INNERFMU1__INPUT_PORT2"].head.expr instanceof BoolLiteral)
|
|
|
}
|
|
|
}) }
|
|
|
|
|
|
@Test def test_addInVars_sample1() { __generate('input/canonical_generation/sample1.sa', new IAcceptor<CompilationTestHelper.Result>(){
|
|
|
override accept(Result t) {
|
|
|
var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head
|
|
|
- sa.in.globalInVars.head.declarations.filter[p | p.name=="stored__innerFMU2__input_port2"].head.type == "Bool"
|
|
|
- sa.in.globalInVars.head.declarations.filter[p | p.name=="stored__innerFMU2__input_port3"].head.expr instanceof Variable
|
|
|
+ Assert.assertTrue(sa.in.globalInVars.head.declarations.filter[p | p.name=="stored__innerFMU2__input_port2"].head.type == "Bool")
|
|
|
+ Assert.assertTrue(sa.in.globalInVars.head.declarations.filter[p | p.name=="stored__innerFMU2__input_port3"].head.expr instanceof Variable)
|
|
|
}
|
|
|
}) }
|
|
|
|
|
|
@Test def test_addOutVars_sample1() { __generate('input/canonical_generation/sample1.sa', new IAcceptor<CompilationTestHelper.Result>(){
|
|
|
override accept(Result t) {
|
|
|
var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head
|
|
|
- sa.out.globalOutVars.head.declarations.filter[p | p.name=="stored__innerFMU1__output_port2"].head.type == "Integer"
|
|
|
+ Assert.assertTrue(sa.out.globalOutVars.head.declarations.filter[p | p.name=="stored__innerFMU1__output_port2"].head.type == "Integer")
|
|
|
}
|
|
|
}) }
|
|
|
|
|
|
@Test def test_addExternal2InputPortStoredAssignments_sample1() { __generate('input/canonical_generation/sample1.sa', new IAcceptor<CompilationTestHelper.Result>(){
|
|
|
override accept(Result t) {
|
|
|
var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head
|
|
|
- sa.in.rules.head.statetransitionfunction.statements.head instanceof Assignment
|
|
|
- (sa.in.rules.head.statetransitionfunction.statements.head as Assignment).lvalue.ref.name == "stored__innerFMU2__input_port3"
|
|
|
- ((sa.in.rules.head.statetransitionfunction.statements.head as Assignment).expr as Variable).ref.name == "innerFMU2__input_port3"
|
|
|
+ val fistAssignment = sa.in.rules.head.statetransitionfunction.statements.head as Assignment
|
|
|
+ Assert.assertTrue((fistAssignment.lvalue as Variable).ref instanceof SingleVarDeclaration)
|
|
|
+ Assert.assertTrue((fistAssignment.expr as Variable).ref instanceof Port)
|
|
|
}
|
|
|
}) }
|
|
|
|
|
@@ -104,8 +106,8 @@ class SemanticAdaptationGeneratorTest extends AbstractSemanticAdaptationTest{
|
|
|
var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head
|
|
|
val outFunction = sa.in.rules.head.outputfunction as CompositeOutputFunction
|
|
|
val firstAssignment = outFunction.statements.head as Assignment
|
|
|
- firstAssignment.lvalue.ref.name == "input_port3"
|
|
|
- (firstAssignment.expr as Variable).ref.name == "innerFMU2__input_port3"
|
|
|
+ Assert.assertTrue(firstAssignment.lvalue.ref.name == "innerFMU2__input_port1")
|
|
|
+ Assert.assertTrue((firstAssignment.expr as Variable).ref.name == "stored__innerFMU2__input_port1")
|
|
|
}
|
|
|
}) }
|
|
|
|
|
@@ -115,29 +117,29 @@ class SemanticAdaptationGeneratorTest extends AbstractSemanticAdaptationTest{
|
|
|
var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head
|
|
|
val outFunction = sa.out.rules.head.outputfunction as CompositeOutputFunction
|
|
|
val firstAssignment = outFunction.statements.head as Assignment
|
|
|
- firstAssignment.lvalue.ref.name == "ext_output_port2"
|
|
|
- (firstAssignment.expr as Variable).ref.name == "stored__innerFMU1__output_port2"
|
|
|
+ Assert.assertTrue(firstAssignment.lvalue.ref.name == "ext_output_port2")
|
|
|
+ Assert.assertTrue((firstAssignment.expr as Variable).ref.name == "stored__innerFMU1__output_port2")
|
|
|
}
|
|
|
}) }
|
|
|
|
|
|
@Test def test_removeInBindings_sample1() { __generate('input/canonical_generation/sample1.sa', new IAcceptor<CompilationTestHelper.Result>(){
|
|
|
override accept(Result t) {
|
|
|
var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head
|
|
|
- sa.inports.forall[p | p.targetdependency === null]
|
|
|
+ Assert.assertTrue(sa.inports.forall[p | p.targetdependency === null])
|
|
|
}
|
|
|
}) }
|
|
|
|
|
|
@Test def test_removeOutBindings_sample1() { __generate('input/canonical_generation/sample1.sa', new IAcceptor<CompilationTestHelper.Result>(){
|
|
|
override accept(Result t) {
|
|
|
var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head
|
|
|
- sa.outports.forall[p | p.sourcedependency === null]
|
|
|
+ Assert.assertTrue(sa.outports.forall[p | p.sourcedependency === null])
|
|
|
}
|
|
|
}) }
|
|
|
|
|
|
@Test def test_addOutParams_sample1() { __generate('input/canonical_generation/sample1.sa', new IAcceptor<CompilationTestHelper.Result>(){
|
|
|
override accept(Result t) {
|
|
|
var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head
|
|
|
- sa.params.head.declarations.filter[p | p.name == "INIT_INNERFMU2__OUTPUT_PORT2"].size == 1
|
|
|
+ Assert.assertTrue(sa.params.head.declarations.filter[p | p.name == "INIT_INNERFMU2__OUTPUT_PORT2"].size == 1)
|
|
|
}
|
|
|
}) }
|
|
|
|
|
@@ -145,40 +147,49 @@ class SemanticAdaptationGeneratorTest extends AbstractSemanticAdaptationTest{
|
|
|
@Test def test_createCoSimStepInstructions_sample2() { __generate('input/canonical_generation/sample2.sa', new IAcceptor<CompilationTestHelper.Result>(){
|
|
|
override accept(Result t) {
|
|
|
var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head()
|
|
|
- (sa.control.rule as CustomControlRule).controlRulestatements.filter[s | s instanceof Declaration].size>4
|
|
|
+ Assert.assertTrue((sa.control.rule as CustomControlRule).controlRulestatements.filter[s | s instanceof Declaration].size>4)
|
|
|
}
|
|
|
}) }
|
|
|
|
|
|
@Test def test_createInternalBindingAssignments_sample2() { __generate('input/canonical_generation/sample2.sa', new IAcceptor<CompilationTestHelper.Result>(){
|
|
|
override accept(Result t) {
|
|
|
var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head()
|
|
|
- (sa.control.rule as CustomControlRule).controlRulestatements.filter[s | s instanceof Assignment].size>4
|
|
|
+ Assert.assertTrue((sa.control.rule as CustomControlRule).controlRulestatements.filter[s | s instanceof Assignment].size>4)
|
|
|
}
|
|
|
}) }
|
|
|
|
|
|
@Test def test_ReplacePortRefs_sample1() { __generate('input/canonical_generation/sample1.sa', new IAcceptor<CompilationTestHelper.Result>(){
|
|
|
override accept(Result t) {
|
|
|
var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head
|
|
|
- noPortRefsLeft(sa)
|
|
|
+ Assert.assertTrue(noPortRefsLeft_LHS(sa))
|
|
|
+ }
|
|
|
+ }) }
|
|
|
+
|
|
|
+ @Test def test_ReplacePortRefs_windowsa() { __generate('input/power_window_case_study/window_sa.BASE.sa', new IAcceptor<CompilationTestHelper.Result>(){
|
|
|
+ override accept(Result t) {
|
|
|
+ var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head
|
|
|
+ Assert.assertTrue(noPortRefsLeft_LHS(sa))
|
|
|
+ val tauAssignment = ((sa.out.rules.head.outputfunction as CompositeOutputFunction).statements.get(1) as Assignment)
|
|
|
+ Assert.assertFalse(((tauAssignment.expr as Neg).right as Variable).ref instanceof Port)
|
|
|
}
|
|
|
}) }
|
|
|
|
|
|
- def noPortRefsLeft(Adaptation sa){
|
|
|
+ def noPortRefsLeft_LHS(Adaptation sa){
|
|
|
return sa.in.rules.forall[dr |
|
|
|
- (dr.outputfunction as CompositeOutputFunction).statements.forall[ s |
|
|
|
- s.eAllContents.filter[v | v instanceof Variable].forall[ v |
|
|
|
+ (dr.outputfunction as CompositeOutputFunction).statements.filter[s | s instanceof Assignment].forall[ s |
|
|
|
+ (s as Assignment).expr.eAllContents.filter[v | v instanceof Variable].forall[ v |
|
|
|
! ((v as Variable).ref instanceof Port)
|
|
|
]
|
|
|
]
|
|
|
] &&
|
|
|
- (sa.control.rule as CustomControlRule).controlRulestatements.forall[ s |
|
|
|
- s.eAllContents.filter[v | v instanceof Variable].forall[ v |
|
|
|
+ (sa.control.rule as CustomControlRule).controlRulestatements.filter[s | s instanceof Assignment].forall[ s |
|
|
|
+ (s as Assignment).expr.eAllContents.filter[v | v instanceof Variable].forall[ v |
|
|
|
! ((v as Variable).ref instanceof Port)
|
|
|
]
|
|
|
] &&
|
|
|
sa.out.rules.forall[dr |
|
|
|
- (dr.outputfunction as CompositeOutputFunction).statements.forall[ s |
|
|
|
- s.eAllContents.filter[v | v instanceof Variable].forall[ v |
|
|
|
+ (dr.outputfunction as CompositeOutputFunction).statements.filter[s | s instanceof Assignment].forall[ s |
|
|
|
+ (s as Assignment).expr.eAllContents.filter[v | v instanceof Variable].forall[ v |
|
|
|
! ((v as Variable).ref instanceof Port)
|
|
|
]
|
|
|
]
|
|
@@ -188,7 +199,7 @@ class SemanticAdaptationGeneratorTest extends AbstractSemanticAdaptationTest{
|
|
|
@Test def test_ReplacePortRefs_sample2() { __generate('input/canonical_generation/sample2.sa', new IAcceptor<CompilationTestHelper.Result>(){
|
|
|
override accept(Result t) {
|
|
|
var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head
|
|
|
- noPortRefsLeft(sa)
|
|
|
+ noPortRefsLeft_LHS(sa)
|
|
|
}
|
|
|
}) }
|
|
|
|