| RoomModel PingPongThreadTest { |
| |
| import room.basic.types.int16 |
| import room.basic.types.int32 |
| import room.basic.service.timing.PTimer |
| import room.basic.service.timing.ATimingService |
| |
| LogicalSystem System_PingPong { |
| SubSystemRef main: SubSystem_PingPong |
| } |
| |
| SubSystemClass SubSystem_PingPong { |
| ActorRef application: PingPongTop |
| ActorRef services: ATimingService |
| 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() |
| } |
| } |
| } |