Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'tests/org.eclipse.etrice.generator.common.tests/model/pingPongThreadTest/PingPongThreadTest.room')
-rw-r--r--tests/org.eclipse.etrice.generator.common.tests/model/pingPongThreadTest/PingPongThreadTest.room143
1 files changed, 143 insertions, 0 deletions
diff --git a/tests/org.eclipse.etrice.generator.common.tests/model/pingPongThreadTest/PingPongThreadTest.room b/tests/org.eclipse.etrice.generator.common.tests/model/pingPongThreadTest/PingPongThreadTest.room
new file mode 100644
index 000000000..343b9275b
--- /dev/null
+++ b/tests/org.eclipse.etrice.generator.common.tests/model/pingPongThreadTest/PingPongThreadTest.room
@@ -0,0 +1,143 @@
+RoomModel PingPongThreadTest {
+
+ import etrice.api.types.int16
+ import etrice.api.types.int32
+ import etrice.api.timer.PTimer
+ import etrice.api.timer.ATimerService
+
+ LogicalSystem System_PingPong {
+ SubSystemRef main: SubSystem_PingPong
+ }
+
+ SubSystemClass SubSystem_PingPong {
+ ActorRef application: PingPongTop
+ ActorRef services: ATimerService
+ LayerConnection ref application satisfied_by services.timer
+
+ LogicalThread mrPingThread
+ LogicalThread mrPong1Thread
+ LogicalThread mrPong2Thread
+ LogicalThread mrPong3Thread
+ LogicalThread timingThread
+ ActorInstanceMapping application/MrPing -> mrPingThread
+ ActorInstanceMapping application/MrPong1 -> mrPong1Thread
+ ActorInstanceMapping application/MrPong2 -> mrPong2Thread
+ ActorInstanceMapping application/MrPong3 -> mrPong3Thread
+ ActorInstanceMapping services -> timingThread
+ }
+
+ ActorClass PingPongTop {
+ Structure {
+ ActorRef MrPing: MrPingActor
+ ActorRef MrPong1: MrPongActor1
+ ActorRef MrPong2: MrPongActor1
+ ActorRef MrPong3: MrPongActor1
+ Binding MrPing.PingPongPort and MrPong1.PingPongPort
+ Binding MrPing.PingPongPort2 and MrPong2.PingPongPort
+ Binding MrPing.PingPongPort3 and MrPong3.PingPongPort
+ }
+ Behavior {
+ }
+ }
+
+ ActorClass MrPingActor {
+ Interface {
+ conjugated Port PingPongPort: PingPongProtocol
+ conjugated Port PingPongPort2: PingPongProtocol
+ conjugated Port PingPongPort3: PingPongProtocol
+ }
+ Structure {
+ external Port PingPongPort
+ external Port PingPongPort2
+ external Port PingPongPort3
+ SAP timer: PTimer
+ Attribute count: int32
+ Attribute pongCount: int32
+ Attribute caseId: int32
+ Attribute resultlist [23]: int16 = "{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23}"
+ }
+ Behavior {
+ ctor '''caseId = etUnit_openAll("log", "PingPongThreadTest", "org.eclipse.etrice.generator.common.tests.PingPongThreadTest", "PingPongThreadTest_case");'''
+ dtor '''etUnit_closeAll(caseId);'''
+ StateMachine {
+ Transition tr0: initial -> waitForTimer {
+ action '''
+ count = 0;
+ timer.startTimeout(10);
+ EXPECT_ORDER_START(caseId,resultlist,23);
+ EXPECT_ORDER(caseId,"<|MODEL_LOCATION|>", 1);'''
+ }
+ Transition tr1: waitForTimer -> waitForPong {
+ triggers {
+ <timeout: timer>
+ }
+ action '''
+ PingPongPort.ping();
+ PingPongPort2.ping();
+ pongCount = 0;'''
+ }
+ Transition tr3: waitForPong -> cp cp0 {
+ triggers {
+ <pong: PingPongPort2> or <pong: PingPongPort>
+ }
+ action '''pongCount++;'''
+ }
+ Transition tr5: cp cp0 -> cp cp1 {
+ action '''//System.out.println(count);'''
+ }
+ Transition tr6: cp cp0 -> waitForPong {
+ cond '''pongCount < 2'''
+ }
+ Transition tr2: cp cp1 -> test_finished
+ Transition tr4: cp cp1 -> waitForTimer {
+ cond '''count<20'''
+ action '''
+ timer.startTimeout(5);
+ EXPECT_ORDER(caseId,"<|MODEL_LOCATION|>", count+2);
+ count++;'''
+ }
+ ChoicePoint cp0
+ ChoicePoint cp1
+ State waitForTimer
+ State waitForPong
+ State test_finished {
+ entry '''
+ EXPECT_ORDER(caseId,"<|MODEL_LOCATION|>", 22);
+ EXPECT_ORDER_END(caseId,"<|MODEL_LOCATION|>", 23);
+ etUnit_testFinished(caseId);'''
+ }
+ }
+ }
+ }
+
+ ActorClass MrPongActor1 {
+ Interface {
+ Port PingPongPort: PingPongProtocol
+ }
+ Structure {
+ external Port PingPongPort
+ }
+ Behavior {
+ StateMachine {
+ Transition tr0: initial -> waitForPing {
+ }
+ Transition myTrigger: waitForPing -> waitForPing {
+ triggers {
+ <ping: PingPongPort>
+ }
+ action '''PingPongPort.pong();'''
+ }
+ State waitForPing
+ }
+ }
+ }
+
+ ProtocolClass PingPongProtocol {
+ incoming {
+ Message ping()
+ }
+ outgoing {
+ Message pong()
+ }
+ }
+}

Back to the top