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. |
16 | module TpardTemplateSubref { |
17 | |
18 | import from TfunctionSubref all; |
19 | |
20 | /* * * * Parameterized templates * * * */ |
21 | template Rec t_pard_rec(in template integer p_num, in template charstring p_str) := |
22 | { num := p_num, str := p_str }; |
23 | |
24 | template 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 | |
27 | template Uni t_pard_uni(in template octetstring p_val) := |
28 | { os := p_val }; |
29 | |
30 | template Arr t_pard_arr(in template Arr p_val) := |
31 | { p_val[3], p_val[2], p_val[1], p_val[0] }; |
32 | |
33 | template 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 * * * */ |
37 | template integer t_int := 10; |
38 | template charstring t_cs := ? length(1..4); |
39 | const integer c_init := 6; |
40 | const integer c_mul := 2; |
41 | template octetstring t_os := ('00'O, '11'O, '22'O, '33'O); |
42 | |
43 | /* * * * Helper function * * * */ |
44 | function 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 * * * */ |
58 | testcase 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 | |
74 | testcase 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 | |
102 | testcase 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 | |
120 | testcase 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 | |
144 | testcase 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 | |
150 | testcase 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 | |
184 | testcase 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 * * * */ |
200 | control { |
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 | } |