Last sync 2016.04.01
[deliverable/titan.core.git] / regression_test / modifiedTemplate / TmodifiedTemplate.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 * Kovacs, Ferenc
11 * Raduly, Csaba
12 * Szabados, Kristof
13 * Szabo, Janos Zoltan – initial implementation
14 *
970ed795
EL
15 ******************************************************************************/
16module TmodifiedTemplate {
17
18type record SIGNAL1
19{
20 REC1 rec1
21}
22
23type record REC1
24{
25 integer a,
26 integer b
27}
28
29template SIGNAL1 templateB :=
30{
31 rec1:= ?
32}
33
34template SIGNAL1 templateC modifies templateB :=
35{
36 rec1 :=
37 {
38 a := 3
39 }
40}
41
42template SIGNAL1 templateD modifies templateB :=
43{
44 rec1 :=
45 {
46 a := 3,
47 b := 4
48 }
49}
50
51
52type port TP message {
53 inout SIGNAL1;
54} with { extension "internal" }
55
56type component main {
57 port TP tp;
58 port TP tp2;
59}
60
61testcase tc1() runs on main {
62 connect(mtc:tp, mtc:tp2);
63 tp.send(templateD);
64 log(templateC);
65 tp2.receive(templateC);
66 setverdict(pass);
67}
68
69type record R {
70 integer f1,
71 integer f2 optional
72}
73
74type record RR { // exactly the same
75 integer f1,
76 integer f2 optional
77}
78
79template R tbase := ?;
80template R t1 modifies tbase := { f1 := 1 }; // 1, *
81template R t2 modifies tbase := { f2 := 2 }; // ?, 2
82
83const R c1 := { 1, 2 }; // matches t1, t2
84const R c2 := { 1, omit }; // matches t1
85const R c3 := { 2, 2 }; // matches t2
86const R c4 := { 3, 4 }; // matches none
87
88type component CT { };
89
90testcase tc2() runs on CT
91{
92 var template R vtbase := tbase;
93
94 log(t1);
95 log(t2);
96
97 if (match(c1, t1)) { setverdict(pass); }
98 else { setverdict(fail); }
99 if (match(c1, /* R : */ modifies vtbase := { f1 := 1 })) { setverdict(pass); }
100 else { setverdict(fail); }
101 if (match(c1, t2)) { setverdict(pass); }
102 else { setverdict(fail); }
103 if (match(c1, R : modifies vtbase := { f2 := 2 })) { setverdict(pass); }
104 else { setverdict(fail); }
105
106 if (match(c2, t1)) { setverdict(pass); }
107 else { setverdict(fail); }
108 if (match(c2, R : modifies vtbase := { f1 := 1 })) { setverdict(pass); }
109 else { setverdict(fail); }
110 if (match(c2, t2)) { setverdict(fail); }
111 else { setverdict(pass); }
112 if (match(c2, /* R : */ modifies vtbase := { f2 := 2 })) { setverdict(fail); }
113 else { setverdict(pass); }
114
115 if (match(c3, t1)) { setverdict(fail); }
116 else { setverdict(pass); }
117 if (match(c3, R : modifies vtbase := { f1 := 1 })) { setverdict(fail); }
118 else { setverdict(pass); }
119 if (match(c3, t2)) { setverdict(pass); }
120 else { setverdict(fail); }
121 if (match(c3, R : modifies vtbase := { f2 := 2 })) { setverdict(pass); }
122 else { setverdict(fail); }
123
124 if (match(c4, t1)) { setverdict(fail); }
125 else { setverdict(pass); }
126 if (match(c4, R : modifies vtbase := { f1 := 1 })) { setverdict(fail); }
127 else { setverdict(pass); }
128 if (match(c4, t2)) { setverdict(fail); }
129 else { setverdict(pass); }
130 if (match(c4, R : modifies vtbase := { f2 := 2 })) { setverdict(fail); }
131 else { setverdict(pass); }
132}
133
134type union U {
135 R altr
136}
137
138type record of R RofR;
139
140testcase tc3() runs on CT
141{
142 var template U tu := ?;
143 tu.altr.f1 := 1;
144 log(tu);
145 var template RofR vt := *;
146 vt[5].f2 := 5;
147 log(vt);
148 // todo: add more specific tests
149 setverdict(pass);
150}
151
152type record MyRecordType {
153 integer field1 optional,
154 charstring field2,
155 boolean field3
156}
157
158// With value parameters.
159
160template MyRecordType MyTemplate11(integer p_int := 5) := {
161 field1 := p_int,
162 field2 := "A string",
163 field3 := true
164}
165
166template MyRecordType MyTemplate12(integer p_int) modifies MyTemplate11 := {
167 // p_int had a default value in MyTemplate11 but has none in this template
168 field2 := "B string"
169}
170
171template MyRecordType MyTemplate13(integer p_int := 0) modifies MyTemplate12 := {
172 // p_int has the default value 0
173 // no change is made to the template's content, but only to the default value of p_int
174 field2 := "C string"
175}
176
177template MyRecordType MyTemplate14(integer p_int := -) modifies MyTemplate13 := {
178 // p_int inherits the default value 0 from its parent MyTemplate13
179 field2 := "D string"
180}
181
182template MyRecordType MyTemplate15(integer p_int := -) modifies MyTemplate14 := {
183 // p_int inherits the default value 0 from MyTemplate13 via MyTemplate14
184 field2 := "E string"
185}
186
187// With template parameters.
188
189template MyRecordType TMyTemplate11(template integer p_int := 5) := {
190 field1 := p_int,
191 field2 := "A string",
192 field3 := true
193}
194
195template MyRecordType TMyTemplate12(template integer p_int) modifies TMyTemplate11 := {
196 // p_int had a default value in MyTemplate11 but has none in this template
197 field2 := "B string"
198}
199
200template MyRecordType TMyTemplate13(template integer p_int := 0) modifies TMyTemplate12 := {
201 // p_int has the default value 0
202 // no change is made to the template's content, but only to the default value of p_int
203 field2 := "C string"
204}
205
206template MyRecordType TMyTemplate14(template integer p_int := -) modifies TMyTemplate13 := {
207 // p_int inherits the default value 0 from its parent MyTemplate13
208 field2 := "D string"
209}
210
211template MyRecordType TMyTemplate15(template integer p_int := -) modifies TMyTemplate14 := {
212 // p_int inherits the default value 0 from MyTemplate13 via MyTemplate14
213 field2 := "E string"
214}
215
216testcase ETSI_CR5091() runs on CT
217{
218 template MyRecordType LMyTemplate11 := MyTemplate11()
219 template MyRecordType LMyTemplate12 := MyTemplate12(1)
220 template MyRecordType LMyTemplate13 := MyTemplate13()
221 template MyRecordType LMyTemplate14 := MyTemplate14()
222 template MyRecordType LMyTemplate15 := MyTemplate15()
223 template MyRecordType LTMyTemplate11 := TMyTemplate11()
224 template MyRecordType LTMyTemplate12 := TMyTemplate12(1)
225 template MyRecordType LTMyTemplate13 := TMyTemplate13()
226 template MyRecordType LTMyTemplate14 := TMyTemplate14()
227 template MyRecordType LTMyTemplate15 := TMyTemplate15()
228 if (valueof(LMyTemplate11.field1) == 5) { setverdict(pass) } else { setverdict(fail) }
229 if (valueof(LMyTemplate12.field1) == 1) { setverdict(pass) } else { setverdict(fail) }
230 if (valueof(LMyTemplate13.field1) == 0) { setverdict(pass) } else { setverdict(fail) }
231 if (valueof(LMyTemplate14.field1) == 0) { setverdict(pass) } else { setverdict(fail) }
232 if (valueof(LMyTemplate15.field1) == 0) { setverdict(pass) } else { setverdict(fail) }
233 if (valueof(LTMyTemplate11.field1) == 5) { setverdict(pass) } else { setverdict(fail) }
234 if (valueof(LTMyTemplate12.field1) == 1) { setverdict(pass) } else { setverdict(fail) }
235 if (valueof(LTMyTemplate13.field1) == 0) { setverdict(pass) } else { setverdict(fail) }
236 if (valueof(LTMyTemplate14.field1) == 0) { setverdict(pass) } else { setverdict(fail) }
237 if (valueof(LTMyTemplate15.field1) == 0) { setverdict(pass) } else { setverdict(fail) }
238 if (match({ 5, "A string", true }, MyTemplate11())) { setverdict(pass) } else { setverdict(fail) }
239 if (match({ 1, "B string", true }, MyTemplate12(1))) { setverdict(pass) } else { setverdict(fail) }
240 if (match({ 0, "C string", true }, MyTemplate13())) { setverdict(pass) } else { setverdict(fail) }
241 if (match({ 0, "D string", true }, MyTemplate14())) { setverdict(pass) } else { setverdict(fail) }
242 if (match({ 0, "E string", true }, MyTemplate15())) { setverdict(pass) } else { setverdict(fail) }
243 if (match({ 5, "A string", true }, TMyTemplate11())) { setverdict(pass) } else { setverdict(fail) }
244 if (match({ 1, "B string", true }, TMyTemplate12(1))) { setverdict(pass) } else { setverdict(fail) }
245 if (match({ 0, "C string", true }, TMyTemplate13())) { setverdict(pass) } else { setverdict(fail) }
246 if (match({ 0, "D string", true }, TMyTemplate14())) { setverdict(pass) } else { setverdict(fail) }
247 if (match({ 0, "E string", true }, TMyTemplate15())) { setverdict(pass) } else { setverdict(fail) }
248}
249
250testcase HO10136_sideeffect() runs on CT
251// A side-effect of the first attempt to fix HO10136 caused the compiler
252// to generate C++ code that could not be compiled.
253{
254 template integer v_timeUnit := 60;
255
256 template R v_r modifies tbase := {
257 f1 := v_timeUnit // this line was miscompiled
258 }
259
260 if (valueof(v_r.f1) == 60) { setverdict(pass) } else { setverdict(pass) }
261}
262
263control {
264 execute( tc1() );
265 execute( tc2() );
266 execute( tc3() );
267 execute( ETSI_CR5091() );
268 execute( HO10136_sideeffect() );
269}
270
271}
This page took 0.037526 seconds and 5 git commands to generate.