fixed self-ref check to no longer display errors for omit values (bug 498430)
[deliverable/titan.core.git] / regression_test / boolOper / TboolOper.ttcn
CommitLineData
970ed795 1/******************************************************************************
d44e3c4f 2 * Copyright (c) 2000-2016 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
d44e3c4f 7 *
8 * Contributors:
9 * Balasko, Jeno
10 * Baranyi, Botond
11 * Kovacs, Ferenc
12 * Raduly, Csaba
13 * Szabados, Kristof
14 * Szabo, Janos Zoltan – initial implementation
15 *
970ed795
EL
16 ******************************************************************************/
17module TboolOper
18{const boolean TboolOper_const1:=true;
19type component boolOper_comptype { };
20
21testcase boolAssign() runs on boolOper_comptype
22{ var boolean x1:=true;
23 var boolean x4:=x1;
24 var boolean x2,x3;
25 x2:=false;
26 x3:=x2;
27 if (x1) {setverdict(pass);} //at declaration, value
28 else {setverdict(fail);}
29 if (x4) {setverdict(pass);} //at declaration, variable
30 else {setverdict(fail);}
31 if (not(x2)) {setverdict(pass);} //later, value
32 else {setverdict(fail);}
33 if (not(x3)) {setverdict(pass);} //later, variable
34 else {setverdict(fail);}
35}
36
37testcase boolConst() runs on boolOper_comptype {
38const boolean TboolOper_const3:=false;
39if (TboolOper_const1) {setverdict(pass);} //definition part
40 else {setverdict(fail);}
41//if (TboolOper_const2==2) {setverdict(pass);} //control part
42// else {setverdict(fail);}
43if (not(TboolOper_const3)) {setverdict(pass);} //testcase
44 else {setverdict(fail);}
45}
46
47testcase boolCompEq() runs on boolOper_comptype
48{ var boolean x1,x2,x3;
49 x1:=true;
50 x2:=true;
51 x3:=false;
52 if (x1==x2) {setverdict(pass);} //variable_variable
53 else {setverdict(fail);}
54 if (not(x3==x2)) {setverdict(pass);} //variable_variable
55 else {setverdict(fail);}
56 if (x1==true) {setverdict(pass);} //variable_value
57 else {setverdict(fail);}
58 if (not(x1==false)) {setverdict(pass);} //variable_value
59 else {setverdict(fail);}
60 if (true==x1) {setverdict(pass);} //value_variable
61 else {setverdict(fail);}
62 if (not(false==x1)) {setverdict(pass);} //value_variable
63 else {setverdict(fail);}
64 if (true==true) {setverdict(pass);} //value_value
65 else {setverdict(fail);}
66 if (not(true==false)) {setverdict(pass);} //value_value
67 else {setverdict(fail);}
68}
69
70testcase boolCompNotEq() runs on boolOper_comptype
71{ var boolean x1,x2,x3;
72 x1:=true;
73 x2:=false;
74 x3:=true;
75 if (x1!=x2) {setverdict(pass);} //variable_variable
76 else {setverdict(fail);}
77 if (not(x1!=x3)) {setverdict(pass);} //variable_variable
78 else {setverdict(fail);}
79 if (x1!=false) {setverdict(pass);} //variable_value
80 else {setverdict(fail);}
81 if (not(x1!=true)) {setverdict(pass);} //variable_value
82 else {setverdict(fail);}
83 if (true!=x2) {setverdict(pass);} //value_variable
84 else {setverdict(fail);}
85 if (not(false!=x2)) {setverdict(pass);} //value_variable
86 else {setverdict(fail);}
87 if (true!=false) {setverdict(pass);} //value_value
88 else {setverdict(fail);}
89 if (not(false!=false)) {setverdict(pass);} //value_value
90 else {setverdict(fail);}
91}
92
93testcase boolNot() runs on boolOper_comptype
94{ var boolean x1,x2,x3,x4,x5,x6;
95 x1:=true;
96 x2:=false;
97 x3:=not(x1);
98 x4:=not(x2);
99 x5:=not(true);
100 x6:=not(false);
101 if (not(x3)) {setverdict(pass);} //variable
102 else {setverdict(fail);}
103 if (x4) {setverdict(pass);} //variable
104 else {setverdict(fail);}
105 if (not(x5)) {setverdict(pass);} //value
106 else {setverdict(fail);}
107 if (x6) {setverdict(pass);} //value
108 else {setverdict(fail);}
109}
110
111testcase boolAnd() runs on boolOper_comptype
112{ var boolean x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18;
113 x1:=true;
114 x2:=false;
115 x3:=x1 and x1;
116 x4:=x1 and x2;
117 x5:=x2 and x1;
118 x6:=x2 and x2;
119 x7:=x1 and true;
120 x8:=x1 and false;
121 x9:=x2 and true;
122 x10:=x2 and false;
123 x11:=true and x1;
124 x12:=true and x2;
125 x13:=false and x1;
126 x14:=false and x2;
127 x15:=true and true;
128 x16:=true and false;
129 x17:=false and true;
130 x18:=false and false;
131 if (x3) {setverdict(pass);} //variable_variable
132 else {setverdict(fail);}
133 if (not(x4)) {setverdict(pass);} //variable_variable
134 else {setverdict(fail);}
135 if (not(x5)) {setverdict(pass);} //variable_variable
136 else {setverdict(fail);}
137 if (not(x6)) {setverdict(pass);} //variable_variable
138 else {setverdict(fail);}
139 if (x7) {setverdict(pass);} //variable_value
140 else {setverdict(fail);}
141 if (not(x8)) {setverdict(pass);} //variable_value
142 else {setverdict(fail);}
143 if (not(x9)) {setverdict(pass);} //variable_value
144 else {setverdict(fail);}
145 if (not(x10)) {setverdict(pass);} //variable_value
146 else {setverdict(fail);}
147 if (x11) {setverdict(pass);} //value_variable
148 else {setverdict(fail);}
149 if (not(x12)) {setverdict(pass);} //value_variable
150 else {setverdict(fail);}
151 if (not(x13)) {setverdict(pass);} //value_variable
152 else {setverdict(fail);}
153 if (not(x14)) {setverdict(pass);} //value_variable
154 else {setverdict(fail);}
155 if (x15) {setverdict(pass);} //value_value
156 else {setverdict(fail);}
157 if (not(x16)) {setverdict(pass);} //value_value
158 else {setverdict(fail);}
159 if (not(x17)) {setverdict(pass);} //value_value
160 else {setverdict(fail);}
161 if (not(x18)) {setverdict(pass);} //value_value
162 else {setverdict(fail);}
163}
164
165testcase boolOr() runs on boolOper_comptype
166{ var boolean x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18;
167 x1:=true;
168 x2:=false;
169 x3:=x1 or x1;
170 x4:=x1 or x2;
171 x5:=x2 or x1;
172 x6:=x2 or x2;
173 x7:=x1 or true;
174 x8:=x1 or false;
175 x9:=x2 or true;
176 x10:=x2 or false;
177 x11:=true or x1;
178 x12:=true or x2;
179 x13:=false or x1;
180 x14:=false or x2;
181 x15:=true or true;
182 x16:=true or false;
183 x17:=false or true;
184 x18:=false or false;
185 if (x3) {setverdict(pass);} //variable_variable
186 else {setverdict(fail);}
187 if (x4) {setverdict(pass);} //variable_variable
188 else {setverdict(fail);}
189 if (x5) {setverdict(pass);} //variable_variable
190 else {setverdict(fail);}
191 if (not(x6)) {setverdict(pass);} //variable_variable
192 else {setverdict(fail);}
193 if (x7) {setverdict(pass);} //variable_value
194 else {setverdict(fail);}
195 if (x8) {setverdict(pass);} //variable_value
196 else {setverdict(fail);}
197 if (x9) {setverdict(pass);} //variable_value
198 else {setverdict(fail);}
199 if (not(x10)) {setverdict(pass);} //variable_value
200 else {setverdict(fail);}
201 if (x11) {setverdict(pass);} //value_variable
202 else {setverdict(fail);}
203 if (x12) {setverdict(pass);} //value_variable
204 else {setverdict(fail);}
205 if (x13) {setverdict(pass);} //value_variable
206 else {setverdict(fail);}
207 if (not(x14)) {setverdict(pass);} //value_variable
208 else {setverdict(fail);}
209 if (x15) {setverdict(pass);} //value_value
210 else {setverdict(fail);}
211 if (x16) {setverdict(pass);} //value_value
212 else {setverdict(fail);}
213 if (x17) {setverdict(pass);} //value_value
214 else {setverdict(fail);}
215 if (not(x18)) {setverdict(pass);} //value_value
216 else {setverdict(fail);}
217}
218
219testcase boolXor() runs on boolOper_comptype
220{ var boolean x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18;
221 x1:=true;
222 x2:=false;
223 x3:=x1 xor x1;
224 x4:=x1 xor x2;
225 x5:=x2 xor x1;
226 x6:=x2 xor x2;
227 x7:=x1 xor true;
228 x8:=x1 xor false;
229 x9:=x2 xor true;
230 x10:=x2 xor false;
231 x11:=true xor x1;
232 x12:=true xor x2;
233 x13:=false xor x1;
234 x14:=false xor x2;
235 x15:=true xor true;
236 x16:=true xor false;
237 x17:=false xor true;
238 x18:=false xor false;
239 if (not(x3)) {setverdict(pass);} //variable_variable
240 else {setverdict(fail);}
241 if (x4) {setverdict(pass);} //variable_variable
242 else {setverdict(fail);}
243 if (x5) {setverdict(pass);} //variable_variable
244 else {setverdict(fail);}
245 if (not(x6)) {setverdict(pass);} //variable_variable
246 else {setverdict(fail);}
247 if (not(x7)) {setverdict(pass);} //variable_value
248 else {setverdict(fail);}
249 if (x8) {setverdict(pass);} //variable_value
250 else {setverdict(fail);}
251 if (x9) {setverdict(pass);} //variable_value
252 else {setverdict(fail);}
253 if (not(x10)) {setverdict(pass);} //variable_value
254 else {setverdict(fail);}
255 if (not(x11)) {setverdict(pass);} //value_variable
256 else {setverdict(fail);}
257 if (x12) {setverdict(pass);} //value_variable
258 else {setverdict(fail);}
259 if (x13) {setverdict(pass);} //value_variable
260 else {setverdict(fail);}
261 if (not(x14)) {setverdict(pass);} //value_variable
262 else {setverdict(fail);}
263 if (not(x15)) {setverdict(pass);} //value_value
264 else {setverdict(fail);}
265 if (x16) {setverdict(pass);} //value_value
266 else {setverdict(fail);}
267 if (x17) {setverdict(pass);} //value_value
268 else {setverdict(fail);}
269 if (not(x18)) {setverdict(pass);} //value_value
270 else {setverdict(fail);}
271}
272
273type boolean myb1
274type boolean myb2 (true)
275type boolean myb3 (false)
276// FATAL_ERROR() with R8B: `type boolean myb3 (true, valueof(t_myb1))'.
277type boolean myb4 (c_myb1, not c_myb1 and c_myb1)
278type myb3 myb5
279type boolean myb6 (myb2, myb3)
280
281const boolean c_myb1 := true
282const myb6 c_myb2 := c_myb1
283
284template boolean t_myb1 := true
285template myb6 t_myb2 := t_myb1
286
287function f_b1(in boolean p1) return boolean { return p1 }
288
289function f_b2() return myb4 {
290 var template boolean vt_myb1 := t_myb1
291 if (valueof(t_myb1) and valueof(vt_myb1)) { return true }
292 else { return false }
293}
294
295function f_b3() return myb4 {
296 var myb4 v_myb1 := false
297 var template myb4 vt_myb1 := c_myb1
298 if (not v_myb1 and valueof(vt_myb1) == true) { return true }
299 else { return false }
300}
301
302testcase boolSubtypes() runs on boolOper_comptype {
303 if (f_b1(c_myb1) == f_b2()) { setverdict(pass) }
304 else { setverdict(fail) }
305}
306
307testcase boolIsvalue() runs on boolOper_comptype{
308 var template boolean vt0;
309 var template boolean vt1 := ( true, true, true );
310
311 if ( isvalue(vt0) ) { setverdict(fail); } else { setverdict(pass); };
312 if ( isvalue(vt1) ) { setverdict(fail); } else { setverdict(pass); };
313}
314
a38c6d4c 315type union TestUnion {
316 integer t,
317 boolean b
318}
319
320type record TestRecord {
321 integer t,
322 boolean b optional
323}
324
325// for TR fix HT60781
326testcase boolShortCircuit() runs on boolOper_comptype {
327 // create a union variable, make sure the boolean field is not chosen
328 var TestUnion myUnion := { t := 1 };
329
330 // reference the boolean field in the 2nd part of a condition using 'and' or 'or'
331 // only the first part of the condition should be evaluated, since
332 // evaluating the 2nd part would produce a DTE (because the field isn't chosen)
333 if (ischosen(myUnion.b) and myUnion.b) {
334 setverdict(fail, "Error in 'if' condition, field 'b' is not supposed to be chosen");
335 }
336 while (ischosen(myUnion.b) and myUnion.b) {
337 setverdict(fail, "Error in 'while' condition, field 'b' is not supposed to be chosen");
338 }
339 var integer i;
340 for (i := 0; ischosen(myUnion.b) and myUnion.b and i < 5; i := i + 1) {
341 setverdict(fail, "Error in 'for' condition, field 'b' is not supposed to be chosen");
342 }
343 var boolean res := not ischosen(myUnion.b) or myUnion.b;
344 if (not res) {
345 setverdict(fail, "Error in boolean assignment, field 'b' is not supposed to be chosen");
346 }
347
348 // create a record variable, make sure the boolean field is omitted
349 var TestRecord myRec := { t := 1, b := omit };
350
351 // reference the boolean field in the 2nd part of a condition, same as with the union field
352 // (referencing the boolean field would cause a DTE again, because it is omitted)
353 if (ispresent(myRec.b) and myRec.b) {
354 setverdict(fail, "Error in 'if' condition, field 'b' is not supposed to be present");
355 }
356 while (ispresent(myRec.b) and myRec.b) {
357 setverdict(fail, "Error in 'if' condition, field 'b' is not supposed to be present");
358 }
359 for (i := 0; ispresent(myRec.b) and myRec.b and i < 5; i := i + 1) {
360 setverdict(fail, "Error in 'for' condition, field 'b' is not supposed to be present");
361 }
362 res := not ispresent(myRec.b) or myRec.b;
363 if (not res) {
364 setverdict(fail, "Error in boolean assignment, field 'b' is not supposed to be present");
365 }
366 setverdict(pass);
367}
368
69c0215b
BB
369type record MyRecord {
370 integer a optional
371}
372
373// comparing an optional record field to 'omit' in a boolean variable assignment (bug 498430)
374testcase boolCompEqOmit() runs on boolOper_comptype {
375 var MyRecord myRecord := { a := omit };
376 var boolean b := myRecord.a == omit;
377 if (b == true) { setverdict(pass); }
378 else { setverdict(fail); }
379}
380
970ed795
EL
381control {
382 const boolean cl_1:=true;
383 var boolean vl_1;
384
385 execute(boolAssign());
386 execute(boolConst());
387 execute(boolCompEq());
388 execute(boolCompNotEq());
389 execute(boolNot());
390 execute(boolAnd());
391 execute(boolOr());
392 execute(boolXor());
393 execute(boolSubtypes());
394 execute(boolIsvalue());
a38c6d4c 395 execute(boolShortCircuit());
69c0215b 396 execute(boolCompEqOmit());
970ed795
EL
397}
398
399}
This page took 0.045066 seconds and 5 git commands to generate.