Sync with 5.1.0
[deliverable/titan.core.git] / regression_test / templateBitstr / TtemplateBitstr.ttcn
CommitLineData
970ed795
EL
1/******************************************************************************
2 * Copyright (c) 2000-2014 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
7 ******************************************************************************/
8module TtemplateBitstr {
9type component templateBitstr_mycomp {};
10type record templateBitstr_rec {
11 bitstring x1,
12 bitstring x2,
13 bitstring x3 optional };
14template templateBitstr_rec templateBitstr_tSpec :={ //specific values
15 x1:='001'B,
16 x2:='010'B,
17 x3:='100'B };
18template templateBitstr_rec templateBitstr_tList :={ //specific value and value list
19 x1:='001'B,
20 x2:=('010'B,'011'B,'1100'B),
21 x3:='100'B };
22template templateBitstr_rec templateBitstr_tComp :={ //specific value and compl. list
23 x1:='001'B,
24 x2:=complement ('11'B,'00'B,'1000'B),
25 x3:='100'B };
26template templateBitstr_rec templateBitstr_tOmit :={ //omitting values
27 x1:='001'B,
28 x2:='010'B,
29 x3:=omit } ;
30template templateBitstr_rec templateBitstr_tAny :={ //specific and any value
31 x1:='001'B,
32 x2:='010'B,
33 x3:=? } ;
34template templateBitstr_rec templateBitstr_tAnyorNone :={ //specific and AnyorNone value
35 x1:='001'B,
36 x2:='010'B,
37 x3:=* };
38template templateBitstr_rec templateBitstr_tLength1 :={ //specific value and fix length
39 x1:='001'B,
40 x2:='010'B,
41 x3:=* length(3) };
42template templateBitstr_rec templateBitstr_tLength2 :={ //specific value and length (range)
43 x1:='001'B,
44 x2:='010'B,
45 x3:=? length(2..4) };
46template templateBitstr_rec templateBitstr_tLength3 :={ //specific value and length (range, infinity)
47 x1:='001'B,
48 x2:='010'B,
49 x3:=? length(2..infinity) };
50template templateBitstr_rec templateBitstr_tIfpresent :={ //specific value and ifpresent
51 x1:='001'B,
52 x2:='010'B,
53 x3:='100'B ifpresent };
54template templateBitstr_rec templateBitstr_tLengthIfp :={ //specific value and fix length and ifpresent
55 x1:='001'B,
56 x2:='010'B,
57 x3:= ? length(3) ifpresent};
58template templateBitstr_rec templateBitstr_tAnyEl :={ //specific value and any element inside value
59 x1:='001'B,
60 x2:='010'B,
61 x3:='10?'B } ;
62template templateBitstr_rec templateBitstr_tAnyorNoneEl :={ //specific value and Any number of elements or none inside value
63 x1:='001'B,
64 x2:='010'B,
65 x3:='10*'B };
66
67 template bitstring t_param1(templateBitstr_rec par) := substr(par.x1, 0, 1); // parameterised template
68
69testcase templateBitstrSpec() runs on templateBitstr_mycomp {
70var templateBitstr_rec x1,x2; //specific value
71x1:={ x1:='001'B, x2:='010'B, x3:='100'B };
72x2:={ x1:='00'B, x2:='010'B, x3:='100'B };
73//match
74if (match(x1,templateBitstr_tSpec)) {setverdict(pass);}
75 else {setverdict(fail);}
76//no match
77if (not(match(x2,templateBitstr_tSpec))) {setverdict(pass);}
78 else {setverdict(fail);}
79}
80
81testcase templateBitstrList() runs on templateBitstr_mycomp {
82var templateBitstr_rec x1,x2,x3; //value list
83x1:={ x1:='001'B, x2:='010'B, x3:='100'B };
84x2:={ x1:='001'B, x2:='00'B, x3:='100'B };
85x3:={ x1:='1'B, x2:='010'B, x3:='100'B };
86//match
87if (match(x1,templateBitstr_tList)) {setverdict(pass);}
88 else {setverdict(fail);}
89//no match: out of list
90if (not(match(x2,templateBitstr_tList))) {setverdict(pass);}
91 else {setverdict(fail);}
92//no match: other field
93if (not(match(x3,templateBitstr_tList))) {setverdict(pass);}
94 else {setverdict(fail);}
95}
96
97testcase templateBitstrComp() runs on templateBitstr_mycomp {
98var templateBitstr_rec x1,x2,x3; //complemented list
99x1:={ x1:='001'B, x2:='010'B, x3:='100'B };
100x2:={ x1:='001'B, x2:='11'B, x3:='100'B };
101x3:={ x1:='11'B, x2:='010'B, x3:='100'B };
102//match
103if (match(x1,templateBitstr_tComp)) {setverdict(pass);}
104 else {setverdict(fail);}
105//no match: in the list
106if (not(match(x2,templateBitstr_tComp))) {setverdict(pass);}
107 else {setverdict(fail);}
108//no match: other field
109if (not(match(x3,templateBitstr_tComp))) {setverdict(pass);}
110 else {setverdict(fail);}
111}
112
113testcase templateBitstrOmit() runs on templateBitstr_mycomp {
114var templateBitstr_rec x1,x2,x3; //omitting value
115x1:={ x1:='001'B, x2:='010'B, x3:=omit };
116x2:={ x1:='001'B, x2:='010'B, x3:='000'B };
117x3:={ x1:='00'B, x2:='010'B, x3:=omit };
118//match
119if (match(x1,templateBitstr_tOmit)) {setverdict(pass);}
120 else {setverdict(fail);}
121//no match: not omitted
122if (not(match(x2,templateBitstr_tOmit))) {setverdict(pass);}
123 else {setverdict(fail);}
124//no match: other field
125if (not(match(x3,templateBitstr_tOmit))) {setverdict(pass);}
126 else {setverdict(fail);}
127}
128
129testcase templateBitstrAny() runs on templateBitstr_mycomp {
130var templateBitstr_rec x1,x2,x3; //any value
131x1:={ x1:='001'B, x2:='010'B, x3:='111'B };
132x2:={ x1:='001'B, x2:='010'B, x3:=omit };
133x3:={ x1:='0'B, x2:='010'B, x3:='10'B };
134//match
135if (match(x1,templateBitstr_tAny)) {setverdict(pass);}
136 else {setverdict(fail);}
137//no match: field omitted
138if (not(match(x2,templateBitstr_tAny))) {setverdict(pass);}
139 else {setverdict(fail);}
140//no match: other field
141if (not(match(x3,templateBitstr_tAny))) {setverdict(pass);}
142 else {setverdict(fail);}
143}
144
145testcase templateBitstrAnyorNone() runs on templateBitstr_mycomp {
146var templateBitstr_rec x1,x2,x3; //AnyorNone value
147x1:={ x1:='001'B, x2:='010'B, x3:=omit };
148x2:={ x1:='001'B, x2:='010'B, x3:='100'B };
149x3:={ x1:='1'B, x2:='010'B, x3:=omit };
150//match: omitted
151if (match(x1,templateBitstr_tAnyorNone)) {setverdict(pass);}
152 else {setverdict(fail);}
153//match: value
154if (match(x2,templateBitstr_tAnyorNone)) {setverdict(pass);}
155 else {setverdict(fail);}
156//no match: other field
157if (not(match(x3,templateBitstr_tAnyorNone))) {setverdict(pass);}
158 else {setverdict(fail);}
159}
160
161testcase templateBitstrLength1() runs on templateBitstr_mycomp {
162var templateBitstr_rec x1,x2,x3,x4; //length (fix)
163x1:={ x1:='001'B, x2:='010'B, x3:='111'B };
164x2:={ x1:='001'B, x2:='010'B, x3:=omit };
165x3:={ x1:='001'B, x2:='010'B, x3:='10'B };
166x4:={ x1:='0010'B, x2:='010'B, x3:='111'B };
167//match: proper length
168if (match(x1,templateBitstr_tLength1)) {setverdict(pass);}
169 else {setverdict(fail);}
170//match: omitted
171if (match(x2,templateBitstr_tLength1)) {setverdict(pass);}
172 else {setverdict(fail);}
173// no match: not proper length
174if (not(match(x3,templateBitstr_tLength1))) {setverdict(pass);}
175 else {setverdict(fail);}
176//no match: other field
177if (not(match(x4,templateBitstr_tLength1))) {setverdict(pass);}
178 else {setverdict(fail);}
179}
180
181testcase templateBitstrLength2() runs on templateBitstr_mycomp {
182var templateBitstr_rec x1,x2,x3; //length (range)
183x1:={ x1:='001'B, x2:='010'B, x3:='111'B };
184x2:={ x1:='001'B, x2:='010'B, x3:='1'B };
185x3:={ x1:='0010'B, x2:='010'B, x3:='111'B };
186//match
187if (match(x1,templateBitstr_tLength2)) {setverdict(pass);}
188 else {setverdict(fail);}
189// no match: not proper length
190if (not(match(x2,templateBitstr_tLength2))) {setverdict(pass);}
191 else {setverdict(fail);}
192//no match: other field
193if (not(match(x3,templateBitstr_tLength2))) {setverdict(pass);}
194 else {setverdict(fail);}
195}
196
197testcase templateBitstrLength3() runs on templateBitstr_mycomp {
198var templateBitstr_rec x1,x2,x3; //length (range, infinity)
199x1:={ x1:='001'B, x2:='010'B, x3:='111'B };
200x2:={ x1:='001'B, x2:='010'B, x3:='1'B };
201x3:={ x1:='0010'B, x2:='010'B, x3:='111'B };
202//match
203if (match(x1,templateBitstr_tLength3)) {setverdict(pass);}
204 else {setverdict(fail);}
205// no match: not proper length
206if (not(match(x2,templateBitstr_tLength3))) {setverdict(pass);}
207 else {setverdict(fail);}
208//no match: other field
209if (not(match(x3,templateBitstr_tLength3))) {setverdict(pass);}
210 else {setverdict(fail);}
211}
212
213testcase templateBitstrIfpresent() runs on templateBitstr_mycomp {
214var templateBitstr_rec x1,x2,x3,x4; //ifpresent
215x1:={ x1:='001'B, x2:='010'B, x3:='100'B };
216x2:={ x1:='001'B, x2:='010'B, x3:=omit };
217x3:={ x1:='001'B, x2:='010'B, x3:='000'B };
218x4:={ x1:='00'B, x2:='010'B, x3:=omit };
219//match: present and match
220if (match(x1,templateBitstr_tIfpresent)) {setverdict(pass);}
221 else {setverdict(fail);}
222//match: not present
223if (match(x2,templateBitstr_tIfpresent)) {setverdict(pass);}
224 else {setverdict(fail);}
225//no match: present and not match
226if (not(match(x3,templateBitstr_tIfpresent))) {setverdict(pass);}
227 else {setverdict(fail);}
228//no match: other field
229if (not(match(x4,templateBitstr_tIfpresent))) {setverdict(pass);}
230 else {setverdict(fail);}
231}
232
233testcase templateBitstrLengthIfp() runs on templateBitstr_mycomp {
234var templateBitstr_rec x1,x2,x3,x4; //length (fix), ifpresent
235x1:={ x1:='001'B, x2:='010'B, x3:='111'B };
236x2:={ x1:='001'B, x2:='010'B, x3:=omit };
237x3:={ x1:='001'B, x2:='010'B, x3:='10'B };
238x4:={ x1:='0010'B, x2:='010'B, x3:='111'B };
239//match: proper length
240if (match(x1,templateBitstr_tLengthIfp)) {setverdict(pass);}
241 else {setverdict(fail);}
242//match: omitted
243if (match(x2,templateBitstr_tLengthIfp)) {setverdict(pass);}
244 else {setverdict(fail);}
245// no match: not proper length
246if (not(match(x3,templateBitstr_tLengthIfp))) {setverdict(pass);}
247 else {setverdict(fail);}
248//no match: other field
249if (not(match(x4,templateBitstr_tLengthIfp))) {setverdict(pass);}
250 else {setverdict(fail);}
251}
252
253testcase templateBitstrAnyEl() runs on templateBitstr_mycomp {
254var templateBitstr_rec x1,x2,x3,x4,x5; //any element
255x1:={ x1:='001'B, x2:='010'B, x3:='101'B };
256x2:={ x1:='001'B, x2:='010'B, x3:='10'B };
257x3:={ x1:='001'B, x2:='010'B, x3:='1000'B };
258x4:={ x1:='001'B, x2:='010'B, x3:='001'B };
259x5:={ x1:='0'B, x2:='010'B, x3:='101'B };
260//match
261if (match(x1,templateBitstr_tAnyEl)) {setverdict(pass);}
262 else {setverdict(fail);}
263//no match: no element
264if (not(match(x2,templateBitstr_tAnyEl))) {setverdict(pass);}
265 else {setverdict(fail);}
266//no match: two element
267if (not(match(x3,templateBitstr_tAnyEl))) {setverdict(pass);}
268 else {setverdict(fail);}
269//no match: wrong element
270if (not(match(x4,templateBitstr_tAnyEl))) {setverdict(pass);}
271 else {setverdict(fail);}
272//no match: other field
273if (not(match(x5,templateBitstr_tAnyEl))) {setverdict(pass);}
274 else {setverdict(fail);}
275}
276
277testcase templateBitstrAnyorNoneEl() runs on templateBitstr_mycomp {
278var templateBitstr_rec x1,x2,x3,x4,x5; //Any number of elements or none
279x1:={ x1:='001'B, x2:='010'B, x3:='10'B };
280x2:={ x1:='001'B, x2:='010'B, x3:='100'B };
281x3:={ x1:='001'B, x2:='010'B, x3:='1011'B };
282x4:={ x1:='001'B, x2:='010'B, x3:='110'B };
283x5:={ x1:='1'B, x2:='010'B, x3:='100'B };
284//match: no element
285if (match(x1,templateBitstr_tAnyorNoneEl)) {setverdict(pass);}
286 else {setverdict(fail);}
287//match: one element
288if (match(x2,templateBitstr_tAnyorNoneEl)) {setverdict(pass);}
289 else {setverdict(fail);}
290//match: two element
291if (match(x3,templateBitstr_tAnyorNoneEl)) {setverdict(pass);}
292 else {setverdict(fail);}
293//no match: other element
294if (not(match(x4,templateBitstr_tAnyorNoneEl))) {setverdict(pass);}
295 else {setverdict(fail);}
296//no match: other field
297if (not(match(x5,templateBitstr_tAnyorNoneEl))) {setverdict(pass);}
298 else {setverdict(fail);}
299}
300
301testcase CR_TR00018474() runs on templateBitstr_mycomp {
302 // Indexing of string template variables.
303 var template bitstring vtb1 := '0011110000'B
304 var template bitstring vtb2 := '0*?1'B // It's a pattern, cannot be indexed, runtime error.
305 vtb1[0] := '1'B
306 if (match('1011110000'B, vtb1)) { setverdict(pass) } else { setverdict(fail) }
307 vtb1[0] := '1'B // Indexed assignment notation cannot be used here.
308 vtb1[1] := '0'B // Still works, nothing special.
309 if (match('1011110000'B, vtb1)) { setverdict(pass) } else { setverdict(fail) }
310}
311
312control {
313 execute(templateBitstrSpec());
314 execute(templateBitstrList());
315 execute(templateBitstrComp());
316 execute(templateBitstrOmit());
317 execute(templateBitstrAny());
318 execute(templateBitstrAnyorNone());
319 execute(templateBitstrLength1());
320 execute(templateBitstrLength2());
321 execute(templateBitstrLength3());
322 execute(templateBitstrIfpresent());
323 execute(templateBitstrLengthIfp());
324 execute(templateBitstrAnyEl());
325 execute(templateBitstrAnyorNoneEl());
326 execute(CR_TR00018474());
327}
328}
This page took 0.035849 seconds and 5 git commands to generate.