RoomModel PingPongThreadTestReplPort {
import room.basic.service.timing.* from "TimingService.room"
import room.basic.types.* from "Types.room"
SubSystemClass SubSystem_PingPongReplPort {
ActorRef application: PingPongTop
ActorRef services: ATimingService
LayerConnection ref application satisfied_by services.timer
LogicalThread mrPingThread
LogicalThread mrPong1Thread
LogicalThread mrPong2Thread
LogicalThread mrPong3Thread
ActorInstanceMapping application/MrPing -> mrPingThread
ActorInstanceMapping application/MrPong1 -> mrPong1Thread
ActorInstanceMapping application/MrPong2 -> mrPong2Thread
ActorInstanceMapping application/MrPong3 -> mrPong3Thread
}
ActorClass PingPongTop {
Structure {
ActorRef MrPing: MrPingActor
ActorRef MrPong1: MrPongActor1
ActorRef MrPong2: MrPongActor1
ActorRef MrPong3: MrPongActor1
Binding MrPing.PingPongPort and MrPong1.PingPongPort
Binding MrPing.PingPongPort and MrPong2.PingPongPort
Binding MrPing.PingPongPort3 and MrPong3.PingPongPort
}
Behavior { }
}
ActorClass MrPingActor {
Interface {
conjugated Port PingPongPort [*]: PingPongProtocol
conjugated Port PingPongPort3 : PingPongProtocol
}
Structure {
external Port PingPongPort
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(\"tmp\", \"PingPongThreadTestReplPort\", \"org.eclipse.etrice.generator.common.tests.PingPongThreadTestReplPort\", \"PingPongThreadTestReplPort_case\");"
}
dtor {
"etUnit_closeAll(caseId);"
}
StateMachine {
Transition tr0: initial -> waitForTimer {
action {
"count = 0;"
"timer.startTimeout(200);"
"EXPECT_ORDER_START(caseId,resultlist,23);"
"EXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 1);"
}
}
Transition tr1: waitForTimer -> waitForPong {
triggers {
<timeout: timer>
}
action {
"PingPongPort.get(0).ping();"
"PingPongPort.get(1).ping();"
"pongCount = 0;"
}
}
Transition tr3: waitForPong -> cp cp0 {
triggers {
<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(20);"
"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()
}
}
}