1 /******************************************************************************
2 * Copyright (c) 2000-2016 Ericsson Telecom AB
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
15 * Szabo, Janos Zoltan – initial implementation
17 ******************************************************************************/
20 type port configOper_port1 message
21 { inout integer } with { extension "internal" };
23 // A "black hole" port.
24 type port configOper_port2 message {
28 type component configOper_comp1 {
29 port configOper_port1 Port1;
33 type component configOper_comp2 {
34 port configOper_port1 Port2[5];
38 type component configOper_comp4 {
39 port configOper_port2 Port4;
42 type component configOper_comp5 {
43 port configOper_port1 P, Q, R;
47 function configOper_behav0() runs on configOper_comp1 {
48 timer T:=1.0; // doing nothing, alt is needed for "stop"
52 { [] T.timeout {T.start} }
56 function configOper_behav1() runs on configOper_comp1 {
58 Port1.receive(integer:?) -> value xx1;
63 function configOper_behav2() runs on configOper_comp1 {
65 Port1.receive(integer:?) -> value xx1;
70 function configOper_behav3() runs on configOper_comp1 {
72 //if receives anything -> stops
73 Port1.receive(integer:?);
76 { [] Port1.receive(integer:?) { action("configOper_behav3 received the integer after ", TT.read, " seconds");};
77 [] TT.timeout { action("configOper_behav3 timed out"); stop; } };
80 testcase configOperRunning1() runs on configOper_comp1 {
81 var configOper_comp1 comp:=configOper_comp1.create;
82 comp.start(configOper_behav0());
83 if (comp.running) {setverdict(pass)}
84 else {setverdict(fail)};
88 testcase configOperRunning2() runs on configOper_comp1 {
89 var configOper_comp1 comp:=configOper_comp1.create;
90 comp.start(configOper_behav0());
92 if (comp.running) {setverdict(fail)}
93 else {setverdict(pass)};
96 testcase configOperConnectMtc() runs on configOper_comp1 {
97 var configOper_comp1 comp:=configOper_comp1.create;
98 connect(mtc:Port1,comp:Port1);
99 comp.start(configOper_behav1());
102 Port1.receive(integer:?) -> value xx1;
103 if (xx1==6) {setverdict(pass)}
104 else {setverdict(fail)};
108 testcase configOperConnectSelf() runs on configOper_comp1 {
109 var configOper_comp1 comp:=configOper_comp1.create;
110 connect(self:Port1,comp:Port1);
111 comp.start(configOper_behav1());
114 Port1.receive(integer:?) -> value xx1;
115 if (xx1==6) {setverdict(pass)}
116 else {setverdict(fail)};
120 testcase configOperDisconnect() runs on configOper_comp1 {
121 var configOper_comp1 comp1:=configOper_comp1.create;
122 var configOper_comp1 comp2:=configOper_comp1.create;
123 comp1.start(configOper_behav1());
124 comp2.start(configOper_behav2());
125 connect(self:Port1,comp1:Port1);
126 disconnect(self:Port1,comp1:Port1);
127 connect(self:Port1,comp2:Port1);
130 Port1.receive(integer:?) -> value xx1;
131 if (xx1==7) {setverdict(pass)}
132 else {setverdict(fail)};
137 testcase configOperDone() runs on configOper_comp1 {
138 var configOper_comp1 comp:=configOper_comp1.create;
140 connect(self:Port1,comp:Port1);
141 comp.start(configOper_behav3());
146 [] Port1.receive(integer:?) -> value xx1 {setverdict(fail)}
147 [] comp.done {setverdict(pass)}
148 [] T1.timeout {setverdict(fail)}
152 testcase configOperArray() runs on configOper_comp2 {
153 var configOper_comp1 comp[5];
156 for (i:=0; i<5; i:=i+1)
157 { comp[i]:=configOper_comp1.create;
158 connect(self:Port2[i],comp[i]:Port1);
159 comp[i].start(configOper_behav1());
161 Port2[i].receive(integer:?) -> value xx2;
162 if (xx2==i+6) {setverdict(pass)}
163 else {setverdict(fail)};
165 for (i:=5; i<5; i:=i+1) {comp[i].stop};
168 testcase configOperRunningAny() runs on configOper_comp2 {
169 var configOper_comp1 comp[5];
172 for (i:=0; i<5; i:=i+1)
173 { comp[i]:=configOper_comp1.create;
174 comp[i].start(configOper_behav0());
176 for (i:=0; i<4; i:=i+1)
178 if (any component.running) {setverdict(pass)}
179 else {setverdict(fail)};
182 if (any component.running) {setverdict(fail)}
183 else {setverdict(pass)};
186 testcase configOperRunningAll() runs on configOper_comp2 {
187 var configOper_comp1 comp[5];
190 for (i:=0; i<5; i:=i+1)
191 { comp[i]:=configOper_comp1.create;
192 comp[i].start(configOper_behav0());
194 if (all component.running) {setverdict(pass)}
195 else {setverdict(fail)};
196 for (i:=0; i<5; i:=i+1)
198 if (all component.running) {setverdict(pass)}
199 else {setverdict(fail)};
203 testcase configOperDoneAny() runs on configOper_comp2 {
204 var configOper_comp1 comp[5];
208 for (i:=0; i<5; i:=i+1)
209 { comp[i]:=configOper_comp1.create;
210 connect(self:Port2[i],comp[i]:Port1);
211 comp[i].start(configOper_behav3());
213 for (i:=0; i<5; i:=i+1) {
221 [] any component.done {setverdict(pass)}
222 [] T1.timeout {setverdict(fail)}
227 testcase configOperDoneAny2() runs on configOper_comp2 {
228 var configOper_comp1 ptc;
232 [] any component.done { setverdict(fail); }
233 [] T1.timeout { setverdict(pass); }
235 ptc := configOper_comp1.create;
238 [] any component.done { setverdict(fail); }
239 [] T1.timeout { setverdict(pass); }
244 [] any component.done { setverdict(pass); }
245 [] T1.timeout { setverdict(fail); }
249 testcase configOperDoneAny3() runs on configOper_comp2 {
250 var configOper_comp1 ptc := configOper_comp1.create;
255 [] any component.done { setverdict(pass); }
256 [] T1.timeout { setverdict(fail); }
260 testcase configOperDoneAll() runs on configOper_comp2 {
261 var configOper_comp1 comp[5];
266 for (i:=0; i<5; i:=i+1)
268 comp[i]:=configOper_comp1.create;
269 connect(self:Port2[i],comp[i]:Port1);
270 comp[i].start(configOper_behav3());
272 for (i:=0; i<5; i:=i+1) {
278 [] Port2[2].receive(integer:?) {setverdict(fail)}
279 [] all component.done {setverdict(pass)}
280 [] T1.timeout {setverdict(fail)}
284 testcase configOperStopAll() runs on configOper_comp2 {
285 var configOper_comp1 comp[5];
289 for (i:=0; i<5; i:=i+1)
291 comp[i]:=configOper_comp1.create;
293 connect(self:Port2[i],comp[i]:Port1);
294 comp[i].start(configOper_behav3());
298 if (any component.running) {setverdict(fail)}
299 else {setverdict(pass)};
302 testcase configOperAutostop1() runs on configOper_comp2 {
303 var configOper_comp1 comp[5];
307 for (i:=0; i<5; i:=i+1)
308 { comp[i]:=configOper_comp1.create;
309 connect(self:Port2[i],comp[i]:Port1);
310 comp[i].start(configOper_behav1());
317 testcase configOperAutostop2() runs on configOper_comp2 {
318 var configOper_comp1 comp[5];
322 for (i:=0; i<5; i:=i+1)
323 { comp[i]:=configOper_comp1.create;
324 connect(self:Port2[i],comp[i]:Port1);
325 comp[i].start(configOper_behav1());
327 for (i:=0; i<5; i:=i+1)
328 { Port2[i].send(xx2);
329 Port2[i].receive(integer:?) -> value xx2;
330 if (xx2==i+6) {setverdict(pass)}
331 else {setverdict(fail)};
333 for (i:=5; i<5; i:=i+1) {comp[i].done};
336 type component configOper_comp3 {
337 port configOper_port1 Port3[5];
341 function configOper_behav4() runs on configOper_comp1 {
342 Port1.receive(integer:?) -> value xx1;
346 function configOper_behav5() runs on configOper_comp1 {
350 function configOper_behav6() runs on configOper_comp1 {
355 function configOper_behav7(float par) runs on configOper_comp1 {
361 testcase configOperRunningAlive_alive() runs on configOper_comp1 {
362 var configOper_comp1 comp:=configOper_comp1.create alive;
363 comp.start(configOper_behav0());
364 if (comp.running and comp.alive)
371 testcase configOperRunningAliveKill_alive() runs on configOper_comp1 {
372 var configOper_comp1 comp:=configOper_comp1.create alive;
373 comp.start(configOper_behav0());
375 if (comp.running) {setverdict(fail)}
376 else {setverdict(pass)};
377 if (comp.alive) {setverdict(pass)}
378 else {setverdict(fail)};
381 if (comp.alive) {setverdict(fail)}
382 else {setverdict(pass)};
385 testcase configOperRunningAliveKillMixed_alive() runs on configOper_comp1 {
386 var configOper_comp1 comp :=configOper_comp1.create alive;
387 var configOper_comp1 comp1:=configOper_comp1.create alive;
388 var configOper_comp1 comp2:=configOper_comp1.create alive;
389 comp.start(configOper_behav0());
390 comp1.start(configOper_behav0());
391 comp2.start(configOper_behav0());
392 if (all component.running) {setverdict(pass)}
393 else {setverdict(fail)};
398 if (any component.running) {setverdict(fail)}
399 else {setverdict(pass)};
400 if (all component.alive) {setverdict(pass)}
401 else {setverdict(fail)};
404 if (all component.alive) {setverdict(fail)}
405 else {setverdict(pass)};
406 if (any component.alive) {setverdict(pass)}
407 else {setverdict(fail)};
410 if (any component.alive) {setverdict(fail)}
411 else {setverdict(pass)};
414 testcase configOperRunningAliveKillKilledMixed_alive() runs on configOper_comp1 {
415 var configOper_comp1 comp :=configOper_comp1.create ("comp alive") alive;
416 var configOper_comp1 comp1:=configOper_comp1.create ("comp1 alive") alive;
417 var configOper_comp1 comp2:=configOper_comp1.create ("comp2 alive") alive;
418 comp.start(configOper_behav0());
419 comp1.start(configOper_behav0());
420 comp2.start(configOper_behav0());
421 if (all component.running) {setverdict(pass)}
422 else {setverdict(fail)};
427 [] all component.killed {
428 if (xx1==3) {setverdict(pass);}
432 if (xx1!=2) {setverdict(fail);}
434 [] any component.killed {
436 if (xx1!=1) {setverdict(fail);}
440 if (xx1!=0) {setverdict(fail);}
445 if (any component.alive) {setverdict(fail)}
446 else {setverdict(pass)};
449 testcase configOperConnectMtc_alive() runs on configOper_comp1 {
450 var configOper_comp1 comp:=configOper_comp1.create alive;
451 connect(mtc:Port1,comp:Port1);
452 comp.start(configOper_behav4());
457 comp.start(configOper_behav6());
458 Port1.receive(integer:?) -> value xx1;
459 if (xx1==8) {setverdict(pass)}
460 else {setverdict(fail)};
463 comp.start(configOper_behav5());
466 comp.start(configOper_behav6());
467 Port1.receive(integer:?) -> value xx1;
468 if (xx1==210) {setverdict(pass)}
469 else {setverdict(fail)};
473 testcase configOperConnectSelf_alive() runs on configOper_comp1 {
474 var configOper_comp1 comp:=configOper_comp1.create alive;
475 connect(self:Port1,comp:Port1);
476 comp.start(configOper_behav4());
481 comp.start(configOper_behav6());
482 Port1.receive(integer:?) -> value xx1;
483 if (xx1==8) {setverdict(pass)}
484 else {setverdict(fail)};
487 comp.start(configOper_behav5());
490 comp.start(configOper_behav6());
491 Port1.receive(integer:?) -> value xx1;
492 if (xx1==210) {setverdict(pass)}
493 else {setverdict(fail)};
497 testcase configOperDisconnect_alive() runs on configOper_comp1 {
498 var configOper_comp1 comp1:=configOper_comp1.create alive;
499 var configOper_comp1 comp2:=configOper_comp1.create alive;
500 comp1.start(configOper_behav1());
501 comp2.start(configOper_behav2());
502 connect(self:Port1,comp1:Port1);
503 connect(self:Port1,comp2:Port1);
504 disconnect(self:Port1,comp1:Port1);
507 Port1.receive(integer:?) -> value xx1;
508 if (xx1==7) {setverdict(pass)}
509 else {setverdict(fail)};
514 testcase configOperArray_alive() runs on configOper_comp3 {
515 var configOper_comp1 comp[5];
518 for (i:=0; i<5; i:=i+1)
520 comp[i]:=configOper_comp1.create alive;
521 connect(self:Port3[i],comp[i]:Port1);
522 comp[i].start(configOper_behav4());
525 // while (comp[i].running) {};
526 comp[i].start(configOper_behav5());
528 comp[i].start(configOper_behav6());
529 Port3[i].receive(integer:?) -> value xx1;
530 if (xx1==i*203+208) {setverdict(pass)}
531 else {setverdict(fail)};
533 for (i:=5; i<5; i:=i+1) {comp[i].kill};
536 testcase configOperRunningAny_alive() runs on configOper_comp2 {
537 var configOper_comp1 comp[5];
540 for (i:=0; i<5; i:=i+1)
542 comp[i]:=configOper_comp1.create alive;
543 comp[i].start(configOper_behav0());
545 for (i:=0; i<4; i:=i+1)
548 if (any component.running) {setverdict(pass)}
549 else {setverdict(fail)};
552 if (any component.running) {setverdict(fail)}
553 else {setverdict(pass)};
556 testcase configOperRunningAll_alive() runs on configOper_comp2 {
557 var configOper_comp1 comp[5];
560 for (i:=0; i<5; i:=i+1)
562 comp[i]:=configOper_comp1.create alive;
564 for (i:=0; i<5; i:=i+1)
566 comp[i].start(configOper_behav7(int2float(i + 1)));
568 if (all component.running) {setverdict(pass)}
569 else {setverdict(fail)};
572 if (all component.running) {setverdict(fail)}
573 else {setverdict(pass)};
575 comp[0].start(configOper_behav7(1.0));
576 for (i:=0; i<5; i:=i+1)
579 if (all component.running) {setverdict(pass)}
580 else {setverdict(fail)};
582 for (i:=0; i<5; i:=i+1)
585 if (all component.running) {setverdict(pass)}
586 else {setverdict(fail)};
590 testcase configOperAliveAny_alive() runs on configOper_comp2 {
591 var configOper_comp1 comp[5];
594 for (i:=0; i<5; i:=i+1)
596 comp[i]:=configOper_comp1.create alive;
597 comp[i].start(configOper_behav0());
599 for (i:=0; i<4; i:=i+1)
602 if (any component.alive) {setverdict(pass)}
603 else {setverdict(fail)};
606 if (any component.alive) {setverdict(fail)}
607 else {setverdict(pass)};
610 testcase configOperAliveAll_alive() runs on configOper_comp2 {
611 var configOper_comp1 comp[5];
614 for (i:=0; i<5; i:=i+1)
616 comp[i]:=configOper_comp1.create alive;
617 comp[i].start(configOper_behav0());
619 if (all component.alive) {setverdict(pass)}
620 else {setverdict(fail)};
621 for (i:=0; i<5; i:=i+1)
624 if (all component.alive) {setverdict(fail)}
625 else {setverdict(pass)};
629 testcase configOperDone_alive() runs on configOper_comp1 {
630 var configOper_comp1 comp:=configOper_comp1.create alive;
632 connect(self:Port1,comp:Port1);
633 comp.start(configOper_behav3());
638 [] Port1.receive(integer:?) -> value xx1 {setverdict(fail, "received a value")}
639 [] comp.done {setverdict(pass)}
640 [] T1.timeout {setverdict(fail, "configOperDone_alive timed out after", T1.read, " seconds")}
644 testcase configOperDone2_alive() runs on configOper_comp1 {
645 var configOper_comp1 comp:=configOper_comp1.create alive;
647 comp.start(configOper_behav0());
650 [] comp.done {setverdict(pass)}
651 [else] {setverdict(fail)}
655 [] comp.done {setverdict(pass)}
656 [else] {setverdict(fail)}
660 testcase configOperDoneAny_alive() runs on configOper_comp2 {
661 var configOper_comp1 comp[5];
665 for (i:=0; i<5; i:=i+1)
667 comp[i]:=configOper_comp1.create alive;
668 connect(self:Port2[i],comp[i]:Port1);
669 comp[i].start(configOper_behav3());
671 for (i:=0; i<5; i:=i+1) {
677 [] Port2[i].receive(integer:?) {setverdict(fail)}
678 [] any component.done {setverdict(pass)}
679 [] T1.timeout {setverdict(fail)}
680 [] comp[i].done {setverdict(fail)}
685 testcase configOperDoneAny2_alive() runs on configOper_comp1 {
686 var configOper_comp1 comp:=configOper_comp1.create alive;
687 var configOper_comp1 comp1:=configOper_comp1.create alive;
689 comp.start(configOper_behav0());
690 comp1.start(configOper_behav0());
692 [] any component.done {setverdict(fail)}
693 [else] {setverdict(pass)}
697 [] all component.done {setverdict(fail)}
698 [] any component.done {setverdict(pass)}
699 [else] {setverdict(fail)}
703 [] all component.done {setverdict(fail)}
704 [] any component.done {setverdict(pass)}
705 [else] {setverdict(fail)}
709 [] any component.done {setverdict(pass)}
710 [else] {setverdict(fail)}
714 testcase configOperDoneAll_alive() runs on configOper_comp2 {
715 var configOper_comp1 comp[5];
720 for (i:=0; i<5; i:=i+1)
723 comp[i]:=configOper_comp1.create alive;
724 connect(self:Port2[i],comp[i]:Port1);
725 comp[i].start(configOper_behav3());
727 for (i:=0; i<5; i:=i+1) {
733 [] Port2[2].receive(integer:?) {setverdict(fail)}
734 [] all component.done {setverdict(pass)}
735 [] T1.timeout {setverdict(fail)}
739 testcase configOperDoneAll2_alive() runs on configOper_comp2 {
740 var configOper_comp1 comp[5];
742 for (i:=0; i<5; i:=i+1)
744 comp[i]:=configOper_comp1.create alive;
745 comp[i].start(configOper_behav0());
747 for (i:=0; i<4; i:=i+1) {
752 [] all component.done {setverdict(pass)}
753 [else] {setverdict(fail)}
757 testcase configOperKilled_alive() runs on configOper_comp1 {
758 var configOper_comp1 comp:=configOper_comp1.create alive;
760 comp.start(configOper_behav3());
763 [] comp.killed {setverdict(pass)}
764 [else] {setverdict(fail)}
768 testcase configOperKilledAny_alive() runs on configOper_comp2 {
769 var configOper_comp1 comp[5];
773 for (i:=0; i<5; i:=i+1)
775 comp[i]:=configOper_comp1.create alive;
776 connect(self:Port2[i],comp[i]:Port1);
777 comp[i].start(configOper_behav3());
779 for (i:=0; i<4; i:=i+1) {
782 [] all component.done {setverdict(fail)}
783 [] any component.killed {setverdict(pass)}
784 [else] {setverdict(fail)}
790 testcase configOperKilledAll_alive() runs on configOper_comp2 {
792 var configOper_comp1 comp[5];
794 for (i:=0; i<5; i:=i+1)
796 comp[i]:=configOper_comp1.create alive;
797 connect(self:Port2[i],comp[i]:Port1);
798 comp[i].start(configOper_behav3());
800 for (i:=0; i<4; i:=i+1) {
803 [] all component.done {setverdict(fail)}
804 [] any component.killed {setverdict(pass)}
805 [else] {setverdict(fail)}
810 [] all component.killed {setverdict(pass)}
811 [else] {setverdict(fail)}
815 testcase configOperStopAll_alive() runs on configOper_comp2 {
816 var configOper_comp1 comp[5];
818 for (i:=0; i<5; i:=i+1)
820 comp[i]:=configOper_comp1.create alive;
821 connect(self:Port2[i],comp[i]:Port1);
822 comp[i].start(configOper_behav3());
826 if (any component.running) {setverdict(fail)}
827 else {setverdict(pass)};
831 testcase configOperKillAll_alive() runs on configOper_comp2 {
832 var configOper_comp1 comp[5];
834 for (i:=0; i<5; i:=i+1)
836 comp[i]:=configOper_comp1.create alive;
837 connect(self:Port2[i],comp[i]:Port1);
838 comp[i].start(configOper_behav3());
842 if (any component.alive) {setverdict(fail)}
843 else {setverdict(pass)};
846 testcase configOperAutoStopAndKill_alive() runs on configOper_comp2 {
847 var configOper_comp1 comp[5];
851 for (i:=0; i<5; i:=i+1)
853 comp[i]:=configOper_comp1.create alive;
854 connect(self:Port2[i],comp[i]:Port1);
855 comp[i].start(configOper_behav1());
863 testcase configOperAutoStopAndKill2_alive() runs on configOper_comp2 {
864 var configOper_comp1 comp[5];
868 for (i:=0; i<5; i:=i+1)
870 comp[i]:=configOper_comp1.create alive;
871 connect(self:Port2[i],comp[i]:Port1);
872 comp[i].start(configOper_behav1());
874 for (i:=0; i<5; i:=i+1)
877 Port2[i].receive(integer:?) -> value xx2;
878 if (xx2==i+6) {setverdict(pass)}
879 else {setverdict(fail)};
883 ///////////////////////////////////////////////////////////////////////
884 ///////////////////// Interleave Statement ////////////////////////////
885 ///////////////////////////////////////////////////////////////////////
886 signature MySig() exception (integer);
887 signature MySig1(inout float par) exception (integer);
888 type port interleave_port_M message { inout integer, float } with { extension "internal" };
889 type port interleave_port_P procedure { inout MySig, MySig1 } with { extension "internal" };
890 template MySig MySigTemplate := {}
891 template MySig1 MySigTemplate1 := {55.1}
893 type component interleave_comp {
894 port interleave_port_M Port1;
895 port interleave_port_P Port2;
896 port interleave_port_P Port3;
902 function interleave_behav1(float par) runs on interleave_comp {
907 function interleave_behav2(integer par1, float par2) runs on interleave_comp {
910 if (par1==0) { Port1.send(par2); }
911 else { Port1.send(par1); }
914 function interleave_behav3(float par1) runs on interleave_comp {
915 T.start(par1); T.timeout;
916 Port3.call(MySigTemplate1,nowait);
917 T.start(par1); T.timeout;
918 Port3.call(MySigTemplate,nowait);
919 var integer path := 0;
921 [] Port3.getcall(MySigTemplate1) {
922 Port3.reply(MySigTemplate);
923 if (path==1) {setverdict(pass)}
924 else {setverdict(fail)};
927 [] Port3.getcall(MySigTemplate) {
928 Port3.reply(MySigTemplate1);
929 if (path==0) {setverdict(pass)}
930 else {setverdict(fail)};
934 if (path==2) {setverdict(pass)}
935 else {setverdict(fail)};
938 function interleave_behav4(float par1) runs on interleave_comp {
939 T.start(par1); T.timeout;
940 Port3.call(MySigTemplate1,nowait);
941 T.start(par1); T.timeout;
942 Port3.call(MySigTemplate,nowait);
943 var integer path := 0;
945 [] Port3.getcall(MySigTemplate1) {
946 Port3.raise(MySig1,integer:15);
947 //interleave_verdict(1);
948 if (path==1) {setverdict(pass)}
949 else {setverdict(fail)};
952 [] Port3.getcall(MySigTemplate) {
953 Port3.raise(MySig,integer:5);
954 //interleave_verdict(0);
955 if (path==0) {setverdict(pass)}
956 else {setverdict(fail)};
960 if (path==2) {setverdict(pass)}
961 else {setverdict(fail)};
964 function interleave_behav5() runs on configOper_comp5
967 // interleave example identical to TTCN-3 Basic Course
969 [] P.receive(1) { Q.receive(2); R.receive(3); log("1st branch ready") }
970 [] Q.receive(4) { P.send(-4); R.receive(5); log("2nd branch ready") }
971 [] R.receive(6) { P.receive(7); Q.send(-7); Q.receive(8); log("3rd branch ready") }
972 [] T.timeout { R.send(0); P.receive(9); log("timeout branch ready") }
977 testcase InterleaveStatem1() runs on interleave_comp {
978 var integer loop := 0;
979 var interleave_comp comp :=interleave_comp.create ("comp alive") alive;
980 var interleave_comp comp1:=interleave_comp.create ("comp1 alive") alive;
981 var interleave_comp comp2:=interleave_comp.create ("comp2 alive") alive;
982 comp.start(interleave_behav1(1.2));
983 comp1.start(interleave_behav1(3.2));
984 comp2.start(interleave_behav1(2.2));
985 if (all component.running) {setverdict(pass)}
986 else {setverdict(fail, "not all components running")};
987 var integer counter := 0;
991 [] any component.killed {
993 if (loop==0 and counter==3) {setverdict(pass)}
994 else if (loop==1 and counter==7) {setverdict(pass)}
995 else {setverdict(fail, "reached line" & int2str(__LINE__) & " loop: " & int2str(loop) & " counter: " & int2str(counter))};
996 action("Any Killed: ", counter);
997 counter := counter+1;
1000 if (loop==0 and counter==6) {
1002 comp1:=interleave_comp.create ("comp1 alive") alive;
1003 comp1.start(interleave_behav1(2.2));
1005 else if (loop==1 and counter==13) {setverdict(pass)}
1006 else {setverdict(fail, "reached line" & int2str(__LINE__) & " loop: " & int2str(loop) & " counter: " & int2str(counter))};
1007 action("Timeout: ", counter);
1008 counter := counter+1;
1012 if (loop==0 and counter==1) {setverdict(pass)}
1013 else if (loop==1 and counter==9) {setverdict(pass)}
1014 else {setverdict(fail, "reached line" & int2str(__LINE__) & " loop: " & int2str(loop) & " counter: " & int2str(counter))};
1015 action("Done: ", counter);
1016 counter := counter+1;
1018 [] all component.done {
1020 if (loop==0 and counter==2) {setverdict(pass)}
1021 else if (loop==1 and counter==10) {setverdict(pass)}
1022 else {setverdict(fail, "reached line" & int2str(__LINE__) & " loop: " & int2str(loop) & " counter: " & int2str(counter))};
1023 action("All Done: ", counter);
1024 counter := counter+1;
1026 [] all component.killed {
1027 if (loop==0 and counter==5) {setverdict(pass)}
1028 else if (loop==1 and counter==11) {setverdict(pass)}
1029 else {setverdict(fail, "reached line" & int2str(__LINE__) & " loop: " & int2str(loop) & " counter: " & int2str(counter))};
1030 action("All Killed: ", counter);
1031 counter := counter+1;
1035 if (loop==0 and counter==4) {setverdict(pass)}
1036 else if (loop==1 and counter==8) {setverdict(pass)}
1037 else {setverdict(fail, "reached line" & int2str(__LINE__) & " loop: " & int2str(loop) & " counter: " & int2str(counter))};
1038 action("Killed: ", counter);
1039 counter := counter+1;
1041 [] any component.done {
1042 if (loop==0 and counter==0) {setverdict(pass)}
1043 else if (loop==1 and counter==12) {setverdict(pass)}
1044 else {setverdict(fail, "reached line" & int2str(__LINE__) & " loop: " & int2str(loop) & " counter: " & int2str(counter))};
1045 action("Any Done: ", counter);
1046 counter := counter+1;
1051 if (counter==14) {setverdict(pass)}
1052 else {setverdict(fail, "counter is: ", counter)};
1055 testcase InterleaveStatem2() runs on interleave_comp {
1056 var interleave_comp comp :=interleave_comp.create ("comp alive") alive;
1057 var interleave_comp comp1:=interleave_comp.create ("comp1 alive") alive;
1058 connect(mtc:Port1,comp:Port1);
1059 connect(mtc:Port1,comp1:Port1);
1060 comp.start(interleave_behav2(34, 0.1));
1061 comp1.start(interleave_behav2(0, 0.1));
1064 [] Port1.receive (integer:?) -> value xx1 {
1067 [] Port1.trigger (float:?) -> value xx2 {
1070 [] any port.trigger {
1071 log("Any Port Trigger");
1077 comp.start(interleave_behav2(0, 0.1));
1078 comp1.start(interleave_behav2(50, 0.1));
1080 [] any port.receive {
1081 log("Any Port Receive");
1087 testcase InterleaveStatem3() runs on interleave_comp {
1088 var interleave_comp comp :=interleave_comp.create ("comp alive") alive;
1089 var interleave_comp comp1:=interleave_comp.create ("comp1 alive") alive;
1090 connect(self:Port2,comp:Port3);
1091 comp.start(interleave_behav3(0.1));
1093 var integer path1 := 0;// The execution path of comp1
1094 var integer path2 := 0;// the execution path of comp
1096 [] Port2.getcall(MySigTemplate1) {
1097 if (path2==0) {setverdict(pass)}
1098 else {setverdict(fail)};
1101 [] Port2.getreply(MySigTemplate1) {
1102 if (path2==2) {setverdict(pass)}
1103 else {setverdict(fail)};
1105 Port2.call(MySigTemplate1,nowait);
1108 if (path1==1) {setverdict(pass)}
1109 else {setverdict(fail)};
1113 if (path1==0) {setverdict(pass)}
1114 else {setverdict(fail)};
1116 comp1.start(interleave_behav1(2.8));
1118 [] any port.getcall {
1119 if (path2==1) {setverdict(pass)}
1120 else {setverdict(fail)};
1122 Port2.call(MySigTemplate,nowait);
1124 [] any port.getreply {
1125 if (path2==3) {setverdict(pass)}
1126 else {setverdict(fail)};
1130 if (path1==2 and path2 == 4) {setverdict(pass)}
1131 else {setverdict(fail)};
1134 testcase InterleaveStatem4() runs on interleave_comp {
1135 var interleave_comp comp :=interleave_comp.create ("comp alive") alive;
1136 connect(self:Port2,comp:Port3);
1137 comp.start(interleave_behav4(0.1));
1139 var integer path1 := 0;//The timeout executionpath
1140 var integer path2 := 0;//The real executionpath
1142 [] Port2.catch(MySig, integer:5) {
1143 Port2.call(MySigTemplate1,nowait);
1144 if (path2==2) {setverdict(pass)}
1145 else {setverdict(fail)};
1148 []Port2.check(getcall(MySigTemplate1)) {
1150 if (path2==0) {setverdict(pass)}
1151 else {setverdict(fail)};
1159 Port2.call(MySigTemplate,nowait);
1160 if (path2==1) {setverdict(pass)}
1161 else {setverdict(fail)};
1165 if (path2==3) {setverdict(pass)}
1166 else {setverdict(fail)};
1170 if (path1==1 and path2==4) {setverdict(pass)}
1171 else {setverdict(fail)};
1174 testcase InterleaveStatem5() runs on configOper_comp5
1176 var configOper_comp5 ptc := configOper_comp5.create;
1177 connect(mtc:P, ptc:P);
1178 connect(mtc:Q, ptc:Q);
1179 connect(mtc:R, ptc:R);
1180 ptc.start(interleave_behav5())
1182 // exercise interleave statement
1183 P.send(1); // start 1st branch
1184 Q.send(4); // start 2nd branch
1185 R.send(6); // start 3rd branch
1186 P.send(7); // continue 3rd branch
1187 Q.send(2); // switch back and continue with 1st branch
1188 R.send(5); // switch over, continue with 2nd branch, terminate 2nd branch
1189 T.start; // enforce timeout event
1190 T.timeout; // begin with 4th branch
1191 Q.send(8); // switch over to 3rd branch, terminate 3rd branch
1192 P.send(9); // switch over and terminate to timeout branch
1193 R.send(3); // switch over and terminate 1st branch
1194 // all branches are fully terminated, interleve should finish
1196 // wait for ptc to terminate normally
1200 // check if f_interleave() terminated properly
1203 [] ptc.done { T.stop; setverdict(pass) }
1204 [] T.timeout { ptc.kill; setverdict(fail) } // verdict is fail for hanging ptc
1208 testcase configOperConnectDisconnect() runs on configOper_comp1 {
1209 var configOper_comp1 comp:=configOper_comp1.create;
1210 connect(mtc:Port1,comp:Port1);
1211 disconnect(mtc:Port1,comp:Port1);
1212 connect(comp:Port1, mtc:Port1);
1213 disconnect(mtc:Port1,comp:Port1);
1214 connect(mtc:Port1,comp:Port1);
1215 disconnect(comp:Port1, mtc:Port1);
1216 connect(comp:Port1, mtc:Port1);
1217 disconnect(comp:Port1, mtc:Port1);
1222 testcase configOperMapUnmap() runs on configOper_comp4
1223 system configOper_comp4 {
1224 var configOper_comp4 comp:=configOper_comp4.create;
1225 map(mtc:Port4,system:Port4);
1226 unmap(mtc:Port4,system:Port4);
1227 map(system:Port4, mtc:Port4);
1228 unmap(mtc:Port4,system:Port4);
1229 map(mtc:Port4,system:Port4);
1230 unmap(system:Port4, mtc:Port4);
1231 map(system:Port4, mtc:Port4);
1232 unmap(system:Port4, mtc:Port4);
1234 map(comp:Port4,system:Port4);
1235 unmap(comp:Port4,system:Port4);
1236 map(system:Port4, comp:Port4);
1237 unmap(comp:Port4,system:Port4);
1238 map(comp:Port4,system:Port4);
1239 unmap(system:Port4, comp:Port4);
1240 map(system:Port4, comp:Port4);
1241 unmap(system:Port4, comp:Port4);
1247 execute(configOperRunning1());
1248 execute(configOperRunning2());
1249 execute(configOperConnectMtc());
1250 execute(configOperConnectSelf());
1251 execute(configOperDisconnect());
1252 execute(configOperDone());
1253 execute(configOperArray());
1254 execute(configOperRunningAny());
1255 execute(configOperRunningAll());
1256 execute(configOperDoneAny());
1257 execute(configOperDoneAny2());
1258 execute(configOperDoneAny3());
1259 execute(configOperDoneAll());
1260 execute(configOperStopAll());
1261 execute(configOperAutostop1());
1262 execute(configOperAutostop2());
1264 execute(configOperRunningAlive_alive());
1265 execute(configOperRunningAliveKill_alive());
1266 execute(configOperRunningAliveKillMixed_alive());
1267 execute(configOperRunningAliveKillKilledMixed_alive());
1268 execute(configOperConnectMtc_alive());
1269 execute(configOperConnectSelf_alive());
1270 execute(configOperDisconnect_alive());
1271 execute(configOperArray_alive());
1272 execute(configOperRunningAny_alive());
1273 execute(configOperRunningAll_alive());
1274 execute(configOperAliveAny_alive());
1275 execute(configOperAliveAll_alive());
1276 execute(configOperDone_alive());
1277 execute(configOperDone2_alive());
1278 execute(configOperDoneAny_alive());
1279 execute(configOperDoneAny2_alive());
1280 execute(configOperDoneAll_alive());
1281 execute(configOperDoneAll2_alive());
1282 execute(configOperKilled_alive());
1283 execute(configOperKilledAny_alive());
1284 execute(configOperKilledAll_alive());
1285 execute(configOperStopAll_alive());
1286 execute(configOperKillAll_alive());
1287 execute(configOperAutoStopAndKill_alive());
1288 execute(configOperAutoStopAndKill2_alive());
1290 execute(InterleaveStatem1());
1291 execute(InterleaveStatem2());
1292 execute(InterleaveStatem3());
1293 execute(InterleaveStatem4());
1294 execute(InterleaveStatem5());
1295 execute(configOperConnectDisconnect());
1296 execute(configOperMapUnmap());