|
|
@@ -10,6 +10,8 @@ import static org.yakindu.sct.model.sexec.transformation.test.SCTTestUtil._creat
|
|
|
|
|
|
import org.junit.Test;
|
|
|
import org.yakindu.sct.model.sexec.ExecutionFlow;
|
|
|
+import org.yakindu.sct.model.sexec.ExecutionState;
|
|
|
+import org.yakindu.sct.model.sexec.StateVector;
|
|
|
import org.yakindu.sct.model.sexec.transformation.test.SCTTestUtil.OrthogonalFlatTSC;
|
|
|
import org.yakindu.sct.model.sexec.transformation.test.SCTTestUtil.SimpleFlatTSC;
|
|
|
import org.yakindu.sct.model.sgraph.Entry;
|
|
|
@@ -57,21 +59,29 @@ public class ModelSequencerStateVectorTest extends ModelSequencerTest {
|
|
|
*/
|
|
|
@Test public void testSCStateVectorDeepNonOrthopgonal() {
|
|
|
Statechart sc = _createStatechart("test");
|
|
|
- Region r = _createRegion("sc_r", sc);
|
|
|
- State s1 = _createState("s1", r);
|
|
|
+ Region r = _createRegion("r", sc);
|
|
|
+ _createState("s1", r);
|
|
|
State s2 = _createState("s2", r);
|
|
|
- Region s2_r = _createRegion("s2_r", s2);
|
|
|
+ Region s2_r = _createRegion("r", s2);
|
|
|
State s2_1 = _createState("s2_1", s2_r);
|
|
|
- State s2_2 = _createState("s2_2", s2_r);
|
|
|
- Region s2_1_r = _createRegion("s2_1_r", s2_1);
|
|
|
- State s2_1_1 = _createState("s2_1_1", s2_1_r);
|
|
|
- State s2_1_2 = _createState("s2_1_2", s2_1_r);
|
|
|
+ Region s2_1_r = _createRegion("r", s2_1);
|
|
|
+ _createState("s2_1_1", s2_1_r);
|
|
|
+ _createState("s2_1_2", s2_1_r);
|
|
|
+ _createState("s2_2", s2_r);
|
|
|
|
|
|
ExecutionFlow flow = sequencer.transform(sc);
|
|
|
|
|
|
assertNotNull(flow.getStateVector());
|
|
|
- assertEquals(1, flow.getStateVector().getSize());
|
|
|
- assertEquals(0, flow.getStateVector().getOffset());
|
|
|
+ assertStateVector(0, 1, flow.getStateVector());
|
|
|
+
|
|
|
+
|
|
|
+ assertStateVector(0, 1, getAssertedExState(flow, 0, "test.r.s1").getStateVector());
|
|
|
+ assertStateVector(0, 1, getAssertedExState(flow, 1, "test.r.s2").getStateVector());
|
|
|
+ assertStateVector(0, 1, getAssertedExState(flow, 2, "test.r.s2.r.s2_1").getStateVector());
|
|
|
+ assertStateVector(0, 1, getAssertedExState(flow, 3, "test.r.s2.r.s2_1.r.s2_1_1").getStateVector());
|
|
|
+ assertStateVector(0, 1, getAssertedExState(flow, 4, "test.r.s2.r.s2_1.r.s2_1_2").getStateVector());
|
|
|
+ assertStateVector(0, 1, getAssertedExState(flow, 5, "test.r.s2.r.s2_2").getStateVector());
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -83,39 +93,63 @@ public class ModelSequencerStateVectorTest extends ModelSequencerTest {
|
|
|
Statechart sc = _createStatechart("test");
|
|
|
|
|
|
{ // first top region
|
|
|
- Region r = _createRegion("sc_r1", sc);
|
|
|
- State s1 = _createState("s1", r);
|
|
|
+ Region r = _createRegion("r1", sc);
|
|
|
+ _createState("s1", r);
|
|
|
State s2 = _createState("s2", r);
|
|
|
{ // first sub region
|
|
|
- Region s2_r = _createRegion("s2_r", s2);
|
|
|
+ Region s2_r = _createRegion("r", s2);
|
|
|
State s2_1 = _createState("s2_1", s2_r);
|
|
|
- State s2_2 = _createState("s2_2", s2_r);
|
|
|
{ // first sub sub region
|
|
|
- Region s2_1_r = _createRegion("s2_1_r", s2_1);
|
|
|
- State s2_1_1 = _createState("s2_1_1", s2_1_r);
|
|
|
- State s2_1_2 = _createState("s2_1_2", s2_1_r);
|
|
|
+ Region s2_1_r = _createRegion("r1", s2_1);
|
|
|
+ _createState("s2_1_1", s2_1_r);
|
|
|
+ _createState("s2_1_2", s2_1_r);
|
|
|
}
|
|
|
{ // second sub sub region
|
|
|
- Region s2_2_r = _createRegion("s2_1_r2", s2_1);
|
|
|
- State s2_1_3 = _createState("s2_1_3", s2_2_r);
|
|
|
- State s2_1_4 = _createState("s2_2_4", s2_2_r);
|
|
|
+ Region s2_2_r = _createRegion("r2", s2_1);
|
|
|
+ _createState("s2_1_3", s2_2_r);
|
|
|
+ _createState("s2_1_4", s2_2_r);
|
|
|
}
|
|
|
+ _createState("s2_2", s2_r);
|
|
|
}
|
|
|
}
|
|
|
{ // second top region
|
|
|
- Region r = _createRegion("sc_r2", sc);
|
|
|
- State s1 = _createState("r2_s1", r);
|
|
|
- State s2 = _createState("r2_s2", r);
|
|
|
+ Region r = _createRegion("r2", sc);
|
|
|
+ _createState("s3", r);
|
|
|
+ _createState("s4", r);
|
|
|
}
|
|
|
|
|
|
|
|
|
ExecutionFlow flow = sequencer.transform(sc);
|
|
|
|
|
|
assertNotNull(flow.getStateVector());
|
|
|
- assertEquals(3, flow.getStateVector().getSize());
|
|
|
- assertEquals(0, flow.getStateVector().getOffset());
|
|
|
+ assertStateVector(0, 3, flow.getStateVector());
|
|
|
+
|
|
|
+ assertStateVector(0, 1, getAssertedExState(flow, 0, "test.r1.s1").getStateVector());
|
|
|
+ assertStateVector(0, 2, getAssertedExState(flow, 1, "test.r1.s2").getStateVector());
|
|
|
+ assertStateVector(0, 2, getAssertedExState(flow, 2, "test.r1.s2.r.s2_1").getStateVector());
|
|
|
+ assertStateVector(0, 1, getAssertedExState(flow, 3, "test.r1.s2.r.s2_1.r1.s2_1_1").getStateVector());
|
|
|
+ assertStateVector(0, 1, getAssertedExState(flow, 4, "test.r1.s2.r.s2_1.r1.s2_1_2").getStateVector());
|
|
|
+ assertStateVector(1, 1, getAssertedExState(flow, 5, "test.r1.s2.r.s2_1.r2.s2_1_3").getStateVector());
|
|
|
+ assertStateVector(1, 1, getAssertedExState(flow, 6, "test.r1.s2.r.s2_1.r2.s2_1_4").getStateVector());
|
|
|
+ assertStateVector(0, 1, getAssertedExState(flow, 7, "test.r1.s2.r.s2_2").getStateVector());
|
|
|
+ assertStateVector(2, 1, getAssertedExState(flow, 8, "test.r2.s3").getStateVector());
|
|
|
+ assertStateVector(2, 1, getAssertedExState(flow, 9, "test.r2.s4").getStateVector());
|
|
|
+
|
|
|
}
|
|
|
|
|
|
+ public ExecutionState getAssertedExState(ExecutionFlow flow, int offset, String name) {
|
|
|
+ ExecutionState s = flow.getStates().get(offset);
|
|
|
+ assertEquals(name, s.getName());
|
|
|
+
|
|
|
+ return s;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void assertStateVector(int offset, int size, StateVector sv) {
|
|
|
+ assertNotNull("state vector is null", sv);
|
|
|
+ assertEquals("wrong state vector offset -", offset, sv.getOffset());
|
|
|
+ assertEquals("wrong state vector size -", size, sv.getSize());
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* The state vector descriptor of the ExecutionFlow must have an offset of 0 and a size that is
|
|
|
@@ -125,7 +159,7 @@ public class ModelSequencerStateVectorTest extends ModelSequencerTest {
|
|
|
Statechart sc = _createStatechart("test");
|
|
|
|
|
|
{ // first top region
|
|
|
- Region r = _createRegion("sc_r1", sc);
|
|
|
+ _createRegion("sc_r1", sc);
|
|
|
}
|
|
|
|
|
|
ExecutionFlow flow = sequencer.transform(sc);
|