Commit | Line | Data |
---|---|---|
970ed795 | 1 | /****************************************************************************** |
3abe9331 | 2 | * Copyright (c) 2000-2015 Ericsson Telecom AB |
970ed795 EL |
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 | |
7 | ******************************************************************************/ | |
8 | module TnonMandatory { | |
9 | type port PCOType message | |
10 | { | |
11 | inout charstring; | |
12 | } | |
13 | ||
14 | type component MTCType | |
15 | { | |
16 | port PCOType comp_port1,comp_port2; | |
17 | const integer comp_const_i:= 0; | |
18 | var integer comp_var_i := 0; | |
19 | timer comp_t := 100.0; | |
20 | } | |
21 | ||
22 | template integer templ_int := 0; | |
23 | template integer templ_int2 := 1; | |
24 | ||
25 | type record rec_type | |
26 | { | |
27 | integer a, | |
28 | integer b | |
29 | } | |
30 | ||
31 | template rec_type t1(in integer x:=1, in integer y := 1):= | |
32 | { | |
33 | a := x, | |
34 | b := y | |
35 | } | |
36 | ||
37 | type set set_type | |
38 | { | |
39 | integer a, | |
40 | integer b | |
41 | } | |
42 | ||
43 | type function func_type(in boolean is_set := false, in boolean b := false) return verdicttype; | |
44 | const func_type func_const := refers(boolean_function); | |
45 | ||
46 | function simple_integers(in integer i1, in integer i2 := 0, in integer i3 := 0) return integer | |
47 | { | |
48 | return i1 + i2 + i3; | |
49 | } | |
50 | ||
51 | function simple_integer_template(in integer i1, template integer i2:=templ_int) return integer | |
52 | { | |
53 | return i1 + valueof(i2); | |
54 | } | |
55 | ||
56 | function missing_integers(in integer i1:=0, in integer i2, inout integer i3) return integer | |
57 | { | |
58 | return i1 + i2 + i3; | |
59 | } | |
60 | ||
61 | function mixed_integers(in integer i1:=0, in integer i2, in integer i3:=0) return integer | |
62 | { | |
63 | return i1 + i2 + i3; | |
64 | } | |
65 | ||
66 | function lotsof_mixed_integers(in integer i1:=0, in integer i2:=0, in integer i3, in integer i4 := 0, in integer i5:=0, in integer i6:=comp_const_i, inout integer i7:= comp_var_i) runs on MTCType return integer | |
67 | { | |
68 | return i1+i2+i3+i4+i5+i6+i7; | |
69 | } | |
70 | ||
71 | function boolean_function(in boolean is_set := false, in boolean b := false) return verdicttype | |
72 | { | |
73 | if(is_set and b == true) {return pass;} | |
74 | else if(not(is_set) and b == false) {return pass;} | |
75 | else {return fail;} | |
76 | } | |
77 | ||
78 | function float_function(in boolean is_set := false, in float f:=0.0) return verdicttype | |
79 | { | |
80 | if(is_set and f == 1.0) {return pass;} | |
81 | else if(not(is_set) and f == 0.0) {return pass;} | |
82 | else {return fail;} | |
83 | } | |
84 | ||
85 | function charstring_function(in boolean is_set := false, in charstring c:="") return verdicttype | |
86 | { | |
87 | if(is_set and c == "Hello") {return pass;} | |
88 | else if(not(is_set) and c == "") {return pass;} | |
89 | else {return fail;} | |
90 | } | |
91 | ||
92 | function octetstring_function( in boolean is_set := false, in octetstring o:=''O) return verdicttype | |
93 | { | |
94 | if(is_set and o == '11'O) {return pass;} | |
95 | else if(not(is_set) and o == ''O) {return pass;} | |
96 | else {return fail;} | |
97 | } | |
98 | ||
99 | function bitstring_function( in boolean is_set := false, in bitstring b:=''B) return verdicttype | |
100 | { | |
101 | if(is_set and b == '11'B) {return pass;} | |
102 | else if(not(is_set) and b == ''B) {return pass;} | |
103 | else {return fail;} | |
104 | } | |
105 | ||
106 | function record_function(in boolean is_set := false, in rec_type r:={0,0}) return verdicttype | |
107 | { | |
108 | if(is_set and r == {1,1}) {return pass;} | |
109 | else if(not(is_set) and r == {0,0}) {return pass;} | |
110 | else {return fail;} | |
111 | } | |
112 | ||
113 | function set_function(in boolean is_set := false, in set_type r:={a:=0,b:=0}) return verdicttype | |
114 | { | |
115 | if(is_set and r == {a:=1,b:=1}) {return pass;} | |
116 | else if(not(is_set) and r == {a:=0,b:=0}) {return pass;} | |
117 | else {return fail;} | |
118 | } | |
119 | ||
120 | function timer_function(in boolean is_set := false, inout timer t := comp_t) runs on MTCType return verdicttype | |
121 | { | |
122 | if(is_set and t.running) {return pass;} | |
123 | else if(not(is_set) and not(t.running)) { return pass;} | |
124 | else {return fail;} | |
125 | } | |
126 | ||
127 | function port_function(in boolean is_set := false, inout PCOType p := comp_port1) runs on MTCType return verdicttype | |
128 | { | |
129 | timer t := 1.0; | |
130 | t.start; | |
131 | alt{ | |
132 | []p.receive(charstring:"default"){ | |
133 | if(is_set){return fail;} | |
134 | else {return pass;} | |
135 | } | |
136 | []p.receive(charstring:"actual"){ | |
137 | if(is_set){return pass;} | |
138 | else{return fail;} | |
139 | } | |
140 | []t.timeout{return fail;} | |
141 | } | |
142 | t.stop; | |
143 | return inconc; | |
144 | } | |
145 | ||
146 | altstep simple_altstep(in boolean is_set := false) runs on MTCType | |
147 | { | |
148 | []comp_port1.receive("Hello") | |
149 | { | |
150 | if(is_set){setverdict(pass);} | |
151 | else{setverdict(fail);} | |
152 | } | |
153 | []comp_port1.receive | |
154 | { | |
155 | if(is_set){setverdict(fail);} | |
156 | else{setverdict(pass);} | |
157 | } | |
158 | } | |
159 | ||
160 | testcase simple_integer_test() runs on MTCType | |
161 | { | |
162 | var integer temporal; | |
163 | if(simple_integers(1,2,3) == 6) {setverdict(pass);} | |
164 | else {setverdict(fail);} | |
165 | if(simple_integers(1,2,-) == 3) {setverdict(pass);} | |
166 | else {setverdict(fail);} | |
167 | if(simple_integers(1,2) == 3) {setverdict(pass);} | |
168 | else {setverdict(fail);} | |
169 | if(simple_integer_template(1,templ_int) == 1) {setverdict(pass);} | |
170 | else {setverdict(fail);} | |
171 | if(simple_integer_template(1,templ_int2) == 2) {setverdict(pass);} | |
172 | else {setverdict(fail);} | |
173 | if(simple_integer_template(1,-) == 1) {setverdict(pass);} | |
174 | else {setverdict(fail);} | |
175 | if(simple_integer_template(1) == 1) {setverdict(pass);} | |
176 | else {setverdict(fail);} | |
177 | temporal := 2; | |
178 | if(missing_integers(-,1,temporal) == 3) {setverdict(pass);} | |
179 | else {setverdict(fail);} | |
180 | if(mixed_integers(1,2,3) == 6) {setverdict(pass);} | |
181 | else {setverdict(fail);} | |
182 | if(mixed_integers(1,2,-) == 3) {setverdict(pass);} | |
183 | else {setverdict(fail);} | |
184 | if(mixed_integers(1,2) == 3) {setverdict(pass);} | |
185 | else {setverdict(fail);} | |
186 | if(mixed_integers(-,2,3) == 5) {setverdict(pass);} | |
187 | else {setverdict(fail);} | |
188 | if(mixed_integers(-,2,-) == 2) {setverdict(pass);} | |
189 | else {setverdict(fail);} | |
190 | if(mixed_integers(-,2) == 2) {setverdict(pass);} | |
191 | else {setverdict(fail);} | |
192 | if(lotsof_mixed_integers(1,2,3,4,5,6) == 21) {setverdict(pass);} | |
193 | else {setverdict(fail);} | |
194 | if(lotsof_mixed_integers(-,-,3,4,5,6) == 18) {setverdict(pass);} | |
195 | else {setverdict(fail);} | |
196 | temporal := 7; | |
197 | if(lotsof_mixed_integers(-,-,3,4,5,6,temporal) == 25) {setverdict(pass);} | |
198 | else {setverdict(fail);} | |
199 | if(lotsof_mixed_integers(1,2,3) == 6) {setverdict(pass);} | |
200 | else {setverdict(fail);} | |
201 | if(lotsof_mixed_integers(-,-,3) == 3) {setverdict(pass);} | |
202 | else {setverdict(fail);} | |
203 | } | |
204 | ||
205 | testcase simple_boolean_test() runs on MTCType | |
206 | { | |
207 | setverdict(boolean_function(true,true)); | |
208 | setverdict(boolean_function(false,-)); | |
209 | setverdict(boolean_function(false)); | |
210 | setverdict(boolean_function(-,-)); | |
211 | setverdict(boolean_function()); | |
212 | } | |
213 | ||
214 | testcase simple_float_test() runs on MTCType | |
215 | { | |
216 | setverdict(float_function(true,1.0)); | |
217 | setverdict(float_function(false,-)); | |
218 | setverdict(float_function(false)); | |
219 | setverdict(float_function(-,-)); | |
220 | setverdict(float_function()); | |
221 | } | |
222 | ||
223 | testcase simple_charstring_test() runs on MTCType | |
224 | { | |
225 | setverdict(charstring_function(true,"Hello")); | |
226 | setverdict(charstring_function(false,-)); | |
227 | setverdict(charstring_function(false)); | |
228 | setverdict(charstring_function(-,-)); | |
229 | setverdict(charstring_function()); | |
230 | } | |
231 | ||
232 | testcase simple_octetstring_test() runs on MTCType | |
233 | { | |
234 | setverdict(octetstring_function(true,'11'O)); | |
235 | setverdict(octetstring_function(false,-)); | |
236 | setverdict(octetstring_function(false)); | |
237 | setverdict(octetstring_function(-,-)); | |
238 | setverdict(octetstring_function()); | |
239 | } | |
240 | ||
241 | testcase simple_bitstring_test() runs on MTCType | |
242 | { | |
243 | setverdict(bitstring_function(true,'11'B)); | |
244 | setverdict(bitstring_function(false,-)); | |
245 | setverdict(bitstring_function(false)); | |
246 | setverdict(bitstring_function(-,-)); | |
247 | setverdict(bitstring_function()); | |
248 | } | |
249 | ||
250 | testcase simple_record_test() runs on MTCType | |
251 | { | |
252 | setverdict(record_function(true,{1,1})); | |
253 | setverdict(record_function(false,-)); | |
254 | setverdict(record_function(false)); | |
255 | setverdict(record_function(-,-)); | |
256 | setverdict(record_function()); | |
257 | } | |
258 | ||
259 | testcase simple_set_test() runs on MTCType | |
260 | { | |
261 | setverdict(set_function(true,{a:=1,b:=1})); | |
262 | setverdict(set_function(false,-)); | |
263 | setverdict(set_function(false)); | |
264 | setverdict(set_function(-,-)); | |
265 | setverdict(set_function()); | |
266 | } | |
267 | ||
268 | testcase simple_timer_test() runs on MTCType | |
269 | { | |
270 | timer temp := 100.0; | |
271 | temp.start; | |
272 | setverdict(timer_function(true,temp)); | |
273 | temp.stop; | |
274 | comp_t.start; | |
275 | setverdict(timer_function(true,comp_t)); | |
276 | comp_t.stop; | |
277 | setverdict(timer_function(false,-)); | |
278 | setverdict(timer_function(false)); | |
279 | setverdict(timer_function(-,-)); | |
280 | setverdict(timer_function()); | |
281 | } | |
282 | ||
283 | testcase simple_port_test() runs on MTCType | |
284 | { | |
285 | connect(self:comp_port1,self:comp_port1); | |
286 | connect(self:comp_port2,self:comp_port2); | |
287 | comp_port2.send("actual"); | |
288 | setverdict(port_function(true,comp_port2)); | |
289 | comp_port1.send("default"); | |
290 | setverdict(port_function(false,-)); | |
291 | comp_port1.send("default"); | |
292 | setverdict(port_function(false)); | |
293 | comp_port1.send("default"); | |
294 | setverdict(port_function(-,-)); | |
295 | comp_port1.send("default"); | |
296 | setverdict(port_function()); | |
297 | disconnect(self:comp_port1,self:comp_port1); | |
298 | disconnect(self:comp_port2,self:comp_port2); | |
299 | } | |
300 | ||
301 | testcase altstep_test() runs on MTCType | |
302 | { | |
303 | connect(self:comp_port1,self:comp_port1); | |
304 | timer T := 1.0; | |
305 | comp_port1.send("Hello"); | |
306 | T.start; | |
307 | alt{ | |
308 | []simple_altstep(true){T.stop;} | |
309 | []T.timeout {setverdict(inconc);} | |
310 | } | |
311 | comp_port1.send("rossz uzenet"); | |
312 | T.start; | |
313 | alt{ | |
314 | []simple_altstep(){T.stop;} | |
315 | []T.timeout {setverdict(inconc);} | |
316 | } | |
317 | activate(simple_altstep(true)); | |
318 | comp_port1.send("Hello"); | |
319 | T.start; | |
320 | alt{ | |
321 | []T.timeout {setverdict(inconc);} | |
322 | } | |
323 | T.stop; | |
324 | deactivate; | |
325 | activate(simple_altstep()); | |
326 | comp_port1.send("rossz uzenet"); | |
327 | T.start; | |
328 | alt{ | |
329 | []simple_altstep(false){T.stop;} | |
330 | []T.timeout {setverdict(inconc);} | |
331 | } | |
332 | deactivate; | |
333 | disconnect(self:comp_port1,self:comp_port1); | |
334 | } | |
335 | ||
336 | testcase testcase_test(in boolean is_set := false, in integer x := 1, | |
337 | in integer y := 1) runs on MTCType | |
338 | { | |
339 | if(not(is_set) and x == 1 and y == 1){setverdict(pass);} | |
340 | else if(is_set and x == 2 and y == 2){setverdict(pass);} | |
341 | else {setverdict(fail);} | |
342 | } | |
343 | ||
344 | testcase template_test() runs on MTCType | |
345 | { | |
346 | var rec_type given := {2,2}; | |
347 | var rec_type base := {1,1}; | |
348 | if(match(base,t1())){setverdict(pass);} | |
349 | else{setverdict(fail);} | |
350 | if(match(base,t1(-,-))){setverdict(pass);} | |
351 | else{setverdict(fail);} | |
352 | if(match(base,t1(1))){setverdict(pass);} | |
353 | else{setverdict(fail);} | |
354 | if(match(base,t1(-,1))){setverdict(pass);} | |
355 | else{setverdict(fail);} | |
356 | if(match(given,t1(2,2))){setverdict(pass);} | |
357 | else{setverdict(fail);} | |
358 | } | |
359 | ||
360 | testcase functionreference_test() runs on MTCType | |
361 | { | |
362 | var func_type func_var := refers(boolean_function); | |
363 | setverdict(func_var.apply(true,true)); | |
364 | setverdict(func_var.apply(false,-)); | |
365 | setverdict(func_var.apply(false)); | |
366 | setverdict(func_var.apply(-,-)); | |
367 | setverdict(func_var.apply()); | |
368 | setverdict(func_const.apply(true,true)); | |
369 | setverdict(func_const.apply(false,-)); | |
370 | setverdict(func_const.apply(false)); | |
371 | setverdict(func_const.apply(-,-)); | |
372 | setverdict(func_const.apply()); | |
373 | } | |
374 | ||
375 | control{ | |
376 | execute(simple_integer_test()); | |
377 | execute(simple_boolean_test()); | |
378 | execute(simple_float_test()); | |
379 | execute(simple_charstring_test()); | |
380 | execute(simple_octetstring_test()); | |
381 | execute(simple_bitstring_test()); | |
382 | execute(simple_record_test()); | |
383 | execute(simple_set_test()); | |
384 | execute(simple_timer_test()); | |
385 | execute(simple_port_test()); | |
386 | execute(altstep_test()); | |
387 | execute(testcase_test(false,-,-)); | |
388 | execute(testcase_test(false,-,1)); | |
389 | execute(testcase_test(false)); | |
390 | execute(testcase_test()); | |
391 | execute(testcase_test(true,2,2)); | |
392 | execute(template_test()); | |
393 | execute(functionreference_test()); | |
394 | } | |
395 | } |