Last sync 2016.04.01
[deliverable/titan.core.git] / regression_test / functionSubref / TpardTemplateSubref.ttcn
CommitLineData
3abe9331 1/******************************************************************************
d44e3c4f 2 * Copyright (c) 2000-2016 Ericsson Telecom AB
3abe9331 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 * Baranyi, Botond
11 *
3abe9331 12 ******************************************************************************/
13
14// This module contains tests for using subreferences (field names and array indexes) on
15// parameterized templates.
16module TpardTemplateSubref {
17
18import from TfunctionSubref all;
19
20/* * * * Parameterized templates * * * */
21template Rec t_pard_rec(in template integer p_num, in template charstring p_str) :=
22 { num := p_num, str := p_str };
23
24template RoI t_pard_roi(in integer p_init, in integer p_mul) :=
25 { p_init, p_init * p_mul, p_init * p_mul * p_mul };
26
27template Uni t_pard_uni(in template octetstring p_val) :=
28 { os := p_val };
29
30template Arr t_pard_arr(in template Arr p_val) :=
31 { p_val[3], p_val[2], p_val[1], p_val[0] };
32
33template Complex t_pard_complex(in template Rec p_rec, in template RoI p_roi) :=
34 { rec := p_rec, roi := p_roi, unis := { { os := t_os }, { i := c_init } } };
35
36/* * * * Constants and templates * * * */
37template integer t_int := 10;
38template charstring t_cs := ? length(1..4);
39const integer c_init := 6;
40const integer c_mul := 2;
41template octetstring t_os := ('00'O, '11'O, '22'O, '33'O);
42
43/* * * * Helper function * * * */
44function f_test_pard_temp(in template charstring p1, in template integer p2,
45 in template octetstring p3, in template octetstring p4)
46{
47 if (log2str(p1) == log2str(t_cs)) { setverdict(pass); }
48 else { setverdict(fail, "Expected: ", t_cs, ", got: ", p1); }
49 if (log2str(p2) == log2str(c_init)) { setverdict(pass); }
50 else { setverdict(fail, "Expected: ", c_init, ", got: ", p2); }
51 if (log2str(p3) == log2str(t_os)) { setverdict(pass); }
52 else { setverdict(fail, "Expected: ", t_os, ", got: ", p3); }
53 if (log2str(p4) == log2str(t_arr[1])) { setverdict(pass); }
54 else { setverdict(fail, "Expected: ", t_arr[1], ", got: ", p4); }
55}
56
57/* * * * Test cases * * * */
58testcase tc_pard_temp_var_assign() runs on CT
59{
60 var template charstring vt1 := t_pard_rec(t_int, t_cs).str;
61 var template integer vt2 := t_pard_roi(c_init, c_mul)[0];
62 var template octetstring vt3 := t_pard_uni(t_os).os;
63 var template octetstring vt4 := t_pard_arr(t_arr)[3];
64 if (log2str(vt1) == log2str(t_cs)) { setverdict(pass); }
65 else { setverdict(fail, "Expected: ", t_cs, ", got: ", vt1); }
66 if (log2str(vt2) == log2str(c_init)) { setverdict(pass); }
67 else { setverdict(fail, "Expected: ", c_init, ", got: ", vt2); }
68 if (log2str(vt3) == log2str(t_os)) { setverdict(pass); }
69 else { setverdict(fail, "Expected: ", t_os, ", got: ", vt3); }
70 if (log2str(vt4) == log2str(t_arr[0])) { setverdict(pass); }
71 else { setverdict(fail, "Expected: ", t_arr[0], ", got: ", vt4); }
72}
73
74testcase tc_pard_temp_match() runs on CT
75{
76 var charstring v_good1 := "rT.8";
77 var integer v_good2 := 12;
78 var octetstring v_good3 := '22'O;
79 var octetstring v_good4 := '12EF'O;
80 var integer v_bad1 := 331;
81 var integer v_bad2 := 7;
82 var octetstring v_bad3 := '44'O;
83 var octetstring v_bad4 := 'ABCDEF'O;
84 if (match(v_good1, t_pard_rec(t_int, t_cs).str)) { setverdict(pass); }
85 else { setverdict(fail, "Expected ", v_good1, " to match ", t_pard_rec(t_int, t_cs).str); }
86 if (match(v_good2, t_pard_roi(c_init, c_mul)[1])) { setverdict(pass); }
87 else { setverdict(fail, "Expected ", v_good2, " to match ", t_pard_roi(c_init, c_mul)[1]); }
88 if (match(v_good3, t_pard_uni(t_os).os)) { setverdict(pass); }
89 else { setverdict(fail, "Expected ", v_good3, " to match ", t_pard_uni(t_os).os); }
90 if (match(v_good4, t_pard_arr(t_arr)[3])) { setverdict(pass); }
91 else { setverdict(fail, "Expected ", v_good4, " to match ", t_pard_arr(t_arr)[3]); }
92 if (not match(v_bad1, t_pard_rec(t_int, t_cs).num)) { setverdict(pass); }
93 else { setverdict(fail, "Expected ", v_bad1, " not to match ", t_pard_rec(t_int, t_cs).num); }
94 if (not match(v_bad2, t_pard_roi(c_init, c_mul)[2])) { setverdict(pass); }
95 else { setverdict(fail, "Expected ", v_bad2, " not to match ", t_pard_roi(c_init, c_mul)[2]); }
96 if (not match(v_bad3, t_pard_uni(t_os).os)) { setverdict(pass); }
97 else { setverdict(fail, "Expected ", v_bad3, " not to match ", t_pard_uni(t_os).os); }
98 if (not match(v_bad4, t_pard_arr(t_arr)[1])) { setverdict(pass); }
99 else { setverdict(fail, "Expected ", v_bad4, " not to match ", t_pard_arr(t_arr)[1]); }
100}
101
102testcase tc_pard_temp_value() runs on CT
103{
104 if (isvalue(t_pard_rec(t_int, t_cs).num)) { setverdict(pass); }
105 else { setverdict(fail, "Expected ", t_pard_rec(t_int, t_cs).num, " to be a value."); }
106 if (isvalue(t_pard_roi(c_init, c_mul)[1])) { setverdict(pass); }
107 else { setverdict(fail, "Expected ", t_pard_roi(c_init, c_mul)[1], " to be a value."); }
108 if (not isvalue(t_pard_uni(t_os).os)) { setverdict(pass); }
109 else { setverdict(fail, "Expected ", t_pard_uni(t_os).os, " to not be a value."); }
110 if (isvalue(t_pard_arr(t_arr)[0])) { setverdict(pass); }
111 else { setverdict(fail, "Expected ", t_pard_arr(t_arr)[0], " to be a value."); }
112 if (valueof(t_pard_rec(t_int, t_cs).num) == valueof(t_int)) { setverdict(pass); }
113 else { setverdict(fail, "Expected: ", t_int, ", got: ", t_pard_rec(t_int, t_cs).num); }
114 if (valueof(t_pard_roi(c_init, c_mul)[0]) == c_init) { setverdict(pass); }
115 else { setverdict(fail, "Expected: ", c_init, ", got: ", t_pard_roi(c_init, c_mul)[0]); }
116 if (valueof(t_pard_arr(t_arr)[1]) == valueof(t_arr[2])) { setverdict(pass); }
117 else { setverdict(fail, "Expected: ", t_arr[2], ", got: ", t_pard_arr(t_arr)[1]); }
118}
119
120testcase tc_pard_temp_structure() runs on CT
121{
122 var template Rec rec1 := { num := t_pard_rec(t_int, t_cs).num, str := t_pard_rec(t_int, t_cs).str };
123 var template Rec rec1_e := { num := t_int, str := t_cs };
124 var template Rec rec2 := { t_pard_roi(c_init, c_mul)[1], "abc" };
125 var template Rec rec2_e := { c_init * c_mul, "abc" };
126 var template RoI roi := { t_pard_roi(c_init, c_mul)[2], (0..infinity) };
127 var template RoI roi_e := { c_init * c_mul * c_mul, (0..infinity) };
128 var template Uni uni := { os := t_pard_uni(t_os).os };
129 var template Uni uni_e := { os := t_os };
130 var template Arr arr := { [0] := t_pard_arr(t_arr)[3], [1] := t_pard_arr(t_arr)[2],
131 [2] := t_pard_arr(t_arr)[1], [3] := t_pard_arr(t_arr)[0] }; // == t_arr
132 if (log2str(rec1) == log2str(rec1_e)) { setverdict(pass); }
133 else { setverdict(fail, "Expected: ", rec1_e, ", got: ", rec1); }
134 if (log2str(rec2) == log2str(rec2_e)) { setverdict(pass); }
135 else { setverdict(fail, "Expected: ", rec2_e, ", got: ", rec2); }
136 if (log2str(roi) == log2str(roi_e)) { setverdict(pass); }
137 else { setverdict(fail, "Expected: ", roi_e, ", got: ", roi); }
138 if (log2str(uni) == log2str(uni_e)) { setverdict(pass); }
139 else { setverdict(fail, "Expected: ", uni_e, ", got: ", uni); }
140 if (log2str(arr) == log2str(t_arr)) { setverdict(pass); }
141 else { setverdict(fail, "Expected: ", t_arr, ", got: ", arr); }
142}
143
144testcase tc_pard_temp_parameter() runs on CT
145{
146 f_test_pard_temp(t_pard_rec(t_int, t_cs).str, t_pard_roi(c_init, c_mul)[0],
147 t_pard_uni(t_os).os, t_pard_arr(t_arr)[2]);
148}
149
150testcase tc_pard_temp_send_receive() runs on CT
151{
152 connect(mtc:pt, mtc:pt);
153 pt.send(t_pard_rec(t_int, t_cs).num);
154 pt.send(t_pard_roi(c_init, c_mul)[1]);
155 pt.send('11'O);
156 pt.send(t_pard_arr(t_arr)[0]);
157 var default def := activate(as_ct());
158 var integer bad_int;
159 var octetstring bad_os;
160 t.start(1.0);
161 alt {
162 [] pt.receive(t_pard_rec(t_int, t_cs).num) { setverdict(pass); }
163 [] pt.receive(integer:?) -> value bad_int
164 { setverdict(fail, "Expected: ", t_pard_rec(t_int, t_cs).num, ", got: ", bad_int); }
165 }
166 alt {
167 [] pt.receive(t_pard_roi(c_init, c_mul)[1]) { setverdict(pass); }
168 [] pt.receive(integer:?) -> value bad_int
169 { setverdict(fail, "Expected: ", t_pard_roi(c_init, c_mul)[1], ", got: ", bad_int); }
170 }
171 alt {
172 [] pt.receive(t_pard_uni(t_os).os) { setverdict(pass); }
173 [] pt.receive(octetstring:?) -> value bad_os
174 { setverdict(fail, "Expected: ", t_pard_uni(t_os).os, ", got: ", bad_os); }
175 }
176 alt {
177 [] pt.receive(t_pard_arr(t_arr)[0]) { setverdict(pass); }
178 [] pt.receive(octetstring:?) -> value bad_os
179 { setverdict(fail, "Expected: ", t_pard_arr(t_arr)[0], ", got: ", bad_os); }
180 }
181 deactivate(def);
182}
183
184testcase tc_pard_temp_complex() runs on CT
185{
186 var template Rec rec := { t_int, t_cs };
187 var template RoI roi := { 1, 2, 3 };
188 var template RoI roi_res := { t_pard_complex(rec, roi).rec.num, t_pard_complex(rec, roi).roi[2],
189 t_pard_complex(rec, roi).unis[1].i };
190 var template RoI roi_res_e := { rec.num, roi[2], c_init };
191 if (log2str(roi_res) == log2str(roi_res_e)) { setverdict(pass); }
192 else { setverdict(fail, "Expected: ", roi_res_e, ", got: ", roi_res); }
193 if (match('00'O, t_pard_complex(rec, {}).unis[0].os)) { setverdict(pass); }
194 else { setverdict(fail, "Expected '00'O to match ", t_pard_complex(rec, {}).unis[0].os); }
195 if (isvalue(t_pard_complex(t_pard_rec(t_int, t_cs), t_pard_roi(c_init, c_mul)).roi[2])) { setverdict(pass); }
196 else { setverdict(fail, "Expected ", t_pard_complex(t_pard_rec(t_int, t_cs), t_pard_roi(c_init, c_mul)).roi[2], " to be a value"); }
197}
198
199/* * * * Control part * * * */
200control {
201 execute(tc_pard_temp_var_assign());
202 execute(tc_pard_temp_match());
203 execute(tc_pard_temp_value());
204 execute(tc_pard_temp_structure());
205 execute(tc_pard_temp_parameter());
206 execute(tc_pard_temp_send_receive());
207 execute(tc_pard_temp_complex());
208}
209
210}
This page took 0.048302 seconds and 5 git commands to generate.