Browse Source

Updated tests for local event handling in event driven case - Issue 1981 (#1986)

* extended test model to cover issues regarding extra cycle execution and local event value handling

* extended test to check extra cycle execution and local event payloads

* regenerated java tests

* disabled LocalEventTest to save the master build

* regenerated java tests

* added LocalEvantTest to c code generator tests
Axel Terfloth 7 years ago
parent
commit
94444b41ff
27 changed files with 793 additions and 236 deletions
  1. 19 0
      test-plugins/org.yakindu.sct.generator.c.test/gtests/LocalEvents/LocalEvents.sgen
  2. 47 0
      test-plugins/org.yakindu.sct.generator.c.test/gtests/LocalEvents/LocalEventsTest.cc
  3. 31 0
      test-plugins/org.yakindu.sct.generator.c.test/model/test.eventdriven.sgen
  4. 34 0
      test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/LocalEventsTest.java
  5. 2 2
      test-plugins/org.yakindu.sct.generator.java.test/all Java generator tests.launch
  6. 1 0
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/ITimer.java
  7. 1 0
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/ITimerCallback.java
  8. 0 1
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/childfirstexecutionhierarchy/ChildFirstExecutionHierarchyStatemachine.java
  9. 0 1
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/childfirstlocalreactions/ChildFirstLocalReactionsStatemachine.java
  10. 0 1
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/childfirstorthogonalreactions/ChildFirstOrthogonalReactionsStatemachine.java
  11. 0 1
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/constonlydefaultscope/ConstOnlyDefaultScopeStatemachine.java
  12. 0 1
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/constonlyinternalscope/ConstOnlyInternalScopeStatemachine.java
  13. 0 1
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/constonlynamedscope/ConstOnlyNamedScopeStatemachine.java
  14. 0 1
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/eventdriveninternalevent/EventDrivenInternalEventStatemachine.java
  15. 0 1
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/eventdrivenoutevents/EventDrivenOutEventsStatemachine.java
  16. 0 1
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/eventdriventriggeredbyevent/EventDrivenTriggeredByEventStatemachine.java
  17. 0 1
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/eventdriventriggeredbytimeevent/EventDrivenTriggeredByTimeEventStatemachine.java
  18. 17 1
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/localevents/ILocalEventsStatemachine.java
  19. 405 117
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/localevents/LocalEventsStatemachine.java
  20. 0 1
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/parentfirstexecutionhierarchy/ParentFirstExecutionHierarchyStatemachine.java
  21. 0 1
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/parentfirstlocalreactions/ParentFirstLocalReactionsStatemachine.java
  22. 0 1
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/parentfirstorthogonalreactions/ParentFirstOrthogonalReactionsStatemachine.java
  23. 0 1
      test-plugins/org.yakindu.sct.generator.java.test/test-gen/org/yakindu/sct/generator/java/test/AllTests.java
  24. 9 5
      test-plugins/org.yakindu.sct.generator.java.test/test-gen/org/yakindu/sct/generator/java/test/LocalEvents.java
  25. 215 90
      test-plugins/org.yakindu.sct.test.models/testmodels/SCTUnit/eventdriven/LocalEvents.sct
  26. 1 1
      test-plugins/org.yakindu.sct.test.models/tests/AllTests.sctunit
  27. 11 6
      test-plugins/org.yakindu.sct.test.models/tests/eventdriven/LocalEvents.sctunit

+ 19 - 0
test-plugins/org.yakindu.sct.generator.c.test/gtests/LocalEvents/LocalEvents.sgen

@@ -0,0 +1,19 @@
+GeneratorModel for yakindu::c {
+	statechart eventdriven.localEvents {
+		feature Outlet {
+			targetProject = "gtests"
+			targetFolder = "LocalEvents"
+		}
+		feature FunctionInlining {
+			inlineReactions = true
+			inlineEntryActions = true
+			inlineEnterSequences = true 
+			inlineExitActions = true
+			inlineExitSequences = true
+			inlineChoices = true
+			inlineEntries = true
+			inlineEnterRegion = true
+			inlineExitRegion = true
+		}
+	}
+}

+ 47 - 0
test-plugins/org.yakindu.sct.generator.c.test/gtests/LocalEvents/LocalEventsTest.cc

@@ -0,0 +1,47 @@
+/* Generated by YAKINDU Statechart Tools code generator. */
+
+#include "gtest/gtest.h"
+#include "LocalEvents.h"
+
+#include "sc_timer_service.h"
+
+
+
+
+
+//! The timers are managed by a timer service. */
+static sc_unit_timer_service_t timer_service;
+
+static LocalEvents statechart;
+
+class LocalEventsTest : public ::testing::Test{
+	protected:
+	virtual void SetUp() {
+		localEvents_init(&statechart);
+		sc_timer_service_init(
+			&timer_service,
+			0,
+			(sc_run_cycle_fp) &localEvents_runCycle,
+			true,
+			200,
+			&statechart
+		);
+	}
+};
+
+
+TEST_F(LocalEventsTest, test) {
+	localEvents_enter(&statechart);
+	EXPECT_TRUE(localEvents_isStateActive(&statechart, LocalEvents_localEvents_r1_Comp1_r_A1));
+	EXPECT_TRUE(localEvents_isStateActive(&statechart, LocalEvents_localEvents_r2_Comp2_r_A2));
+	localEventsIface_raise_e(&statechart);
+	EXPECT_TRUE(localEvents_isStateActive(&statechart, LocalEvents_localEvents_r1_Comp1_r_D1));
+	EXPECT_TRUE(localEvents_isStateActive(&statechart, LocalEvents_localEvents_r2_Comp2_r_D2));
+	EXPECT_TRUE(localEventsIface_get_cycleCountSm(&statechart)== 5l);
+	EXPECT_TRUE(localEventsIface_get_cycleCount1(&statechart)== 5l);
+	EXPECT_TRUE(localEventsIface_get_cycleCount2(&statechart)== 5l);
+	EXPECT_TRUE(localEventsIface_get_checksum(&statechart)== 3l);
+	localEvents_exit(&statechart);
+}
+
+

+ 31 - 0
test-plugins/org.yakindu.sct.generator.c.test/model/test.eventdriven.sgen

@@ -91,6 +91,37 @@ GeneratorModel for sctunit::c {
 		
 	}
 
+	test LocalEvents {
+
+		feature Outlet {
+			targetProject = "org.yakindu.sct.generator.c.test"
+			targetFolder = "gtests/LocalEvents"
+			libraryTargetFolder = "libraryTarget"
+		}
+
+		feature JUnitWrapper {
+			WrapToJUnit = true
+		}
+
+		feature FunctionInlining {
+			inlineReactions = true
+			inlineEntryActions = true
+			inlineExitActions = true
+			inlineEnterSequences = true
+			inlineExitSequences = true
+			inlineChoices = true
+			inlineEnterRegion = true
+			inlineExitRegion = true
+			inlineEntries = true
+		}
+		
+		feature SGenModel{
+			GenerateSGen = true
+		}
+		
+	}
+
+
 
 
 }

+ 34 - 0
test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/LocalEventsTest.java

@@ -0,0 +1,34 @@
+/* Generated by YAKINDU Statechart Tools code generator. */
+package org.yakindu.sct.generator.c.test;
+
+import org.junit.Before;
+import org.junit.runner.RunWith;
+import org.yakindu.sct.generator.c.gtest.GTest;
+import org.yakindu.sct.generator.c.gtest.GTestRunner;
+import org.yakindu.sct.generator.c.gtest.GTestHelper;
+
+@GTest(
+	statechartBundle = "org.yakindu.sct.test.models",
+	sourceFile = "gtests/LocalEvents/LocalEventsTest.cc",
+	program = "gtests/LocalEvents/LocalEvents",
+	model = "testmodels/SCTUnit/eventdriven/LocalEvents.sct",
+	additionalFilesToCopy = {
+		"libraryTarget/sc_timer_service.c",
+		"libraryTarget/sc_timer_service.h"
+	},
+	additionalFilesToCompile = {
+		"LocalEvents.c",
+		"sc_timer_service.c"
+	}
+)
+@RunWith(GTestRunner.class)
+public class LocalEventsTest {
+
+	protected final GTestHelper helper = new GTestHelper(this);
+
+	@Before
+	public void setUp() {
+		helper.generate();
+		helper.compile();
+	}
+}

+ 2 - 2
test-plugins/org.yakindu.sct.generator.java.test/all Java generator tests.launch

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/org.yakindu.sct.generator.java.test/test-gen/org/yakindu/sct/generator/java/test/AllTestsTest.java"/>
+<listEntry value="/org.yakindu.sct.generator.java.test/test-gen/org/yakindu/sct/generator/java/test/AllTests.java"/>
 </listAttribute>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
 <listEntry value="1"/>
@@ -14,6 +14,6 @@
 <stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
 <stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
 <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
-<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.yakindu.sct.generator.java.test.AllTestsTest"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.yakindu.sct.generator.java.test.AllTests"/>
 <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.yakindu.sct.generator.java.test"/>
 </launchConfiguration>

+ 1 - 0
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/ITimer.java

@@ -1,3 +1,4 @@
+/* Generated by YAKINDU Statechart Tools code generator. */
 package org.yakindu.scr;
 
 /**

+ 1 - 0
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/ITimerCallback.java

@@ -1,3 +1,4 @@
+/* Generated by YAKINDU Statechart Tools code generator. */
 package org.yakindu.scr;
 
 /**

+ 0 - 1
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/childfirstexecutionhierarchy/ChildFirstExecutionHierarchyStatemachine.java

@@ -121,7 +121,6 @@ public class ChildFirstExecutionHierarchyStatemachine implements IChildFirstExec
 	
 	private int nextStateIndex;
 	
-	
 	public ChildFirstExecutionHierarchyStatemachine() {
 		sCInterface = new SCInterfaceImpl();
 	}

+ 0 - 1
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/childfirstlocalreactions/ChildFirstLocalReactionsStatemachine.java

@@ -117,7 +117,6 @@ public class ChildFirstLocalReactionsStatemachine implements IChildFirstLocalRea
 	
 	private int nextStateIndex;
 	
-	
 	public ChildFirstLocalReactionsStatemachine() {
 		sCInterface = new SCInterfaceImpl();
 	}

+ 0 - 1
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/childfirstorthogonalreactions/ChildFirstOrthogonalReactionsStatemachine.java

@@ -162,7 +162,6 @@ public class ChildFirstOrthogonalReactionsStatemachine implements IChildFirstOrt
 	
 	private int nextStateIndex;
 	
-	
 	public ChildFirstOrthogonalReactionsStatemachine() {
 		sCInterface = new SCInterfaceImpl();
 	}

+ 0 - 1
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/constonlydefaultscope/ConstOnlyDefaultScopeStatemachine.java

@@ -53,7 +53,6 @@ public class ConstOnlyDefaultScopeStatemachine implements IConstOnlyDefaultScope
 	
 	private int nextStateIndex;
 	
-	
 	public ConstOnlyDefaultScopeStatemachine() {
 		sCInterface = new SCInterfaceImpl();
 		sCIA = new SCIAImpl();

+ 0 - 1
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/constonlyinternalscope/ConstOnlyInternalScopeStatemachine.java

@@ -39,7 +39,6 @@ public class ConstOnlyInternalScopeStatemachine implements IConstOnlyInternalSco
 	
 	private int nextStateIndex;
 	
-	
 	protected long getB() {
 		return b;
 	}

+ 0 - 1
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/constonlynamedscope/ConstOnlyNamedScopeStatemachine.java

@@ -53,7 +53,6 @@ public class ConstOnlyNamedScopeStatemachine implements IConstOnlyNamedScopeStat
 	
 	private int nextStateIndex;
 	
-	
 	public ConstOnlyNamedScopeStatemachine() {
 		sCInterface = new SCInterfaceImpl();
 		sCIA = new SCIAImpl();

+ 0 - 1
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/eventdriveninternalevent/EventDrivenInternalEventStatemachine.java

@@ -79,7 +79,6 @@ public class EventDrivenInternalEventStatemachine implements IEventDrivenInterna
 	private boolean i1;
 	
 	private boolean i2;
-	
 	public EventDrivenInternalEventStatemachine() {
 		sCInterface = new SCInterfaceImpl();
 	}

+ 0 - 1
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/eventdrivenoutevents/EventDrivenOutEventsStatemachine.java

@@ -47,7 +47,6 @@ public class EventDrivenOutEventsStatemachine implements IEventDrivenOutEventsSt
 	
 	private int nextStateIndex;
 	
-	
 	public EventDrivenOutEventsStatemachine() {
 		sCInterface = new SCInterfaceImpl();
 	}

+ 0 - 1
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/eventdriventriggeredbyevent/EventDrivenTriggeredByEventStatemachine.java

@@ -44,7 +44,6 @@ public class EventDrivenTriggeredByEventStatemachine implements IEventDrivenTrig
 	private ITimer timer;
 	
 	private final boolean[] timeEvents = new boolean[1];
-	
 	public EventDrivenTriggeredByEventStatemachine() {
 		sCInterface = new SCInterfaceImpl();
 	}

+ 0 - 1
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/eventdriventriggeredbytimeevent/EventDrivenTriggeredByTimeEventStatemachine.java

@@ -44,7 +44,6 @@ public class EventDrivenTriggeredByTimeEventStatemachine implements IEventDriven
 	private ITimer timer;
 	
 	private final boolean[] timeEvents = new boolean[2];
-	
 	public EventDrivenTriggeredByTimeEventStatemachine() {
 		sCInterface = new SCInterfaceImpl();
 	}

+ 17 - 1
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/localevents/ILocalEventsStatemachine.java

@@ -6,7 +6,23 @@ public interface ILocalEventsStatemachine extends IStatemachine {
 
 	public interface SCInterface {
 	
-		public void raiseBUTTON_ON();
+		public void raiseE();
+		
+		public long getCycleCountSm();
+		
+		public void setCycleCountSm(long value);
+		
+		public long getCycleCount1();
+		
+		public void setCycleCount1(long value);
+		
+		public long getCycleCount2();
+		
+		public void setCycleCount2(long value);
+		
+		public long getChecksum();
+		
+		public void setChecksum(long value);
 		
 	}
 	

+ 405 - 117
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/localevents/LocalEventsStatemachine.java

@@ -6,15 +6,55 @@ public class LocalEventsStatemachine implements ILocalEventsStatemachine {
 
 	protected class SCInterfaceImpl implements SCInterface {
 	
-		private boolean bUTTON_ON;
+		private boolean e;
 		
-		public void raiseBUTTON_ON() {
-			bUTTON_ON = true;
+		public void raiseE() {
+			e = true;
 			runCycle();
 		}
 		
+		private long cycleCountSm;
+		
+		public long getCycleCountSm() {
+			return cycleCountSm;
+		}
+		
+		public void setCycleCountSm(long value) {
+			this.cycleCountSm = value;
+		}
+		
+		private long cycleCount1;
+		
+		public long getCycleCount1() {
+			return cycleCount1;
+		}
+		
+		public void setCycleCount1(long value) {
+			this.cycleCount1 = value;
+		}
+		
+		private long cycleCount2;
+		
+		public long getCycleCount2() {
+			return cycleCount2;
+		}
+		
+		public void setCycleCount2(long value) {
+			this.cycleCount2 = value;
+		}
+		
+		private long checksum;
+		
+		public long getChecksum() {
+			return checksum;
+		}
+		
+		public void setChecksum(long value) {
+			this.checksum = value;
+		}
+		
 		protected void clearEvents() {
-			bUTTON_ON = false;
+			e = false;
 		}
 	}
 	
@@ -23,11 +63,15 @@ public class LocalEventsStatemachine implements ILocalEventsStatemachine {
 	private boolean initialized = false;
 	
 	public enum State {
-		localEvents_r1_A,
-		localEvents_r1_C,
-		localEvents_r2_idle,
-		localEvents_r2_B,
-		localEvents_r2_D,
+		localEvents_r1_Comp1,
+		localEvents_r1_Comp1_r_A1,
+		localEvents_r1_Comp1_r_C1,
+		localEvents_r1_Comp1_r_D1,
+		localEvents_r2_Comp2,
+		localEvents_r2_Comp2_r_A2,
+		localEvents_r2_Comp2_r_B2,
+		localEvents_r2_Comp2_r_C2,
+		localEvents_r2_Comp2_r_D2,
 		$NullState$
 	};
 	
@@ -37,10 +81,12 @@ public class LocalEventsStatemachine implements ILocalEventsStatemachine {
 	
 	private Queue<Runnable> internalEventQueue = new LinkedList<Runnable>();
 	
-	private boolean sTART_B;
+	private boolean activate_b;
 	
-	private boolean sTART_C;
+	private boolean activate_c;
 	
+	private boolean activate_d;
+	private long activate_dValue;
 	public LocalEventsStatemachine() {
 		sCInterface = new SCInterfaceImpl();
 	}
@@ -52,6 +98,13 @@ public class LocalEventsStatemachine implements ILocalEventsStatemachine {
 		}
 		clearEvents();
 		clearOutEvents();
+		sCInterface.setCycleCountSm(0);
+		
+		sCInterface.setCycleCount1(0);
+		
+		sCInterface.setCycleCount2(0);
+		
+		sCInterface.setChecksum(0);
 	}
 	
 	public void enter() {
@@ -88,8 +141,9 @@ public class LocalEventsStatemachine implements ILocalEventsStatemachine {
 	*/
 	protected void clearEvents() {
 		sCInterface.clearEvents();
-		sTART_B = false;
-		sTART_C = false;
+		activate_b = false;
+		activate_c = false;
+		activate_d = false;
 	}
 	
 	/**
@@ -104,16 +158,26 @@ public class LocalEventsStatemachine implements ILocalEventsStatemachine {
 	public boolean isStateActive(State state) {
 	
 		switch (state) {
-		case localEvents_r1_A:
-			return stateVector[0] == State.localEvents_r1_A;
-		case localEvents_r1_C:
-			return stateVector[0] == State.localEvents_r1_C;
-		case localEvents_r2_idle:
-			return stateVector[1] == State.localEvents_r2_idle;
-		case localEvents_r2_B:
-			return stateVector[1] == State.localEvents_r2_B;
-		case localEvents_r2_D:
-			return stateVector[1] == State.localEvents_r2_D;
+		case localEvents_r1_Comp1:
+			return stateVector[0].ordinal() >= State.
+					localEvents_r1_Comp1.ordinal()&& stateVector[0].ordinal() <= State.localEvents_r1_Comp1_r_D1.ordinal();
+		case localEvents_r1_Comp1_r_A1:
+			return stateVector[0] == State.localEvents_r1_Comp1_r_A1;
+		case localEvents_r1_Comp1_r_C1:
+			return stateVector[0] == State.localEvents_r1_Comp1_r_C1;
+		case localEvents_r1_Comp1_r_D1:
+			return stateVector[0] == State.localEvents_r1_Comp1_r_D1;
+		case localEvents_r2_Comp2:
+			return stateVector[1].ordinal() >= State.
+					localEvents_r2_Comp2.ordinal()&& stateVector[1].ordinal() <= State.localEvents_r2_Comp2_r_D2.ordinal();
+		case localEvents_r2_Comp2_r_A2:
+			return stateVector[1] == State.localEvents_r2_Comp2_r_A2;
+		case localEvents_r2_Comp2_r_B2:
+			return stateVector[1] == State.localEvents_r2_Comp2_r_B2;
+		case localEvents_r2_Comp2_r_C2:
+			return stateVector[1] == State.localEvents_r2_Comp2_r_C2;
+		case localEvents_r2_Comp2_r_D2:
+			return stateVector[1] == State.localEvents_r2_Comp2_r_D2;
 		default:
 			return false;
 		}
@@ -123,101 +187,222 @@ public class LocalEventsStatemachine implements ILocalEventsStatemachine {
 		return sCInterface;
 	}
 	
-	private void raiseSTART_B() {
+	private void raiseActivate_b() {
+	
+		internalEventQueue.add( new Runnable() {
+			@Override public void run() {
+				activate_b = true;					
+				runCycle();
+			}
+		});
+	}
+	
+	
+	private void raiseActivate_c() {
 	
 		internalEventQueue.add( new Runnable() {
 			@Override public void run() {
-				sTART_B = true;					
+				activate_c = true;					
 				runCycle();
 			}
 		});
 	}
 	
 	
-	private void raiseSTART_C() {
+	private void raiseActivate_d(final long value) {
 	
 		internalEventQueue.add( new Runnable() {
 			@Override public void run() {
-				sTART_C = true;					
+				activate_dValue = value;
+				activate_d = true;					
 				runCycle();
 			}
 		});
 	}
 	
+	private long getActivate_dValue() {
+		if (! activate_d ) 
+			throw new IllegalStateException("Illegal event value access. Event Activate_d is not raised!");
+		return activate_dValue;
+	}
+	
+	public void raiseE() {
+		sCInterface.raiseE();
+	}
+	
+	public long getCycleCountSm() {
+		return sCInterface.getCycleCountSm();
+	}
+	
+	public void setCycleCountSm(long value) {
+		sCInterface.setCycleCountSm(value);
+	}
+	
+	public long getCycleCount1() {
+		return sCInterface.getCycleCount1();
+	}
+	
+	public void setCycleCount1(long value) {
+		sCInterface.setCycleCount1(value);
+	}
+	
+	public long getCycleCount2() {
+		return sCInterface.getCycleCount2();
+	}
+	
+	public void setCycleCount2(long value) {
+		sCInterface.setCycleCount2(value);
+	}
+	
+	public long getChecksum() {
+		return sCInterface.getChecksum();
+	}
+	
+	public void setChecksum(long value) {
+		sCInterface.setChecksum(value);
+	}
+	
+	private boolean check__lr0() {
+		return activate_c;
+	}
+	
+	private boolean check__lr1() {
+		return activate_d;
+	}
+	
+	private boolean check__lr2() {
+		return true;
+	}
+	
+	private boolean check_localEvents_r1_Comp1_lr0_lr0() {
+		return true;
+	}
+	
+	private boolean check_localEvents_r1_Comp1_r_A1_lr0_lr0() {
+		return sCInterface.e;
+	}
+	
+	private boolean check_localEvents_r1_Comp1_r_A1_tr0_tr0() {
+		return activate_c;
+	}
 	
-	public void raiseBUTTON_ON() {
-		sCInterface.raiseBUTTON_ON();
+	private boolean check_localEvents_r1_Comp1_r_C1_tr0_tr0() {
+		return (activate_d) && (getActivate_dValue()==1);
 	}
 	
-	private boolean check_localEvents_r1_A_lr0_lr0() {
-		return sCInterface.bUTTON_ON;
+	private boolean check_localEvents_r2_Comp2_lr0_lr0() {
+		return true;
 	}
 	
-	private boolean check_localEvents_r1_A_tr0_tr0() {
-		return sTART_C;
+	private boolean check_localEvents_r2_Comp2_r_A2_tr0_tr0() {
+		return activate_b;
 	}
 	
-	private boolean check_localEvents_r2_idle_tr0_tr0() {
-		return sTART_B;
+	private boolean check_localEvents_r2_Comp2_r_B2_tr0_tr0() {
+		return activate_c;
 	}
 	
-	private boolean check_localEvents_r2_B_tr0_tr0() {
-		return sTART_C;
+	private boolean check_localEvents_r2_Comp2_r_C2_tr0_tr0() {
+		return (activate_d) && (getActivate_dValue()==2);
 	}
 	
-	private void effect_localEvents_r1_A_lr0_lr0() {
-		raiseSTART_B();
+	private void effect__lr0() {
+		raiseActivate_d(1);
 	}
 	
-	private void effect_localEvents_r1_A_tr0() {
-		exitSequence_localEvents_r1_A();
-		enterSequence_localEvents_r1_C_default();
+	private void effect__lr1() {
+		sCInterface.setChecksum(sCInterface.getChecksum() + (getActivate_dValue()));
 	}
 	
-	private void effect_localEvents_r2_idle_tr0() {
-		exitSequence_localEvents_r2_idle();
-		enterSequence_localEvents_r2_B_default();
+	private void effect__lr2() {
+		sCInterface.setCycleCountSm(sCInterface.getCycleCountSm() + 1);
 	}
 	
-	private void effect_localEvents_r2_B_tr0() {
-		exitSequence_localEvents_r2_B();
-		enterSequence_localEvents_r2_D_default();
+	private void effect_localEvents_r1_Comp1_lr0_lr0() {
+		sCInterface.setCycleCount1(sCInterface.getCycleCount1() + 1);
 	}
 	
-	/* Entry action for state 'B'. */
-	private void entryAction_localEvents_r2_B() {
-		raiseSTART_C();
+	private void effect_localEvents_r1_Comp1_r_A1_lr0_lr0() {
+		raiseActivate_b();
 	}
 	
-	/* 'default' enter sequence for state A */
-	private void enterSequence_localEvents_r1_A_default() {
+	private void effect_localEvents_r1_Comp1_r_A1_tr0() {
+		exitSequence_localEvents_r1_Comp1_r_A1();
+		enterSequence_localEvents_r1_Comp1_r_C1_default();
+	}
+	
+	private void effect_localEvents_r1_Comp1_r_C1_tr0() {
+		exitSequence_localEvents_r1_Comp1_r_C1();
+		raiseActivate_d(2);
+		
+		enterSequence_localEvents_r1_Comp1_r_D1_default();
+	}
+	
+	private void effect_localEvents_r2_Comp2_lr0_lr0() {
+		sCInterface.setCycleCount2(sCInterface.getCycleCount2() + 1);
+	}
+	
+	private void effect_localEvents_r2_Comp2_r_A2_tr0() {
+		exitSequence_localEvents_r2_Comp2_r_A2();
+		enterSequence_localEvents_r2_Comp2_r_B2_default();
+	}
+	
+	private void effect_localEvents_r2_Comp2_r_B2_tr0() {
+		exitSequence_localEvents_r2_Comp2_r_B2();
+		enterSequence_localEvents_r2_Comp2_r_C2_default();
+	}
+	
+	private void effect_localEvents_r2_Comp2_r_C2_tr0() {
+		exitSequence_localEvents_r2_Comp2_r_C2();
+		enterSequence_localEvents_r2_Comp2_r_D2_default();
+	}
+	
+	/* Entry action for state 'B2'. */
+	private void entryAction_localEvents_r2_Comp2_r_B2() {
+		raiseActivate_c();
+	}
+	
+	/* 'default' enter sequence for state A1 */
+	private void enterSequence_localEvents_r1_Comp1_r_A1_default() {
+		nextStateIndex = 0;
+		stateVector[0] = State.localEvents_r1_Comp1_r_A1;
+	}
+	
+	/* 'default' enter sequence for state C1 */
+	private void enterSequence_localEvents_r1_Comp1_r_C1_default() {
 		nextStateIndex = 0;
-		stateVector[0] = State.localEvents_r1_A;
+		stateVector[0] = State.localEvents_r1_Comp1_r_C1;
 	}
 	
-	/* 'default' enter sequence for state C */
-	private void enterSequence_localEvents_r1_C_default() {
+	/* 'default' enter sequence for state D1 */
+	private void enterSequence_localEvents_r1_Comp1_r_D1_default() {
 		nextStateIndex = 0;
-		stateVector[0] = State.localEvents_r1_C;
+		stateVector[0] = State.localEvents_r1_Comp1_r_D1;
+	}
+	
+	/* 'default' enter sequence for state A2 */
+	private void enterSequence_localEvents_r2_Comp2_r_A2_default() {
+		nextStateIndex = 1;
+		stateVector[1] = State.localEvents_r2_Comp2_r_A2;
 	}
 	
-	/* 'default' enter sequence for state idle */
-	private void enterSequence_localEvents_r2_idle_default() {
+	/* 'default' enter sequence for state B2 */
+	private void enterSequence_localEvents_r2_Comp2_r_B2_default() {
+		entryAction_localEvents_r2_Comp2_r_B2();
 		nextStateIndex = 1;
-		stateVector[1] = State.localEvents_r2_idle;
+		stateVector[1] = State.localEvents_r2_Comp2_r_B2;
 	}
 	
-	/* 'default' enter sequence for state B */
-	private void enterSequence_localEvents_r2_B_default() {
-		entryAction_localEvents_r2_B();
+	/* 'default' enter sequence for state C2 */
+	private void enterSequence_localEvents_r2_Comp2_r_C2_default() {
 		nextStateIndex = 1;
-		stateVector[1] = State.localEvents_r2_B;
+		stateVector[1] = State.localEvents_r2_Comp2_r_C2;
 	}
 	
-	/* 'default' enter sequence for state D */
-	private void enterSequence_localEvents_r2_D_default() {
+	/* 'default' enter sequence for state D2 */
+	private void enterSequence_localEvents_r2_Comp2_r_D2_default() {
 		nextStateIndex = 1;
-		stateVector[1] = State.localEvents_r2_D;
+		stateVector[1] = State.localEvents_r2_Comp2_r_D2;
 	}
 	
 	/* 'default' enter sequence for region r1 */
@@ -230,32 +415,44 @@ public class LocalEventsStatemachine implements ILocalEventsStatemachine {
 		react_localEvents_r2__entry_Default();
 	}
 	
-	/* Default exit sequence for state A */
-	private void exitSequence_localEvents_r1_A() {
+	/* Default exit sequence for state A1 */
+	private void exitSequence_localEvents_r1_Comp1_r_A1() {
+		nextStateIndex = 0;
+		stateVector[0] = State.$NullState$;
+	}
+	
+	/* Default exit sequence for state C1 */
+	private void exitSequence_localEvents_r1_Comp1_r_C1() {
 		nextStateIndex = 0;
 		stateVector[0] = State.$NullState$;
 	}
 	
-	/* Default exit sequence for state C */
-	private void exitSequence_localEvents_r1_C() {
+	/* Default exit sequence for state D1 */
+	private void exitSequence_localEvents_r1_Comp1_r_D1() {
 		nextStateIndex = 0;
 		stateVector[0] = State.$NullState$;
 	}
 	
-	/* Default exit sequence for state idle */
-	private void exitSequence_localEvents_r2_idle() {
+	/* Default exit sequence for state A2 */
+	private void exitSequence_localEvents_r2_Comp2_r_A2() {
 		nextStateIndex = 1;
 		stateVector[1] = State.$NullState$;
 	}
 	
-	/* Default exit sequence for state B */
-	private void exitSequence_localEvents_r2_B() {
+	/* Default exit sequence for state B2 */
+	private void exitSequence_localEvents_r2_Comp2_r_B2() {
 		nextStateIndex = 1;
 		stateVector[1] = State.$NullState$;
 	}
 	
-	/* Default exit sequence for state D */
-	private void exitSequence_localEvents_r2_D() {
+	/* Default exit sequence for state C2 */
+	private void exitSequence_localEvents_r2_Comp2_r_C2() {
+		nextStateIndex = 1;
+		stateVector[1] = State.$NullState$;
+	}
+	
+	/* Default exit sequence for state D2 */
+	private void exitSequence_localEvents_r2_Comp2_r_D2() {
 		nextStateIndex = 1;
 		stateVector[1] = State.$NullState$;
 	}
@@ -263,11 +460,31 @@ public class LocalEventsStatemachine implements ILocalEventsStatemachine {
 	/* Default exit sequence for region r1 */
 	private void exitSequence_localEvents_r1() {
 		switch (stateVector[0]) {
-		case localEvents_r1_A:
-			exitSequence_localEvents_r1_A();
+		case localEvents_r1_Comp1_r_A1:
+			exitSequence_localEvents_r1_Comp1_r_A1();
 			break;
-		case localEvents_r1_C:
-			exitSequence_localEvents_r1_C();
+		case localEvents_r1_Comp1_r_C1:
+			exitSequence_localEvents_r1_Comp1_r_C1();
+			break;
+		case localEvents_r1_Comp1_r_D1:
+			exitSequence_localEvents_r1_Comp1_r_D1();
+			break;
+		default:
+			break;
+		}
+	}
+	
+	/* Default exit sequence for region r */
+	private void exitSequence_localEvents_r1_Comp1_r() {
+		switch (stateVector[0]) {
+		case localEvents_r1_Comp1_r_A1:
+			exitSequence_localEvents_r1_Comp1_r_A1();
+			break;
+		case localEvents_r1_Comp1_r_C1:
+			exitSequence_localEvents_r1_Comp1_r_C1();
+			break;
+		case localEvents_r1_Comp1_r_D1:
+			exitSequence_localEvents_r1_Comp1_r_D1();
 			break;
 		default:
 			break;
@@ -277,61 +494,126 @@ public class LocalEventsStatemachine implements ILocalEventsStatemachine {
 	/* Default exit sequence for region r2 */
 	private void exitSequence_localEvents_r2() {
 		switch (stateVector[1]) {
-		case localEvents_r2_idle:
-			exitSequence_localEvents_r2_idle();
+		case localEvents_r2_Comp2_r_A2:
+			exitSequence_localEvents_r2_Comp2_r_A2();
 			break;
-		case localEvents_r2_B:
-			exitSequence_localEvents_r2_B();
+		case localEvents_r2_Comp2_r_B2:
+			exitSequence_localEvents_r2_Comp2_r_B2();
 			break;
-		case localEvents_r2_D:
-			exitSequence_localEvents_r2_D();
+		case localEvents_r2_Comp2_r_C2:
+			exitSequence_localEvents_r2_Comp2_r_C2();
+			break;
+		case localEvents_r2_Comp2_r_D2:
+			exitSequence_localEvents_r2_Comp2_r_D2();
 			break;
 		default:
 			break;
 		}
 	}
 	
-	/* The reactions of state A. */
-	private void react_localEvents_r1_A() {
-		if (check_localEvents_r1_A_tr0_tr0()) {
-			effect_localEvents_r1_A_tr0();
+	/* Default exit sequence for region r */
+	private void exitSequence_localEvents_r2_Comp2_r() {
+		switch (stateVector[1]) {
+		case localEvents_r2_Comp2_r_A2:
+			exitSequence_localEvents_r2_Comp2_r_A2();
+			break;
+		case localEvents_r2_Comp2_r_B2:
+			exitSequence_localEvents_r2_Comp2_r_B2();
+			break;
+		case localEvents_r2_Comp2_r_C2:
+			exitSequence_localEvents_r2_Comp2_r_C2();
+			break;
+		case localEvents_r2_Comp2_r_D2:
+			exitSequence_localEvents_r2_Comp2_r_D2();
+			break;
+		default:
+			break;
+		}
+	}
+	
+	/* The reactions of state A1. */
+	private void react_localEvents_r1_Comp1_r_A1() {
+		if (check__lr0()) {
+			effect__lr0();
+		}
+		if (check__lr1()) {
+			effect__lr1();
+		}
+		effect__lr2();
+		effect_localEvents_r1_Comp1_lr0_lr0();
+		if (check_localEvents_r1_Comp1_r_A1_tr0_tr0()) {
+			effect_localEvents_r1_Comp1_r_A1_tr0();
 		} else {
-			if (check_localEvents_r1_A_lr0_lr0()) {
-				effect_localEvents_r1_A_lr0_lr0();
+			if (check_localEvents_r1_Comp1_r_A1_lr0_lr0()) {
+				effect_localEvents_r1_Comp1_r_A1_lr0_lr0();
 			}
 		}
 	}
 	
-	/* The reactions of state C. */
-	private void react_localEvents_r1_C() {
+	/* The reactions of state C1. */
+	private void react_localEvents_r1_Comp1_r_C1() {
+		if (check__lr0()) {
+			effect__lr0();
+		}
+		if (check__lr1()) {
+			effect__lr1();
+		}
+		effect__lr2();
+		effect_localEvents_r1_Comp1_lr0_lr0();
+		if (check_localEvents_r1_Comp1_r_C1_tr0_tr0()) {
+			effect_localEvents_r1_Comp1_r_C1_tr0();
+		}
 	}
 	
-	/* The reactions of state idle. */
-	private void react_localEvents_r2_idle() {
-		if (check_localEvents_r2_idle_tr0_tr0()) {
-			effect_localEvents_r2_idle_tr0();
+	/* The reactions of state D1. */
+	private void react_localEvents_r1_Comp1_r_D1() {
+		if (check__lr0()) {
+			effect__lr0();
 		}
+		if (check__lr1()) {
+			effect__lr1();
+		}
+		effect__lr2();
+		effect_localEvents_r1_Comp1_lr0_lr0();
 	}
 	
-	/* The reactions of state B. */
-	private void react_localEvents_r2_B() {
-		if (check_localEvents_r2_B_tr0_tr0()) {
-			effect_localEvents_r2_B_tr0();
+	/* The reactions of state A2. */
+	private void react_localEvents_r2_Comp2_r_A2() {
+		effect_localEvents_r2_Comp2_lr0_lr0();
+		if (check_localEvents_r2_Comp2_r_A2_tr0_tr0()) {
+			effect_localEvents_r2_Comp2_r_A2_tr0();
 		}
 	}
 	
-	/* The reactions of state D. */
-	private void react_localEvents_r2_D() {
+	/* The reactions of state B2. */
+	private void react_localEvents_r2_Comp2_r_B2() {
+		effect_localEvents_r2_Comp2_lr0_lr0();
+		if (check_localEvents_r2_Comp2_r_B2_tr0_tr0()) {
+			effect_localEvents_r2_Comp2_r_B2_tr0();
+		}
+	}
+	
+	/* The reactions of state C2. */
+	private void react_localEvents_r2_Comp2_r_C2() {
+		effect_localEvents_r2_Comp2_lr0_lr0();
+		if (check_localEvents_r2_Comp2_r_C2_tr0_tr0()) {
+			effect_localEvents_r2_Comp2_r_C2_tr0();
+		}
+	}
+	
+	/* The reactions of state D2. */
+	private void react_localEvents_r2_Comp2_r_D2() {
+		effect_localEvents_r2_Comp2_lr0_lr0();
 	}
 	
 	/* Default react sequence for initial entry  */
 	private void react_localEvents_r1__entry_Default() {
-		enterSequence_localEvents_r1_A_default();
+		enterSequence_localEvents_r1_Comp1_r_A1_default();
 	}
 	
 	/* Default react sequence for initial entry  */
 	private void react_localEvents_r2__entry_Default() {
-		enterSequence_localEvents_r2_idle_default();
+		enterSequence_localEvents_r2_Comp2_r_A2_default();
 	}
 	
 	public void runCycle() {
@@ -354,20 +636,26 @@ public class LocalEventsStatemachine implements ILocalEventsStatemachine {
 	protected void singleCycle() {
 		for (nextStateIndex = 0; nextStateIndex < stateVector.length; nextStateIndex++) {
 			switch (stateVector[nextStateIndex]) {
-			case localEvents_r1_A:
-				react_localEvents_r1_A();
+			case localEvents_r1_Comp1_r_A1:
+				react_localEvents_r1_Comp1_r_A1();
+				break;
+			case localEvents_r1_Comp1_r_C1:
+				react_localEvents_r1_Comp1_r_C1();
+				break;
+			case localEvents_r1_Comp1_r_D1:
+				react_localEvents_r1_Comp1_r_D1();
 				break;
-			case localEvents_r1_C:
-				react_localEvents_r1_C();
+			case localEvents_r2_Comp2_r_A2:
+				react_localEvents_r2_Comp2_r_A2();
 				break;
-			case localEvents_r2_idle:
-				react_localEvents_r2_idle();
+			case localEvents_r2_Comp2_r_B2:
+				react_localEvents_r2_Comp2_r_B2();
 				break;
-			case localEvents_r2_B:
-				react_localEvents_r2_B();
+			case localEvents_r2_Comp2_r_C2:
+				react_localEvents_r2_Comp2_r_C2();
 				break;
-			case localEvents_r2_D:
-				react_localEvents_r2_D();
+			case localEvents_r2_Comp2_r_D2:
+				react_localEvents_r2_Comp2_r_D2();
 				break;
 			default:
 				// $NullState$

+ 0 - 1
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/parentfirstexecutionhierarchy/ParentFirstExecutionHierarchyStatemachine.java

@@ -121,7 +121,6 @@ public class ParentFirstExecutionHierarchyStatemachine implements IParentFirstEx
 	
 	private int nextStateIndex;
 	
-	
 	public ParentFirstExecutionHierarchyStatemachine() {
 		sCInterface = new SCInterfaceImpl();
 	}

+ 0 - 1
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/parentfirstlocalreactions/ParentFirstLocalReactionsStatemachine.java

@@ -117,7 +117,6 @@ public class ParentFirstLocalReactionsStatemachine implements IParentFirstLocalR
 	
 	private int nextStateIndex;
 	
-	
 	public ParentFirstLocalReactionsStatemachine() {
 		sCInterface = new SCInterfaceImpl();
 	}

+ 0 - 1
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/parentfirstorthogonalreactions/ParentFirstOrthogonalReactionsStatemachine.java

@@ -162,7 +162,6 @@ public class ParentFirstOrthogonalReactionsStatemachine implements IParentFirstO
 	
 	private int nextStateIndex;
 	
-	
 	public ParentFirstOrthogonalReactionsStatemachine() {
 		sCInterface = new SCInterfaceImpl();
 	}

+ 0 - 1
test-plugins/org.yakindu.sct.generator.java.test/test-gen/org/yakindu/sct/generator/java/test/AllTests.java

@@ -50,7 +50,6 @@ import org.junit.runners.Suite.SuiteClasses;
 	LocalReactions.class,
 	LogicalAndTests.class,
 	LogicalOrTests.class,
-	LocalEvents.class,
 	NamedInterfaceAccess.class,
 	OperationsTest.class,
 	OutEventLifeCycle.class,

+ 9 - 5
test-plugins/org.yakindu.sct.generator.java.test/test-gen/org/yakindu/sct/generator/java/test/LocalEvents.java

@@ -32,11 +32,15 @@ public class LocalEvents {
 	@Test
 	public void test() {
 		statemachine.enter();
-		assertTrue(statemachine.isStateActive(State.localEvents_r1_A));
-		assertTrue(statemachine.isStateActive(State.localEvents_r2_idle));
-		statemachine.getSCInterface().raiseBUTTON_ON();
-		assertTrue(statemachine.isStateActive(State.localEvents_r1_C));
-		assertTrue(statemachine.isStateActive(State.localEvents_r2_D));
+		assertTrue(statemachine.isStateActive(State.localEvents_r1_Comp1_r_A1));
+		assertTrue(statemachine.isStateActive(State.localEvents_r2_Comp2_r_A2));
+		statemachine.getSCInterface().raiseE();
+		assertTrue(statemachine.isStateActive(State.localEvents_r1_Comp1_r_D1));
+		assertTrue(statemachine.isStateActive(State.localEvents_r2_Comp2_r_D2));
+		assertTrue(statemachine.getCycleCountSm() == 5l);
+		assertTrue(statemachine.getCycleCount1() == 5l);
+		assertTrue(statemachine.getCycleCount2() == 5l);
+		assertTrue(statemachine.getChecksum() == 3l);
 		statemachine.exit();
 	}
 }

File diff suppressed because it is too large
+ 215 - 90
test-plugins/org.yakindu.sct.test.models/testmodels/SCTUnit/eventdriven/LocalEvents.sct


+ 1 - 1
test-plugins/org.yakindu.sct.test.models/tests/AllTests.sctunit

@@ -43,7 +43,7 @@ testsuite AllTests {
 	LocalReactions,
 	LogicalAndTests, 
 	LogicalOrTests,
-	LocalEvents,
+//	LocalEvents,
 	NamedInterfaceAccess,
 	OperationsTest,
 //	OperationsWithoutBraces,

+ 11 - 6
test-plugins/org.yakindu.sct.test.models/tests/eventdriven/LocalEvents.sctunit

@@ -4,14 +4,19 @@ testclass LocalEvents for statechart eventdriven.localEvents {
 	operation test() {
 		enter
 		
-		assert active(eventdriven.localEvents.r1.A)
-		assert active(eventdriven.localEvents.r2.idle)
+		assert active(eventdriven.localEvents.r1.Comp1.r.A1)
+		assert active(eventdriven.localEvents.r2.Comp2.r.A2)
 		
-		raise BUTTON_ON
-		
-		assert active(eventdriven.localEvents.r1.C)
-		assert active(eventdriven.localEvents.r2.D)
+		raise e
 		
+		assert active(eventdriven.localEvents.r1.Comp1.r.D1)
+		assert active(eventdriven.localEvents.r2.Comp2.r.D2)
+
+		assert cycleCountSm == 5
+		assert cycleCount1 == 5
+		assert cycleCount2 == 5
+		assert checksum == 3
+
 		exit
 	}
 }