SemanticAdaptationGeneratorTest.xtend 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. /*
  2. * generated by Xtext 2.10.0
  3. */
  4. package be.uantwerpen.ansymo.semanticadaptation.tests
  5. import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.Adaptation
  6. import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.Assignment
  7. import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.AtomicUnity
  8. import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.BoolLiteral
  9. import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.CompositeOutputFunction
  10. import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.CustomControlRule
  11. import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.Declaration
  12. import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.InnerFMU
  13. import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.MultiplyUnity
  14. import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.Neg
  15. import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.Port
  16. import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.SemanticAdaptation
  17. import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.SingleVarDeclaration
  18. import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.Variable
  19. import com.google.inject.Inject
  20. import org.eclipse.xtext.testing.InjectWith
  21. import org.eclipse.xtext.testing.XtextRunner
  22. import org.eclipse.xtext.util.IAcceptor
  23. import org.eclipse.xtext.xbase.testing.CompilationTestHelper
  24. import org.eclipse.xtext.xbase.testing.CompilationTestHelper.Result
  25. import org.junit.Assert
  26. import org.junit.Test
  27. import org.junit.runner.RunWith
  28. @RunWith(XtextRunner)
  29. @InjectWith(SemanticAdaptationInjectorProvider)
  30. class SemanticAdaptationGeneratorTest extends AbstractSemanticAdaptationTest{
  31. @Inject extension CompilationTestHelper
  32. @Test def test_inferTypesAndUnits_sample1() { __generate('input/canonical_generation/sample1.sa', new IAcceptor<CompilationTestHelper.Result>(){
  33. override accept(Result t) {
  34. var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head
  35. Assert.assertTrue(sa.name == "outerFMU")
  36. Assert.assertTrue(sa.eAllContents.filter(Port).filter[p | p.name=="ext_input_port3"].head.unity instanceof MultiplyUnity)
  37. Assert.assertTrue(sa.eAllContents.filter(InnerFMU).filter[f | f.name=="innerFMU2"].head
  38. .eAllContents.filter(Port).filter[p | p.name=="innerFMU2__input_port1"].head.type == "Real")
  39. Assert.assertTrue(sa.eAllContents.filter(InnerFMU).filter[f | f.name=="innerFMU2"].head
  40. .eAllContents.filter(Port).filter[p | p.name=="innerFMU2__outout_port1"].head.type == "Real")
  41. Assert.assertTrue(sa.eAllContents.filter(InnerFMU).filter[f | f.name=="innerFMU2"].head
  42. .eAllContents.filter(Port).filter[p | p.name=="innerFMU2__outout_port1"].head.unity instanceof AtomicUnity)
  43. }
  44. }) }
  45. @Test def test_addInputPorts_sample1() { __generate('input/canonical_generation/sample1.sa', new IAcceptor<CompilationTestHelper.Result>(){
  46. override accept(Result t) {
  47. var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head
  48. Assert.assertTrue(sa.inports.filter[p | p.name=="innerFMU1__input_port2"].head.type == "Bool")
  49. Assert.assertTrue(sa.inports.filter[p | p.name=="innerFMU1__input_port1"].size == 0)
  50. //sa.inports.filter[p | p.name=="innerFMU2__input_port3"].head.targetdependency.owner.name == "innerFMU2"
  51. //sa.inports.filter[p | p.name=="innerFMU2__input_port3"].head.targetdependency.port.name == "input_port3"
  52. }
  53. }) }
  54. @Test def test_addParams_sample1() { __generate('input/canonical_generation/sample1.sa', new IAcceptor<CompilationTestHelper.Result>(){
  55. override accept(Result t) {
  56. var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head
  57. Assert.assertTrue(sa.params.head.declarations.filter[p | p.name=="INIT_EXT_INPUT_PORT3"].head.type == "Real")
  58. Assert.assertTrue(sa.params.head.declarations.filter[p | p.name=="INIT_INNERFMU1__INPUT_PORT2"].head.expr instanceof BoolLiteral)
  59. }
  60. }) }
  61. @Test def test_addInVars_sample1() { __generate('input/canonical_generation/sample1.sa', new IAcceptor<CompilationTestHelper.Result>(){
  62. override accept(Result t) {
  63. var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head
  64. Assert.assertTrue(sa.in.globalInVars.head.declarations.filter[p | p.name=="stored__innerFMU2__input_port2"].head.type == "Bool")
  65. Assert.assertTrue(sa.in.globalInVars.head.declarations.filter[p | p.name=="stored__innerFMU2__input_port3"].head.expr instanceof Variable)
  66. }
  67. }) }
  68. @Test def test_addOutVars_sample1() { __generate('input/canonical_generation/sample1.sa', new IAcceptor<CompilationTestHelper.Result>(){
  69. override accept(Result t) {
  70. var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head
  71. Assert.assertTrue(sa.out.globalOutVars.head.declarations.filter[p | p.name=="stored__innerFMU1__output_port2"].head.type == "Integer")
  72. }
  73. }) }
  74. @Test def test_addExternal2InputPortStoredAssignments_sample1() { __generate('input/canonical_generation/sample1.sa', new IAcceptor<CompilationTestHelper.Result>(){
  75. override accept(Result t) {
  76. var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head
  77. val fistAssignment = sa.in.rules.head.statetransitionfunction.statements.head as Assignment
  78. Assert.assertTrue((fistAssignment.lvalue as Variable).ref instanceof SingleVarDeclaration)
  79. Assert.assertTrue((fistAssignment.expr as Variable).ref instanceof Port)
  80. }
  81. }) }
  82. @Test def test_addInternal2OutputPortStoredAssignments_sample1() { __generate('input/canonical_generation/sample1.sa', new IAcceptor<CompilationTestHelper.Result>(){
  83. override accept(Result t) {
  84. var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head
  85. var firstAssignment = sa.out.rules.head.statetransitionfunction.statements.head as Assignment
  86. Assert.assertNotEquals((firstAssignment.expr as Variable).owner.name, "outerFMU_BASE")
  87. }
  88. }) }
  89. @Test def test_addInRules_External2Internal_Assignments_sample1() { __generate('input/canonical_generation/sample1.sa', new IAcceptor<CompilationTestHelper.Result>(){
  90. override accept(Result t) {
  91. var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head
  92. val outFunction = sa.in.rules.head.outputfunction as CompositeOutputFunction
  93. val firstAssignment = outFunction.statements.head as Assignment
  94. Assert.assertTrue(firstAssignment.lvalue.ref.name == "innerFMU2__input_port1")
  95. Assert.assertTrue((firstAssignment.expr as Variable).ref.name == "stored__innerFMU2__input_port1")
  96. }
  97. }) }
  98. @Test def test_addOutRules_Internal2External_Assignments_sample1() { __generate('input/canonical_generation/sample1.sa', new IAcceptor<CompilationTestHelper.Result>(){
  99. override accept(Result t) {
  100. var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head
  101. val outFunction = sa.out.rules.head.outputfunction as CompositeOutputFunction
  102. val firstAssignment = outFunction.statements.head as Assignment
  103. Assert.assertTrue(firstAssignment.lvalue.ref.name == "ext_output_port2")
  104. Assert.assertTrue((firstAssignment.expr as Variable).ref.name == "stored__innerFMU1__output_port2")
  105. }
  106. }) }
  107. @Test def test_removeInBindings_sample1() { __generate('input/canonical_generation/sample1.sa', new IAcceptor<CompilationTestHelper.Result>(){
  108. override accept(Result t) {
  109. var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head
  110. Assert.assertTrue(sa.inports.forall[p | p.targetdependency === null])
  111. }
  112. }) }
  113. @Test def test_removeOutBindings_sample1() { __generate('input/canonical_generation/sample1.sa', new IAcceptor<CompilationTestHelper.Result>(){
  114. override accept(Result t) {
  115. var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head
  116. Assert.assertTrue(sa.outports.forall[p | p.sourcedependency === null])
  117. }
  118. }) }
  119. @Test def test_addOutParams_sample1() { __generate('input/canonical_generation/sample1.sa', new IAcceptor<CompilationTestHelper.Result>(){
  120. override accept(Result t) {
  121. var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head
  122. Assert.assertTrue(sa.params.head.declarations.filter[p | p.name == "INIT_INNERFMU2__OUTPUT_PORT2"].size == 1)
  123. }
  124. }) }
  125. @Test def test_createCoSimStepInstructions_sample2() { __generate('input/canonical_generation/sample2.sa', new IAcceptor<CompilationTestHelper.Result>(){
  126. override accept(Result t) {
  127. var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head()
  128. Assert.assertTrue((sa.control.rule as CustomControlRule).controlRulestatements.filter[s | s instanceof Declaration].size>4)
  129. }
  130. }) }
  131. @Test def test_createInternalBindingAssignments_sample2() { __generate('input/canonical_generation/sample2.sa', new IAcceptor<CompilationTestHelper.Result>(){
  132. override accept(Result t) {
  133. var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head()
  134. Assert.assertTrue((sa.control.rule as CustomControlRule).controlRulestatements.filter[s | s instanceof Assignment].size>4)
  135. }
  136. }) }
  137. @Test def test_ReplacePortRefs_sample1() { __generate('input/canonical_generation/sample1.sa', new IAcceptor<CompilationTestHelper.Result>(){
  138. override accept(Result t) {
  139. var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head
  140. Assert.assertTrue(noPortRefsLeft_LHS(sa))
  141. }
  142. }) }
  143. @Test def test_ReplacePortRefs_windowsa() { __generate('input/power_window_case_study/window_sa.BASE.sa', new IAcceptor<CompilationTestHelper.Result>(){
  144. override accept(Result t) {
  145. var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head
  146. Assert.assertTrue(noPortRefsLeft_LHS(sa))
  147. val tauAssignment = ((sa.out.rules.head.outputfunction as CompositeOutputFunction).statements.get(1) as Assignment)
  148. Assert.assertFalse(((tauAssignment.expr as Neg).right as Variable).ref instanceof Port)
  149. }
  150. }) }
  151. def noPortRefsLeft_LHS(Adaptation sa){
  152. return sa.in.rules.forall[dr |
  153. (dr.outputfunction as CompositeOutputFunction).statements.filter[s | s instanceof Assignment].forall[ s |
  154. (s as Assignment).expr.eAllContents.filter[v | v instanceof Variable].forall[ v |
  155. ! ((v as Variable).ref instanceof Port)
  156. ]
  157. ]
  158. ] &&
  159. (sa.control.rule as CustomControlRule).controlRulestatements.filter[s | s instanceof Assignment].forall[ s |
  160. (s as Assignment).expr.eAllContents.filter[v | v instanceof Variable].forall[ v |
  161. ! ((v as Variable).ref instanceof Port)
  162. ]
  163. ] &&
  164. sa.out.rules.forall[dr |
  165. (dr.outputfunction as CompositeOutputFunction).statements.filter[s | s instanceof Assignment].forall[ s |
  166. (s as Assignment).expr.eAllContents.filter[v | v instanceof Variable].forall[ v |
  167. ! ((v as Variable).ref instanceof Port)
  168. ]
  169. ]
  170. ]
  171. }
  172. @Test def test_ReplacePortRefs_sample2() { __generate('input/canonical_generation/sample2.sa', new IAcceptor<CompilationTestHelper.Result>(){
  173. override accept(Result t) {
  174. var Adaptation sa = t.resourceSet.resources.head.allContents.toIterable.filter(SemanticAdaptation).last.elements.filter(Adaptation).head
  175. noPortRefsLeft_LHS(sa)
  176. }
  177. }) }
  178. @Test def window_SA_parseNoExceptions() { __generate('input/power_window_case_study/window_sa.BASE.sa', new IAcceptor<CompilationTestHelper.Result>(){
  179. override accept(Result t) { }
  180. }) }
  181. @Test def window_SA_parseNoExceptions2() { __generate('input/power_window_case_study/window_sa_comp_units.sa', new IAcceptor<CompilationTestHelper.Result>(){
  182. override accept(Result t) { }
  183. }) }
  184. @Test def lazy_SA_parseNoExceptions() { __generate('input/power_window_case_study/lazy.sa', new IAcceptor<CompilationTestHelper.Result>(){
  185. override accept(Result t) { }
  186. }) }
  187. def void __generate(String filename, IAcceptor<CompilationTestHelper.Result> acceptor) {
  188. //readFile(filename).assertCompilesTo('oracles/power_window_case_study/lazy.BASE.sa')
  189. readFile(filename).compile(acceptor)
  190. }
  191. }