Sync with 5.4.1
[deliverable/titan.core.git] / regression_test / templateInt / TtemplateInt.ttcn
CommitLineData
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 ******************************************************************************/
8module TtemplateInt {
3abe9331 9
51fa56b9 10import from ImportedTemplates all;
11
970ed795
EL
12type component templateInt_mycomp {};
13type record templateInt_rec {
14 integer x1,
15 integer x2,
16 integer x3 optional };
3abe9331 17type integer templateInt_subtype (0..1457664);
18
970ed795
EL
19template templateInt_rec templateInt_tSpec :={ //specific values
20 x1:=1,
21 x2:=2,
22 x3:=3 };
23template templateInt_rec templateInt_tList :={ //specific value and value list
24 x1:=1,
25 x2:=(2,3,6),
26 x3:=3 };
27template templateInt_rec templateInt_tComp :={ //specific value and compl. list
28 x1:=1,
29 x2:=complement (2,3,6),
30 x3:=3 };
31template templateInt_rec templateInt_tOmit :={ //omitting values
32 x1:=1,
33 x2:=2,
34 x3:=omit } ;
35template templateInt_rec templateInt_tAny :={ //specific and any value
36 x1:=1,
37 x2:=2,
38 x3:=? } ;
39template templateInt_rec templateInt_tAnyorNone :={ //specific and AnyorNone value
40 x1:=1,
41 x2:=2,
42 x3:=* };
43template templateInt_rec templateInt_tRange1 :={ //specific value and Range
44 x1:=1,
45 x2:=(2 ..4),
46 x3:=3 };
47template templateInt_rec templateInt_tRange2 :={ //specific value and Range
48 x1:=1,
49 x2:=(2 .. 4),
50 x3:=3 };
51template templateInt_rec templateInt_tRange3 :={ //specific value and Range
52 x1:=1,
53 x2:=(2 .. infinity),
54 x3:=3 };
55template templateInt_rec templateInt_tRange4 :={ //specific value and Range
56 x1:=1,
57 x2:=(-infinity .. 4),
58 x3:=3 };
59template templateInt_rec templateInt_tIfpresent :={ //specific value and ifpresent
60 x1:=1,
61 x2:=2,
62 x3:=3 ifpresent };
63
64testcase templateIntSpec() runs on templateInt_mycomp {
65var templateInt_rec x1,x2; //specific value
66x1:={ x1:=1, x2:=2, x3:=3 };
67x2:={ x1:=2, x2:=2, x3:=3 };
68//match
69if (match(x1,templateInt_tSpec)) {setverdict(pass);}
70 else {setverdict(fail);}
71//no match
72if (not(match(x2,templateInt_tSpec))) {setverdict(pass);}
73 else {setverdict(fail);}
74}
75
76testcase templateIntList() runs on templateInt_mycomp {
77var templateInt_rec x1,x2,x3; //value list
78x1:={ x1:=1, x2:=6, x3:=3 };
79x2:={ x1:=1, x2:=7, x3:=3 };
80x3:={ x1:=2, x2:=6, x3:=3 };
81//match
82if (match(x1,templateInt_tList)) {setverdict(pass);}
83 else {setverdict(fail);}
84//no match: out of list
85if (not(match(x2,templateInt_tList))) {setverdict(pass);}
86 else {setverdict(fail);}
87//no match: other field
88if (not(match(x3,templateInt_tList))) {setverdict(pass);}
89 else {setverdict(fail);}
90}
91
92testcase templateIntComp() runs on templateInt_mycomp {
93var templateInt_rec x1,x2,x3; //complemented list
94x1:={ x1:=1, x2:=7, x3:=3 };
95x2:={ x1:=1, x2:=6, x3:=3 };
96x3:={ x1:=2, x2:=7, x3:=3 };
97//match
98if (match(x1,templateInt_tComp)) {setverdict(pass);}
99 else {setverdict(fail);}
100//no match: in the list
101if (not(match(x2,templateInt_tComp))) {setverdict(pass);}
102 else {setverdict(fail);}
103//no match: other field
104if (not(match(x3,templateInt_tComp))) {setverdict(pass);}
105 else {setverdict(fail);}
106}
107
108testcase templateIntOmit() runs on templateInt_mycomp {
109var templateInt_rec x1,x2,x3; //omitting value
110x1:={ x1:=1, x2:=2, x3:=omit };
111x2:={ x1:=1, x2:=2, x3:=3 };
112x3:={ x1:=2, x2:=2, x3:=omit };
113//match
114if (match(x1,templateInt_tOmit)) {setverdict(pass);}
115 else {setverdict(fail);}
116//no match: not omitted
117if (not(match(x2,templateInt_tOmit))) {setverdict(pass);}
118 else {setverdict(fail);}
119//no match: other field
120if (not(match(x3,templateInt_tOmit))) {setverdict(pass);}
121 else {setverdict(fail);}
122}
123
124testcase templateIntAny() runs on templateInt_mycomp {
125var templateInt_rec x1,x2,x3; //any value
126x1:={ x1:=1, x2:=2, x3:=3 };
127x2:={ x1:=1, x2:=2, x3:=omit };
128x3:={ x1:=2, x2:=2, x3:=3 };
129//match
130if (match(x1,templateInt_tAny)) {setverdict(pass);}
131 else {setverdict(fail);}
132//no match: field omitted
133if (not(match(x2,templateInt_tAny))) {setverdict(pass);}
134 else {setverdict(fail);}
135//no match: other field
136if (not(match(x3,templateInt_tAny))) {setverdict(pass);}
137 else {setverdict(fail);}
138}
139
140testcase templateIntAnyorNone() runs on templateInt_mycomp {
141var templateInt_rec x1,x2,x3; //AnyorNone value
142x1:={ x1:=1, x2:=2, x3:=omit };
143x2:={ x1:=1, x2:=2, x3:=3 };
144x3:={ x1:=2, x2:=2, x3:=omit };
145//match: omitted
146if (match(x1,templateInt_tAnyorNone)) {setverdict(pass);}
147 else {setverdict(fail);}
148//match: value
149if (match(x2,templateInt_tAnyorNone)) {setverdict(pass);}
150 else {setverdict(fail);}
151//no match: other field
152if (not(match(x3,templateInt_tAnyorNone))) {setverdict(pass);}
153 else {setverdict(fail);}
154}
155
156testcase templateIntRange1() runs on templateInt_mycomp {
157var templateInt_rec x1,x2,x3; //Range (x .. y)
158x1:={ x1:=1, x2:=2, x3:=3 };
159x2:={ x1:=1, x2:=5, x3:=3 };
160x3:={ x1:=2, x2:=2, x3:=3 };
161//match
162if (match(x1,templateInt_tRange1)) {setverdict(pass);}
163 else {setverdict(fail);}
164//no match: out of range
165if (not(match(x2,templateInt_tRange1))) {setverdict(pass);}
166 else {setverdict(fail);}
167//no match: other field
168if (not(match(x3,templateInt_tRange1))) {setverdict(pass);}
169 else {setverdict(fail);}
170}
171
172testcase templateIntRange2() runs on templateInt_mycomp {
173var templateInt_rec x1,x2,x3; //Range (x to y)
174x1:={ x1:=1, x2:=2, x3:=3 };
175x2:={ x1:=1, x2:=5, x3:=3 };
176x3:={ x1:=2, x2:=2, x3:=3 };
177//match
178if (match(x1,templateInt_tRange2)) {setverdict(pass);}
179 else {setverdict(fail);}
180//no match: out of range
181if (not(match(x2,templateInt_tRange2))) {setverdict(pass);}
182 else {setverdict(fail);}
183//no match: other field
184if (not(match(x3,templateInt_tRange2))) {setverdict(pass);}
185 else {setverdict(fail);}
186}
187
188testcase templateIntRange3() runs on templateInt_mycomp {
189var templateInt_rec x1,x2,x3; //Range, with infinity
190x1:={ x1:=1, x2:=8, x3:=3 };
191x2:={ x1:=1, x2:=-5, x3:=3 };
192x3:={ x1:=2, x2:=2, x3:=3 };
193//match
194if (match(x1,templateInt_tRange3)) {setverdict(pass);}
195 else {setverdict(fail);}
196//no match: out of range
197if (not(match(x2,templateInt_tRange3))) {setverdict(pass);}
198 else {setverdict(fail);}
199//no match: other field
200if (not(match(x3,templateInt_tRange3))) {setverdict(pass);}
201 else {setverdict(fail);}
202}
203
204testcase templateIntRange4() runs on templateInt_mycomp {
205var templateInt_rec x1,x2,x3; //Range with - infinity
206x1:={ x1:=1, x2:=-2, x3:=3 };
207x2:={ x1:=1, x2:=5, x3:=3 };
208x3:={ x1:=2, x2:=2, x3:=3 };
209//match
210if (match(x1,templateInt_tRange4)) {setverdict(pass);}
211 else {setverdict(fail);}
212//no match: out of range
213if (not(match(x2,templateInt_tRange4))) {setverdict(pass);}
214 else {setverdict(fail);}
215//no match: other field
216if (not(match(x3,templateInt_tRange4))) {setverdict(pass);}
217 else {setverdict(fail);}
218}
219
220testcase templateIntIfpresent() runs on templateInt_mycomp {
221var templateInt_rec x1,x2,x3,x4; //ifpresent
222x1:={ x1:=1, x2:=2, x3:=3 };
223x2:={ x1:=1, x2:=2, x3:=omit };
224x3:={ x1:=1, x2:=2, x3:=4 };
225x4:={ x1:=2, x2:=2, x3:=omit };
226//match: present and match
227if (match(x1,templateInt_tIfpresent)) {setverdict(pass);}
228 else {setverdict(fail);}
229//match: not present
230if (match(x2,templateInt_tIfpresent)) {setverdict(pass);}
231 else {setverdict(fail);}
232//no match: present and not match
233if (not(match(x3,templateInt_tIfpresent))) {setverdict(pass);}
234 else {setverdict(fail);}
235//no match: other field
236if (not(match(x4,templateInt_tIfpresent))) {setverdict(pass);}
237 else {setverdict(fail);}
238}
239
240// Types for TR_HJ94652.
241type record TR_HJ94652_myrec {
242 integer myrecint
243}
244
245template TR_HJ94652_myrec TR_HJ94652_mytemp(integer myint) := {
246 myrecint := (myint - 100 .. myint)
247}
248
249type record of TR_HJ94652_myrec TR_HJ94652_mylist
250
251testcase TR_HJ94652() runs on templateInt_mycomp {
252 // INTEGER_template::copy_template() was not implemented correctly for
253 // VALUE_RANGE templates.
254 var template TR_HJ94652_mylist myownlist := { }
255 for (var integer i := 1; i <= 3; i := i + 1) {
256 myownlist[i] := TR_HJ94652_mytemp(i * 100)
257 }
258 for (var integer i := 1; i <= 3; i := i + 1) {
259 var charstring s1 := log2str(myownlist[i])
260 var charstring s2 := log2str(TR_HJ94652_mytemp(i * 100))
261 if (s1 == s2) { setverdict(pass) }
262 else { setverdict(fail) }
263 }
264}
265
3abe9331 266testcase templateIntSubtype() runs on templateInt_mycomp {
267 // this tests the use of inline templates (value ranges)
268 // with subtypes and variables
269 var templateInt_subtype x := 312;
270 var templateInt_subtype lower_limit := 100;
271 var templateInt_subtype upper_limit := 65535;
272 if (not match(x, templateInt_subtype:(0..upper_limit))) { // TR: artf602477
273 setverdict(fail);
274 }
275 if (not match(x, integer:(100..upper_limit))) {
276 setverdict(fail);
277 }
278 if (not match(312, templateInt_subtype:(100..upper_limit))) {
279 setverdict(fail);
280 }
281 if (not match(x, templateInt_subtype:(100..65535))) {
282 setverdict(fail);
283 }
284 if (not match(x, templateInt_subtype:(lower_limit..65535))) {
285 setverdict(fail);
286 }
287 if (not match(x, templateInt_subtype:(lower_limit..upper_limit))) {
288 setverdict(fail);
289 }
290 setverdict(pass);
291}
292
51fa56b9 293// test case: using a parameterized template with no actual parameters (using default values)
294// before its declaration
295template integer tReverse := tPard;
296
297template integer tPard(integer p := 6) := p;
298
299testcase templateIntReverseOrder() runs on templateInt_mycomp {
300 var template integer vtExpected := 6;
301 if (log2str(tReverse) == log2str(vtExpected)) {
302 setverdict(pass);
303 }
304 else {
305 setverdict(fail, "Expected: ", vtExpected, ", got: ", tReverse);
306 }
307}
308
309// same test, but the parameterized template is passed as a parameter to
310// an imported parameterized template
311template integer tReverse2 := tImported(tPard2);
312
313template integer tPard2(integer p := 4) := p;
314
315testcase templateIntReverseOrderImported() runs on templateInt_mycomp {
316 var template integer vtExpected := 4;
317 if (log2str(tReverse2) == log2str(vtExpected)) {
318 setverdict(pass);
319 }
320 else {
321 setverdict(fail, "Expected: ", vtExpected, ", got: ", tReverse2);
322 }
323}
324
325// same as the previous test, but with a non-parameterized template
326template integer tReverse3 := tImported(tNonPard);
327
328template integer tNonPard := (1, 2);
329
330testcase templateIntReverseOrderImported2() runs on templateInt_mycomp {
331 var template integer vtExpected := (1, 2);
332 if (log2str(tReverse3) == log2str(vtExpected)) {
333 setverdict(pass);
334 }
335 else {
336 setverdict(fail, "Expected: ", vtExpected, ", got: ", tReverse3);
337 }
338}
339
970ed795
EL
340control {
341 execute(templateIntSpec());
342 execute(templateIntList());
343 execute(templateIntComp());
344 execute(templateIntOmit());
345 execute(templateIntAny());
346 execute(templateIntAnyorNone());
347 execute(templateIntRange1());
348 execute(templateIntRange2());
349 execute(templateIntRange3());
350 execute(templateIntRange4());
351 execute(templateIntIfpresent());
352 execute(TR_HJ94652());
3abe9331 353 execute(templateIntSubtype());
51fa56b9 354 execute(templateIntReverseOrder());
355 execute(templateIntReverseOrderImported());
356 execute(templateIntReverseOrderImported2());
970ed795
EL
357}
358}
This page took 0.036677 seconds and 5 git commands to generate.