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 TtemplateRecof { | |
9 | type component mycomp {}; | |
10 | type record of integer templateRecof_myrecof; | |
11 | type record templateRecof_rec { | |
12 | templateRecof_myrecof x1, | |
13 | templateRecof_myrecof x2, | |
14 | templateRecof_myrecof x3 optional }; | |
15 | template templateRecof_rec templateRecof_tSpec :={ //specific values | |
16 | x1:={1,1}, | |
17 | x2:={2,1}, | |
18 | x3:={3,1} }; | |
19 | template templateRecof_rec templateRecof_tList :={ //specific value and value list | |
20 | x1:={1,1}, | |
21 | x2:=({2,1},{3,1},{6,1}), | |
22 | x3:={3,1} }; | |
23 | template templateRecof_rec templateRecof_tComp :={ //specific value and compl. list | |
24 | x1:={1,1}, | |
25 | x2:=complement ({2,1},{3,1},{6,1}), | |
26 | x3:={3,1} }; | |
27 | template templateRecof_rec templateRecof_tOmit :={ //omitting values | |
28 | x1:={1,1}, | |
29 | x2:={2,1}, | |
30 | x3:=omit } ; | |
31 | template templateRecof_rec templateRecof_tAny :={ //specific and any value | |
32 | x1:={1,1}, | |
33 | x2:={2,1}, | |
34 | x3:=? } ; | |
35 | template templateRecof_rec templateRecof_tAnyorNone :={ //specific and AnyorNone value | |
36 | x1:={1,1}, | |
37 | x2:={2,1}, | |
38 | x3:=* }; | |
39 | template templateRecof_rec templateRecof_tLength1 :={ //specific value and length (fix) | |
40 | x1:={1,1}, | |
41 | x2:={2,1}, | |
42 | x3:=* length(3) }; | |
43 | template templateRecof_rec templateRecof_tLength2 :={ //specific value and length (range) | |
44 | x1:={1,1}, | |
45 | x2:={2,1}, | |
46 | x3:=? length(2..4) }; | |
47 | template templateRecof_rec templateRecof_tLength3 :={ //specific value and length (range, infinity) | |
48 | x1:={1,1}, | |
49 | x2:={2,1}, | |
50 | x3:=? length(2..infinity) }; | |
51 | template templateRecof_rec templateRecof_tIfpresent :={ // specific value and ifpresent | |
52 | x1:={1,1}, | |
53 | x2:={2,1}, | |
54 | x3:={3,1} ifpresent }; | |
55 | template templateRecof_rec templateRecof_tLengthIfp :={ //specific value and length (fix), ifpresent | |
56 | x1:={1,1}, | |
57 | x2:={2,1}, | |
58 | x3:=? length(3) ifpresent}; | |
59 | template templateRecof_rec templateRecof_tAnyEl :={ //specific value and any element inside value | |
60 | x1:={1,1}, | |
61 | x2:={2,1}, | |
62 | x3:={3,?,1} } ; | |
63 | template templateRecof_rec templateRecof_tAnyorNoneEl :={ //specific value and Any number of elements or none inside value | |
64 | x1:={1,1}, | |
65 | x2:={2,1}, | |
66 | x3:={3,*,1} }; | |
67 | ||
68 | template templateRecof_rec aliased_template := templateRecof_tAnyorNoneEl; | |
69 | ||
70 | testcase templateRecofSpec() runs on mycomp { | |
71 | var templateRecof_myrecof temp:={3,1}; | |
72 | var templateRecof_rec x1,x2; //specific value | |
73 | x1:={ x1:={1,1}, x2:={2,1}, x3:=temp }; | |
74 | x2:={ x1:={2,1}, x2:={2,1}, x3:=temp }; | |
75 | //match | |
76 | if (match(x1,templateRecof_tSpec)) {setverdict(pass);} | |
77 | else {setverdict(fail);} | |
78 | //no match | |
79 | if (not(match(x2,templateRecof_tSpec))) {setverdict(pass);} | |
80 | else {setverdict(fail);} | |
81 | } | |
82 | ||
83 | testcase templateRecofList() runs on mycomp { | |
84 | var templateRecof_myrecof temp:={3,1}; | |
85 | var templateRecof_rec x1,x2,x3; //value list | |
86 | x1:={ x1:={1,1}, x2:={6,1}, x3:=temp }; | |
87 | x2:={ x1:={1,1}, x2:={7,1}, x3:=temp }; | |
88 | x3:={ x1:={8,1}, x2:={6,1}, x3:=temp }; | |
89 | //match | |
90 | if (match(x1,templateRecof_tList)) {setverdict(pass);} | |
91 | else {setverdict(fail);} | |
92 | //no match: out of list | |
93 | if (not(match(x2,templateRecof_tList))) {setverdict(pass);} | |
94 | else {setverdict(fail);} | |
95 | //no match: other field | |
96 | if (not(match(x3,templateRecof_tList))) {setverdict(pass);} | |
97 | else {setverdict(fail);} | |
98 | } | |
99 | ||
100 | testcase templateRecofComp() runs on mycomp { | |
101 | var templateRecof_myrecof temp:={3,1}; | |
102 | var templateRecof_rec x1,x2,x3; //complemented list | |
103 | x1:={ x1:={1,1}, x2:={7,1}, x3:=temp }; | |
104 | x2:={ x1:={1,1}, x2:={6,1}, x3:=temp }; | |
105 | x3:={ x1:={2,1}, x2:={7,1}, x3:=temp }; | |
106 | //match | |
107 | if (match(x1,templateRecof_tComp)) {setverdict(pass);} | |
108 | else {setverdict(fail);} | |
109 | //no match: in the list | |
110 | if (not(match(x2,templateRecof_tComp))) {setverdict(pass);} | |
111 | else {setverdict(fail);} | |
112 | //no match: other field | |
113 | if (not(match(x3,templateRecof_tComp))) {setverdict(pass);} | |
114 | else {setverdict(fail);} | |
115 | } | |
116 | ||
117 | testcase templateRecofOmit() runs on mycomp { | |
118 | var templateRecof_myrecof temp:={3,1}; | |
119 | var templateRecof_rec x1,x2,x3; //omitting value | |
120 | x1:={ x1:={1,1}, x2:={2,1}, x3:=omit }; | |
121 | x2:={ x1:={1,1}, x2:={2,1}, x3:=temp }; | |
122 | x3:={ x1:={2,1}, x2:={2,1}, x3:=omit }; | |
123 | //match | |
124 | if (match(x1,templateRecof_tOmit)) {setverdict(pass);} | |
125 | else {setverdict(fail);} | |
126 | //no match: not omitted | |
127 | if (not(match(x2,templateRecof_tOmit))) {setverdict(pass);} | |
128 | else {setverdict(fail);} | |
129 | //no match: other field | |
130 | if (not(match(x3,templateRecof_tOmit))) {setverdict(pass);} | |
131 | else {setverdict(fail);} | |
132 | } | |
133 | ||
134 | testcase templateRecofAny() runs on mycomp { | |
135 | var templateRecof_myrecof temp:={3,1}; | |
136 | var templateRecof_rec x1,x2,x3; //any value | |
137 | x1:={ x1:={1,1}, x2:={2,1}, x3:=temp }; | |
138 | x2:={ x1:={1,1}, x2:={2,1}, x3:=omit }; | |
139 | x3:={ x1:={2,1}, x2:={2,1}, x3:=temp }; | |
140 | //match | |
141 | if (match(x1,templateRecof_tAny)) {setverdict(pass);} | |
142 | else {setverdict(fail);} | |
143 | //no match: field omitted | |
144 | if (not(match(x2,templateRecof_tAny))) {setverdict(pass);} | |
145 | else {setverdict(fail);} | |
146 | //no match: other field | |
147 | if (not(match(x3,templateRecof_tAny))) {setverdict(pass);} | |
148 | else {setverdict(fail);} | |
149 | } | |
150 | ||
151 | testcase templateRecofAnyorNone() runs on mycomp { | |
152 | var templateRecof_myrecof temp:={3,1}; | |
153 | var templateRecof_rec x1,x2,x3; //AnyorNone value | |
154 | x1:={ x1:={1,1}, x2:={2,1}, x3:=omit }; | |
155 | x2:={ x1:={1,1}, x2:={2,1}, x3:=temp }; | |
156 | x3:={ x1:={2,1}, x2:={2,1}, x3:=omit }; | |
157 | //match: omitted | |
158 | if (match(x1,templateRecof_tAnyorNone)) {setverdict(pass);} | |
159 | else {setverdict(fail);} | |
160 | //match: value | |
161 | if (match(x2,templateRecof_tAnyorNone)) {setverdict(pass);} | |
162 | else {setverdict(fail);} | |
163 | //no match: other field | |
164 | if (not(match(x3,templateRecof_tAnyorNone))) {setverdict(pass);} | |
165 | else {setverdict(fail);} | |
166 | } | |
167 | ||
168 | testcase templateRecofLength1() runs on mycomp { | |
169 | var templateRecof_myrecof temp1:={1,2,3}; //length (fix) | |
170 | var templateRecof_myrecof temp2:={1,2}; | |
171 | var templateRecof_rec x1,x2,x3,x4; | |
172 | x1:={ x1:={1,1}, x2:={2,1}, x3:=temp1 }; | |
173 | x2:={ x1:={1,1}, x2:={2,1}, x3:=omit }; | |
174 | x3:={ x1:={1,1}, x2:={2,1}, x3:=temp2 }; | |
175 | x4:={ x1:={1,1,1}, x2:={2,1}, x3:=temp1 }; | |
176 | //match: proper length | |
177 | if (match(x1,templateRecof_tLength1)) {setverdict(pass);} | |
178 | else {setverdict(fail);} | |
179 | //match: omitted | |
180 | if (match(x2,templateRecof_tLength1)) {setverdict(pass);} | |
181 | else {setverdict(fail);} | |
182 | // no match: not proper length | |
183 | if (not(match(x3,templateRecof_tLength1))) {setverdict(pass);} | |
184 | else {setverdict(fail);} | |
185 | //no match: other field | |
186 | if (not(match(x4,templateRecof_tLength1))) {setverdict(pass);} | |
187 | else {setverdict(fail);} | |
188 | } | |
189 | ||
190 | testcase templateRecofLength2() runs on mycomp { | |
191 | var templateRecof_myrecof temp1:={1,2}; // length (range) | |
192 | var templateRecof_myrecof temp2:={1}; | |
193 | var templateRecof_rec x1,x2,x3; | |
194 | x1:={ x1:={1,1}, x2:={2,1}, x3:=temp1 }; | |
195 | x2:={ x1:={1,1}, x2:={2,1}, x3:=temp2 }; | |
196 | x3:={ x1:={1}, x2:={2,1}, x3:=temp1 }; | |
197 | //match | |
198 | if (match(x1,templateRecof_tLength2)) {setverdict(pass);} | |
199 | else {setverdict(fail);} | |
200 | // no match: not proper length | |
201 | if (not(match(x2,templateRecof_tLength2))) {setverdict(pass);} | |
202 | else {setverdict(fail);} | |
203 | //no match: other field | |
204 | if (not(match(x3,templateRecof_tLength2))) {setverdict(pass);} | |
205 | else {setverdict(fail);} | |
206 | } | |
207 | ||
208 | testcase templateRecofLength3() runs on mycomp { | |
209 | var templateRecof_myrecof temp1:={1,2}; // length (range, infinity) | |
210 | var templateRecof_myrecof temp2:={1}; | |
211 | var templateRecof_rec x1,x2,x3; | |
212 | x1:={ x1:={1,1}, x2:={2,1}, x3:=temp1 }; | |
213 | x2:={ x1:={1,1}, x2:={2,1}, x3:=temp2 }; | |
214 | x3:={ x1:={1}, x2:={2,1}, x3:=temp1 }; | |
215 | //match | |
216 | if (match(x1,templateRecof_tLength3)) {setverdict(pass);} | |
217 | else {setverdict(fail);} | |
218 | // no match: not proper length | |
219 | if (not(match(x2,templateRecof_tLength3))) {setverdict(pass);} | |
220 | else {setverdict(fail);} | |
221 | //no match: other field | |
222 | if (not(match(x3,templateRecof_tLength3))) {setverdict(pass);} | |
223 | else {setverdict(fail);} | |
224 | } | |
225 | ||
226 | testcase templateRecofIfpresent() runs on mycomp { | |
227 | var templateRecof_myrecof temp1:={3,1}; //ifpresent | |
228 | var templateRecof_myrecof temp2:={4,1}; | |
229 | var templateRecof_rec x1,x2,x3,x4; | |
230 | x1:={ x1:={1,1}, x2:={2,1}, x3:=temp1 }; | |
231 | x2:={ x1:={1,1}, x2:={2,1}, x3:=omit }; | |
232 | x3:={ x1:={1,1}, x2:={2,1}, x3:=temp2 }; | |
233 | x4:={ x1:={2,1}, x2:={2,1}, x3:=omit }; | |
234 | //match: present and match | |
235 | if (match(x1,templateRecof_tIfpresent)) {setverdict(pass);} | |
236 | else {setverdict(fail);} | |
237 | //match: not present | |
238 | if (match(x2,templateRecof_tIfpresent)) {setverdict(pass);} | |
239 | else {setverdict(fail);} | |
240 | //no match: present and not match | |
241 | if (not(match(x3,templateRecof_tIfpresent))) {setverdict(pass);} | |
242 | else {setverdict(fail);} | |
243 | //no match: other field | |
244 | if (not(match(x4,templateRecof_tIfpresent))) {setverdict(pass);} | |
245 | else {setverdict(fail);} | |
246 | } | |
247 | ||
248 | testcase templateRecofLengthIfp() runs on mycomp { | |
249 | var templateRecof_myrecof temp1:={1,2,3}; //length (fix), ifpresent | |
250 | var templateRecof_myrecof temp2:={1,2}; | |
251 | var templateRecof_rec x1,x2,x3,x4; | |
252 | x1:={ x1:={1,1}, x2:={2,1}, x3:=temp1 }; | |
253 | x2:={ x1:={1,1}, x2:={2,1}, x3:=omit }; | |
254 | x3:={ x1:={1,1}, x2:={2,1}, x3:=temp2 }; | |
255 | x4:={ x1:={1,1,1}, x2:={2,1}, x3:=temp1 }; | |
256 | //match: proper length | |
257 | if (match(x1,templateRecof_tLengthIfp)) {setverdict(pass);} | |
258 | else {setverdict(fail);} | |
259 | //match: omitted | |
260 | if (match(x2,templateRecof_tLengthIfp)) {setverdict(pass);} | |
261 | else {setverdict(fail);} | |
262 | //no match: not proper length | |
263 | if (not(match(x3,templateRecof_tLengthIfp))) {setverdict(pass);} | |
264 | else {setverdict(fail);} | |
265 | //no match: other field | |
266 | if (not(match(x4,templateRecof_tLengthIfp))) {setverdict(pass);} | |
267 | else {setverdict(fail);} | |
268 | } | |
269 | ||
270 | testcase templateRecofAnyEl() runs on mycomp { | |
271 | var templateRecof_myrecof temp1:={3,15,1}; // any element | |
272 | var templateRecof_myrecof temp2:={3,1}; | |
273 | var templateRecof_myrecof temp3:={3,1,4,1}; | |
274 | var templateRecof_myrecof temp4:={3,1,2}; | |
275 | var templateRecof_rec x1,x2,x3,x4,x5; | |
276 | x1:={ x1:={1,1}, x2:={2,1}, x3:=temp1 }; | |
277 | x2:={ x1:={1,1}, x2:={2,1}, x3:=temp2 }; | |
278 | x3:={ x1:={1,1}, x2:={2,1}, x3:=temp3 }; | |
279 | x4:={ x1:={1,1}, x2:={2,1}, x3:=temp4 }; | |
280 | x5:={ x1:={1}, x2:={2,1}, x3:=temp1 }; | |
281 | //match | |
282 | if (match(x1,templateRecof_tAnyEl)) {setverdict(pass);} | |
283 | else {setverdict(fail);} | |
284 | //no match: no element | |
285 | if (not(match(x2,templateRecof_tAnyEl))) {setverdict(pass);} | |
286 | else {setverdict(fail);} | |
287 | //no match: two element | |
288 | if (not(match(x3,templateRecof_tAnyEl))) {setverdict(pass);} | |
289 | else {setverdict(fail);} | |
290 | //no match: wrong element | |
291 | if (not(match(x4,templateRecof_tAnyEl))) {setverdict(pass);} | |
292 | else {setverdict(fail);} | |
293 | //no match: other field | |
294 | if (not(match(x5,templateRecof_tAnyEl))) {setverdict(pass);} | |
295 | else {setverdict(fail);} | |
296 | } | |
297 | ||
298 | testcase templateRecofAnyorNoneEl() runs on mycomp { | |
299 | var templateRecof_myrecof temp1:={3,1}; //Any number of elements or none | |
300 | var templateRecof_myrecof temp2:={3,5,1}; | |
301 | var templateRecof_myrecof temp3:={3,2,5,1}; | |
302 | var templateRecof_myrecof temp4:={4,2,1}; | |
303 | var templateRecof_myrecof temp5:={3,5,1,2,1}; | |
304 | var templateRecof_myrecof temp6:={3,5,1,2}; | |
305 | var templateRecof_rec x1,x2,x3,x4,x5,x6,x7; | |
306 | x1:={ x1:={1,1}, x2:={2,1}, x3:=temp1 }; | |
307 | x2:={ x1:={1,1}, x2:={2,1}, x3:=temp2 }; | |
308 | x3:={ x1:={1,1}, x2:={2,1}, x3:=temp3 }; | |
309 | x4:={ x1:={1,1}, x2:={2,1}, x3:=temp4 }; | |
310 | x5:={ x1:={1,2}, x2:={2,1}, x3:=temp3 }; | |
311 | x6:={ x1:={1,1}, x2:={2,1}, x3:=temp5 }; | |
312 | x7:={ x1:={1,1}, x2:={2,1}, x3:=temp6 }; | |
313 | //match: no element | |
314 | if (match(x1,templateRecof_tAnyorNoneEl)) {setverdict(pass);} | |
315 | else {setverdict(fail);} | |
316 | //match: one element | |
317 | if (match(x2,templateRecof_tAnyorNoneEl)) {setverdict(pass);} | |
318 | else {setverdict(fail);} | |
319 | //match: two element | |
320 | if (match(x3,templateRecof_tAnyorNoneEl)) {setverdict(pass);} | |
321 | else {setverdict(fail);} | |
322 | //see if the algorithm goes till the end | |
323 | if (match(x6,templateRecof_tAnyorNoneEl)) {setverdict(pass);} | |
324 | else {setverdict(fail);} | |
325 | //no match: other element | |
326 | if (not(match(x4,templateRecof_tAnyorNoneEl))) {setverdict(pass);} | |
327 | else {setverdict(fail);} | |
328 | //no match: other field | |
329 | if (not(match(x5,templateRecof_tAnyorNoneEl))) {setverdict(pass);} | |
330 | else {setverdict(fail);} | |
331 | //see if the algorithm goes till the end | |
332 | if (not(match(x7,templateRecof_tAnyorNoneEl))) {setverdict(pass);} | |
333 | else {setverdict(fail);} | |
334 | } | |
335 | ||
336 | testcase templateRecofPermutation() runs on mycomp { | |
337 | template templateRecof_rec t1 := { | |
338 | {1,1}, | |
339 | {permutation(1,2,3)}, | |
340 | {3,1} | |
341 | }; | |
342 | template templateRecof_rec t2 := { | |
343 | {1,1}, | |
344 | {permutation(1,2,3), 4}, | |
345 | {3,1} | |
346 | }; | |
347 | template templateRecof_rec t3 := { | |
348 | {1,1}, | |
349 | {permutation(1,2,3,*), 4}, | |
350 | {3,1} | |
351 | }; | |
352 | template templateRecof_rec t4 := { | |
353 | {1,1}, | |
354 | {permutation(1,2,?,*), 4}, | |
355 | {3,1} | |
356 | }; | |
357 | template templateRecof_rec t5 := { | |
358 | {1,1}, | |
359 | {permutation(1,2,?), 4}, | |
360 | {3,1} | |
361 | }; | |
362 | template templateRecof_rec t6 := { | |
363 | {1,1}, | |
364 | {permutation(1,2,?,?), 4}, | |
365 | {3,1} | |
366 | }; | |
367 | template templateRecof_rec t7 := { | |
368 | {1,1}, | |
369 | {permutation(?,1,2,?), 4}, | |
370 | {3,1} | |
371 | }; | |
372 | template templateRecof_rec t8 := { | |
373 | {1,1}, | |
374 | {permutation(8,1,2,?), 4}, | |
375 | {3,1} | |
376 | }; | |
377 | template templateRecof_rec t9 := { | |
378 | {1,1}, | |
379 | {permutation(1,*,2,3,*), 4}, | |
380 | {3,1} | |
381 | }; | |
382 | template templateRecof_rec t10 := { | |
383 | {1,1}, | |
384 | {*, permutation(2,3,*), *}, | |
385 | {3,1} | |
386 | }; | |
387 | template templateRecof_rec t11 := { | |
388 | {1,1}, | |
389 | {*, permutation(2,3), *}, | |
390 | {3,1} | |
391 | }; | |
392 | template templateRecof_rec t12 := { | |
393 | {1,1}, | |
394 | {*, permutation(2,3,*), *, 4}, | |
395 | {3,1} | |
396 | }; | |
397 | template templateRecof_rec t13 := { | |
398 | {1,1}, | |
399 | {*, permutation(2,3,*), *, 4, *}, | |
400 | {3,1} | |
401 | }; | |
402 | template templateRecof_rec t14 := { | |
403 | {1,1}, | |
404 | {*, permutation(2,?), *, 4, *}, | |
405 | {3,1} | |
406 | }; | |
407 | template templateRecof_rec t15 := { | |
408 | {1,1}, | |
409 | {*, permutation(2,?), ?, 4, *}, | |
410 | {3,1} | |
411 | }; | |
412 | template templateRecof_rec t16 := { | |
413 | {1,1}, | |
414 | {1, *, permutation(3,?), ?, 4, *}, | |
415 | {3,1} | |
416 | }; | |
417 | template templateRecof_rec t17 := { | |
418 | {1,1}, | |
419 | {1, *, permutation(3,?), ?, *}, | |
420 | {3,1} | |
421 | }; | |
422 | template templateRecof_rec t18 := { | |
423 | {1,1}, | |
424 | {permutation(3,?), permutation(4, *)}, | |
425 | {3,1} | |
426 | }; | |
427 | template templateRecof_rec t19 := { | |
428 | {1,1}, | |
429 | {?, permutation(3,?), permutation(4, *)}, | |
430 | {3,1} | |
431 | }; | |
432 | template templateRecof_rec t20 := { | |
433 | {1,1}, | |
434 | {permutation(2,1), permutation(4,3)}, | |
435 | {3,1} | |
436 | }; | |
437 | var templateRecof_rec v1 := {x1:={1,1}, x2:={1,2,3}, x3:={3,1}}; | |
438 | var templateRecof_rec v2 := {x1:={1,1}, x2:={2,3,1}, x3:={3,1}}; | |
439 | var templateRecof_rec v3 := {x1:={1,1}, x2:={1,2,3,4}, x3:={3,1}}; | |
440 | ||
441 | if(match(v1,t1)) {setverdict(pass);} else {setverdict(fail);} | |
442 | if(match(v2,t1)) {setverdict(pass);} else {setverdict(fail);} | |
443 | if(not match(v3,t1)) {setverdict(pass);} else {setverdict(fail);} | |
444 | if(match(v3,t2)) {setverdict(pass);} else {setverdict(fail);} | |
445 | if(match(v3,t3)) {setverdict(pass);} else {setverdict(fail);} | |
446 | if(match(v3,t4)) {setverdict(pass);} else {setverdict(fail);} | |
447 | if(match(v3,t5)) {setverdict(pass);} else {setverdict(fail);} | |
448 | if(not match(v3,t6)) {setverdict(pass);} else {setverdict(fail);} | |
449 | if(not match(v3,t7)) {setverdict(pass);} else {setverdict(fail);} | |
450 | if(not match(v3,t8)) {setverdict(pass);} else {setverdict(fail);} | |
451 | if(match(v3,t9)) {setverdict(pass);} else {setverdict(fail);} | |
452 | if(match(v3,t10)) {setverdict(pass);} else {setverdict(fail);} | |
453 | if(match(v3,t11)) {setverdict(pass);} else {setverdict(fail);} | |
454 | if(match(v3,t12)) {setverdict(pass);} else {setverdict(fail);} | |
455 | if(match(v3,t13)) {setverdict(pass);} else {setverdict(fail);} | |
456 | if(match(v3,t14)) {setverdict(pass);} else {setverdict(fail);} | |
457 | if(match(v3,t15)) {setverdict(pass);} else {setverdict(fail);} | |
458 | if(not match(v3,t16)) {setverdict(pass);} else {setverdict(fail);} | |
459 | if(match(v3,t17)) {setverdict(pass);} else {setverdict(fail);} | |
460 | if(not match(v3,t18)) {setverdict(pass);} else {setverdict(fail);} | |
461 | if(match(v3,t19)) {setverdict(pass);} else {setverdict(fail);} | |
462 | if(match(v3,t20)) {setverdict(pass);} else {setverdict(fail);} | |
463 | } | |
464 | ||
465 | type record r_A { charstring f1 } | |
466 | type record of r_A ro_B | |
467 | testcase HK38721() runs on mycomp { | |
468 | var ro_B v_B := { { "" } } | |
469 | // 3.0.4 was unable to compile the generated code for this. | |
470 | log(match("", v_B[0].f1)) | |
471 | setverdict(pass) | |
472 | } | |
473 | ||
474 | testcase templateRecofIsvalue() runs on mycomp { | |
475 | var template templateRecof_myrecof tpl1; | |
476 | var template templateRecof_myrecof tpl2 := { 0,1,2,3,4,5,6,7,8,9 } | |
477 | template templateRecof_myrecof tpl3 := { *,?,*,?,*,?,*,?,*,? }; | |
478 | template templateRecof_myrecof tpl4 := { (0,1,2,3),*,?,*,?,*,?,*,?,42 }; | |
479 | ||
480 | if ( isvalue(tpl1) ) { setverdict(fail); } else { setverdict(pass); }; | |
481 | if ( isvalue(tpl2) ) { setverdict(pass); } else { setverdict(fail); } | |
482 | if ( isvalue(tpl3) ) { setverdict(fail); } else { setverdict(pass); }; | |
483 | if ( isvalue(tpl4) ) { setverdict(fail); } else { setverdict(pass); }; | |
484 | } | |
485 | ||
486 | type record of charstring ROC; | |
487 | type record of integer ROI; | |
488 | type record MyRecord1 { | |
489 | integer i optional, | |
490 | float x optional, | |
491 | charstring c | |
492 | } | |
493 | ||
494 | type union MyUnion1 { | |
495 | ROC roc, | |
496 | integer i, | |
497 | ROI roi, | |
498 | MyRecord1 r | |
499 | } | |
500 | ||
501 | type record MyRec2 { | |
502 | ROC roc optional, | |
503 | ROI roi optional, | |
504 | MyUnion1 u optional, | |
505 | MyRecord1 r optional | |
506 | } | |
507 | ||
508 | type record of MyRec2 MyRecOf | |
509 | ||
510 | template MyRecOf t_recOf1 := ( | |
511 | { [0]:= { roc:=omit }, [1]:= {roc:=omit} }, | |
512 | { [0]:= { roc:=omit }, [1]:= {roc:={"one", "two"}} }, | |
513 | { [0]:= { roc:=omit }, [2]:= {u:={i:=5}} } | |
514 | ) | |
515 | ||
516 | testcase tc_recordOf_template1() runs on mycomp { | |
517 | var template MyRecOf vtl_recOf:= t_recOf1; | |
518 | if(isbound( vtl_recOf )) {setverdict(pass)}else {setverdict(fail)}; | |
519 | if(isbound( t_recOf1 )) {setverdict(pass)}else {setverdict(fail)}; | |
520 | } | |
521 | ||
522 | testcase tc_recordOf_template2() runs on mycomp { | |
523 | var template MyRecOf vtl_recOf:= t_recOf1; | |
524 | if(isbound( vtl_recOf[0] )) {setverdict(fail)}else {setverdict(pass)}; | |
525 | if(isbound( vtl_recOf[1] )) {setverdict(fail)}else {setverdict(pass)}; | |
526 | if(isbound( vtl_recOf[2] )) {setverdict(fail)}else {setverdict(pass)}; | |
527 | } | |
528 | ||
529 | testcase tc_recordOf_template1_ispresent() runs on mycomp { | |
530 | var template MyRecOf vtl_recOf:= t_recOf1; | |
531 | if(ispresent( vtl_recOf )) {setverdict(pass)}else {setverdict(fail)}; | |
532 | if(ispresent( t_recOf1 )) {setverdict(pass)}else {setverdict(fail)}; | |
533 | } | |
534 | ||
535 | testcase tc_recordOf_template2_ispresent() runs on mycomp { | |
536 | var template MyRecOf vtl_recOf:= t_recOf1; | |
537 | if(ispresent( vtl_recOf[0] )) {setverdict(fail)}else {setverdict(pass)}; | |
538 | if(ispresent( vtl_recOf[1] )) {setverdict(fail)}else {setverdict(pass)}; | |
539 | if(ispresent( vtl_recOf[2] )) {setverdict(fail)}else {setverdict(pass)}; | |
540 | } | |
541 | ||
542 | testcase tc_recordOf_template_unbound_elements_lengthof_sizeof() runs on mycomp { | |
543 | var ROI temp; | |
544 | var template ROI ttemp; | |
545 | temp[99] := 0; | |
546 | ttemp[99] := 0; | |
547 | if ((sizeof(temp)==100) and (sizeof(temp)==sizeof(ttemp))) { setverdict(pass); } else { setverdict(fail); } | |
548 | if ((lengthof(temp)==100) and (lengthof(temp)==lengthof(ttemp))) { setverdict(pass); } else { setverdict(fail); } | |
549 | } | |
550 | ||
551 | type record Block {} | |
552 | ||
553 | type record of Block Blocks; | |
554 | ||
555 | type record Request { | |
556 | Blocks blocks optional | |
557 | } | |
558 | ||
559 | testcase HO91743() runs on mycomp { | |
560 | var template Request vt_ReqO := { blocks := omit }; | |
561 | var template Request vt_ReqQ := { blocks := ? }; | |
562 | var template Request vt_ReqS := { blocks := * }; | |
563 | var template Block vt_b := {} | |
564 | ||
565 | vt_ReqQ.blocks[3] := vt_b; | |
566 | vt_ReqS.blocks[3] := vt_b; | |
567 | // Indexing a template record-of which was omit used to DTE | |
568 | // (in contrast to any-value and any-or-omit, which would create the record-of). | |
569 | // HO91743 unifies the behaviour (record-of is created when indexing omit). | |
570 | vt_ReqO.blocks[3] := vt_b; | |
571 | ||
572 | if (lengthof(vt_ReqO.blocks) == 4) { setverdict(pass); } else { setverdict(fail); } | |
573 | if (sizeof (vt_ReqO.blocks) == 4) { setverdict(pass); } else { setverdict(fail); } | |
574 | ||
575 | if (lengthof(vt_ReqQ.blocks) == 4) { setverdict(pass); } else { setverdict(fail); } | |
576 | if (sizeof (vt_ReqQ.blocks) == 4) { setverdict(pass); } else { setverdict(fail); } | |
577 | ||
578 | if (lengthof(vt_ReqS.blocks) == 4) { setverdict(pass); } else { setverdict(fail); } | |
579 | if (sizeof (vt_ReqS.blocks) == 4) { setverdict(pass); } else { setverdict(fail); } | |
580 | } | |
581 | ||
582 | //================================================================= | |
583 | // isbound tests for ROI | |
584 | function f_isbound4ROI_getLen(template ROI pl_roi) return integer { | |
585 | var integer i := 0; | |
586 | while(isbound(pl_roi[i])){ | |
587 | i:=i+1; | |
588 | } | |
589 | return i; | |
590 | } | |
591 | ||
592 | template ROI t_il0:={}; | |
593 | template ROI t_il1:={0}; | |
594 | template ROI t_il2:={0,*}; | |
595 | template ROI t_il3:={0,?}; | |
596 | template ROI t_il4:={0,1,2,3,?}; | |
597 | ||
598 | function f(template ROI roi,integer expected){ | |
599 | var integer index:= f_isbound4ROI_getLen(roi); | |
600 | if(index==expected) { | |
601 | setverdict(pass,"Result:", index); | |
602 | }else { | |
603 | setverdict(fail,"Result:",index," expected:", expected); | |
604 | } | |
605 | } | |
606 | ||
607 | testcase tc_isbound4ROI0() runs on mycomp { | |
608 | f(t_il0,0); | |
609 | } | |
610 | ||
611 | testcase tc_isbound4ROI1() runs on mycomp { | |
612 | f(t_il1,1); | |
613 | } | |
614 | ||
615 | testcase tc_isbound4ROI2() runs on mycomp { | |
616 | f(t_il2,2); | |
617 | } | |
618 | ||
619 | testcase tc_isbound4ROI3() runs on mycomp { | |
620 | f(t_il3,2); | |
621 | } | |
622 | ||
623 | testcase tc_isbound4ROI4() runs on mycomp { | |
624 | f(t_il4,5); | |
625 | } | |
626 | ||
627 | ||
628 | control { | |
629 | execute(templateRecofSpec()); | |
630 | execute(templateRecofList()); | |
631 | execute(templateRecofComp()); | |
632 | execute(templateRecofOmit()); | |
633 | execute(templateRecofAny()); | |
634 | execute(templateRecofAnyorNone()); | |
635 | execute(templateRecofLength1()); | |
636 | execute(templateRecofLength2()); | |
637 | execute(templateRecofLength3()); | |
638 | execute(templateRecofIfpresent()); | |
639 | execute(templateRecofLengthIfp()); | |
640 | execute(templateRecofAnyEl()); | |
641 | execute(templateRecofAnyorNoneEl()); | |
642 | execute(templateRecofPermutation()); | |
643 | execute(HK38721()); | |
644 | execute(templateRecofIsvalue()); | |
645 | ||
646 | execute(tc_recordOf_template1()); | |
647 | execute(tc_recordOf_template2()); | |
648 | execute(tc_recordOf_template1_ispresent()); | |
649 | execute(tc_recordOf_template2_ispresent()); | |
650 | ||
651 | execute(tc_recordOf_template_unbound_elements_lengthof_sizeof()); | |
652 | execute(HO91743()); | |
653 | execute(tc_isbound4ROI0()); | |
654 | execute(tc_isbound4ROI1()); | |
655 | execute(tc_isbound4ROI2()); | |
656 | execute(tc_isbound4ROI3()); | |
657 | execute(tc_isbound4ROI4()); | |
658 | ||
659 | } | |
660 | } |