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 DynamicTemplate { | |
9 | ||
10 | // Prerequisites | |
11 | ||
12 | type integer T1; | |
13 | ||
14 | type record T2 { | |
15 | bitstring f1 optional, | |
16 | objid f2, | |
17 | T1 f3 | |
18 | } | |
19 | ||
20 | type set T3 { | |
21 | octetstring f1, | |
22 | T2 f2 optional, | |
23 | verdicttype f3 | |
24 | } | |
25 | ||
26 | type union T4 { | |
27 | boolean f1, | |
28 | T2 f2, | |
29 | T3 f3, | |
30 | T5 f5 | |
31 | } | |
32 | ||
33 | type record of hexstring T5; | |
34 | ||
35 | type set of T4 T6; | |
36 | ||
37 | type port PT message { | |
38 | inout bitstring, T6; | |
39 | } with { extension "internal" } | |
40 | ||
41 | template bitstring t1 := '10?01*1'B; | |
42 | ||
43 | // Test Cases | |
44 | ||
45 | // DynamicTemplate-001 | |
46 | function f1(boolean flag) return template bitstring | |
47 | { | |
48 | var boolean flag2 := true; | |
49 | if (flag) { | |
50 | // DynamicTemplate-006 | |
51 | return not4b ('1001'B & '0110'B); | |
52 | } else if (flag2) { | |
53 | // DynamicTemplate-007 | |
54 | return t1; | |
55 | } else { | |
56 | // DynamicTemplate-008 | |
57 | return ?; | |
58 | } | |
59 | } | |
60 | ||
61 | // DynamicTemplate-002 | |
62 | external function ef1() return template float; | |
63 | ||
64 | // DynamicTemplate-003 | |
65 | function f2(template T6 par_t6) runs on C return template T6 | |
66 | { | |
67 | if (flag) { | |
68 | // DynamicTemplate-009 | |
69 | return { | |
70 | vt4, | |
71 | *, | |
72 | { f5 := { 'AB?C'H, '*F'H, ''H } }, | |
73 | { f2 := { f1 := *, f2 := objid { 1 2 3 4 }, f3 := (1..10) } }, | |
74 | { f3 := { f1 := '12*AB'O, | |
75 | f2 := { f1 := omit, f2 := ?, f3 := complement(5, 10, 13) } ifpresent, | |
76 | f3 := (pass, fail) } | |
77 | } | |
78 | } length(7..9); | |
79 | } else { | |
80 | var boolean flag2 := true; | |
81 | if (flag2) { | |
82 | // DynamicTemplate-010 | |
83 | return par_t6; | |
84 | } else { | |
85 | // DynamicTemplate-011 | |
86 | // DynamicTemplate-025 | |
87 | return vt6; | |
88 | } | |
89 | } | |
90 | } | |
91 | ||
92 | // DynamicTemplate-004 | |
93 | external function ef2() return template T3; | |
94 | ||
95 | // DynamicTemplate-012 | |
96 | template bitstring t2(boolean flag) := f1(flag); | |
97 | ||
98 | // DynamicTemplate-013 | |
99 | function f2b() runs on C | |
100 | { | |
101 | var template T6 tmp := f2(f2(f2(?))); | |
102 | } | |
103 | ||
104 | // DynamicTemplate-014 | |
105 | function f2c() runs on C | |
106 | { | |
107 | P.send(f1(true)); | |
108 | P.send(bitstring:f1(true)); | |
109 | P.receive(f2(?)); | |
110 | P.receive(T6:f2(?)); | |
111 | } | |
112 | ||
113 | // DynamicTemplate-015 | |
114 | function f2d() | |
115 | { | |
116 | var T6 v1 := valueof(f2({})); | |
117 | if (match(v1, f2(?))) { } | |
118 | } | |
119 | ||
120 | type component C { | |
121 | port PT P; | |
122 | var boolean flag; | |
123 | // DynamicTemplate-016 | |
124 | var template octetstring vt1; | |
125 | ||
126 | // DynamicTemplate-017 | |
127 | var template integer vt2 := 5; | |
128 | ||
129 | // DynamicTemplate-018 | |
130 | var template bitstring vt3:= complement('1*1'B, '01?0'B, '1'B) ifpresent; | |
131 | ||
132 | // DynamicTemplate-019 | |
133 | var template T4 vt4; | |
134 | ||
135 | // DynamicTemplate-020 | |
136 | var template T3 vt5 := { f1 := ?, f3 := error }; | |
137 | ||
138 | // DynamicTemplate-021 | |
139 | // DynamicTemplate-025 | |
140 | var template T6 vt6 := { { f1 := false }, { f2 := ? }, | |
141 | { f3 := { f1 := ?, f2 := *, f3 := ? } } }; | |
142 | ||
143 | ||
144 | // DynamicTemplate-022 | |
145 | var template integer vt7[100]; | |
146 | var template float vt8[3] := { (0.0 .. 0.5), (1.0 .. 1.5), (2.0 .. 2.5) }; | |
147 | ||
148 | // DynamicTemplate-023 | |
149 | var template T5 vt9[3][5]; | |
150 | var template octetstring vt10[3][2][2] := | |
151 | { { { ''O, ''O }, { ?, * } }, -, { { '00'O, 'FF'O }, { '?'O, '*'O } } }; | |
152 | ||
153 | // DynamicTemplate-024 | |
154 | var template T2 vt10a, vt10b[2] /*, vt10c[1][1]*/; | |
155 | var template integer vt11a := 1, vt11b := ?, vt11c[2] := { complement(1), 2 }; | |
156 | } | |
157 | ||
158 | // DynamicTemplate-026 | |
159 | function f3() | |
160 | { | |
161 | // DynamicTemplate-026 | |
162 | var template charstring vt1 := pattern "AB?C*"; | |
163 | var template T6 vt2[1], vt3 := *; | |
164 | // DynamicTemplate-027 | |
165 | do { | |
166 | var template T5 vt4 := ({ }, { (''H, '?'H) }, { '1?'H, '2*'H }); | |
167 | } while (false); | |
168 | // DynamicTemplate-028 | |
169 | for (var template integer i := 0; valueof(i) < 10; i := valueof(i) + 1) { | |
170 | } | |
171 | } | |
172 | ||
173 | // DynamicTemplate-029 | |
174 | testcase tc1() runs on C | |
175 | { | |
176 | var template T2 vt12 := { f1 := omit }; | |
177 | } | |
178 | ||
179 | // DynamicTemplate-030 | |
180 | altstep as1() | |
181 | { | |
182 | var template integer vti := 1; | |
183 | var template T6 vt6 := ?; | |
184 | [] any timer.timeout { | |
185 | // DynamicTemplate-032 | |
186 | var template bitstring vbs[10], vbs2 := '10??10*1?0'B; | |
187 | } | |
188 | [] any component.done { | |
189 | // DynamicTemplate-033 | |
190 | var template octetstring vbs2, vbs; | |
191 | } | |
192 | } | |
193 | ||
194 | function f4() { | |
195 | var bitstring v1 := '1001'B; | |
196 | var template bitstring vt1; | |
197 | var template T6 vt2; | |
198 | // DynamicTemplate-034 | |
199 | vt1 := '0110'B; | |
200 | vt1 := not4b (v1 & v1); | |
201 | // DynamicTemplate-035 | |
202 | vt1 := t1; | |
203 | // DynamicTemplate-036 | |
204 | vt1 := ?; | |
205 | // DynamicTemplate-037 | |
206 | vt1 := f1(false); | |
207 | // DynamicTemplate-038 | |
208 | vt2[0].f1 := ?; | |
209 | } | |
210 | ||
211 | function f5() runs on C return template T6 { | |
212 | var template T6 vt12 := {}, vt13; | |
213 | var T6 v1; | |
214 | // DynamicTemplate-039 | |
215 | vt13 := f2(vt12); | |
216 | // DynamicTemplate-040 | |
217 | P.send(vt12); | |
218 | P.send(T6:vt12); | |
219 | P.receive(vt13); | |
220 | P.receive(T6:vt13) -> value v1; | |
221 | // DynamicTemplate-041 | |
222 | v1 := valueof(vt12); | |
223 | // DynamicTemplate-042 | |
224 | if (match(v1, vt13)) { } | |
225 | // DynamicTemplate-011 | |
226 | return vt13; | |
227 | } | |
228 | ||
229 | // DynamicTemplate-043 | |
230 | // DynamicTemplate-045 | |
231 | function f6(in template integer par1, inout template bitstring par2, | |
232 | out template objid par3) { | |
233 | } | |
234 | ||
235 | // DynamicTemplate-044 | |
236 | function f7(inout template T3 par1, out template T5 par2, | |
237 | in template T6 par3) runs on C { | |
238 | } | |
239 | ||
240 | // DynamicTemplate-046 | |
241 | external function ef3(in template T1 par1, inout template T2 par2, | |
242 | out template T3 par3); | |
243 | ||
244 | // DynamicTemplate-047 | |
245 | testcase tc2(in template T4 par1, inout template T5 par2, | |
246 | out template T6 par3) runs on C { | |
247 | } | |
248 | ||
249 | // DynamicTemplate-048 | |
250 | altstep as2(in template float par1, out template octetstring par2, | |
251 | inout template universal charstring par3) { | |
252 | [] any timer.timeout { } | |
253 | } | |
254 | ||
255 | function f8(out template T6 par1, inout template bitstring par2) runs on C { | |
256 | var bitstring vbs; | |
257 | var template bitstring vtbs; | |
258 | // DynamicTemplate-049 | |
259 | par1 := { ?, ? }; | |
260 | par1[0] := { f1 := ? }; | |
261 | // DynamicTemplate-050 | |
262 | vtbs := par2; | |
263 | // DynamicTemplate-051 | |
264 | f6(1, par2, par1[1].f2.f2); | |
265 | // DynamicTemplate-052 | |
266 | P.send(par2); | |
267 | P.receive(par2); | |
268 | // DynamicTemplate-053 | |
269 | vbs := valueof(par2); | |
270 | if (match(vbs, par2)) { } | |
271 | } | |
272 | ||
273 | ||
274 | // DynamicTemplate-030 | |
275 | control { | |
276 | var template verdicttype vt := complement(fail); | |
277 | } | |
278 | ||
279 | } |