Last sync 2016.04.01
[deliverable/titan.core.git] / regression_test / anytype / smallany.ttcn
1 /******************************************************************************
2 * Copyright (c) 2000-2016 Ericsson Telecom AB
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 * Contributors:
9 * Balasko, Jeno
10 * Kovacs, Ferenc
11 * Raduly, Csaba
12 * Szabados, Kristof
13 *
14 ******************************************************************************/
15 module smallany {
16 type component Small {}
17
18 type record of anytype anysequence;
19 type record address { integer i }
20 template address t_a := { 1 }
21
22 type integer pie(3, 14, 15, 9, 26);
23
24 type record of integer intlist_0;
25 type intlist_0 intlist;
26
27 template anytype anytemp := { intlist := { 1, 2, 3 } }
28 const anytype anyconst := { intlist := { 1, 2, 3 } }
29 template anytype anytemp2 := { level2 := { level1 := { 1, 2, 3 } } }
30 const anytype anyconst2 := { level2 := { level1 := { 1, 2, 3 } } }
31 type record level2 {
32 intlist level1
33 }
34
35 type record level3 {
36 level2 level_2 optional
37 }
38
39 function dummy(in level3 p3_in, out level3 p3_out, inout level3 p3_inout)
40 {
41 var level3 v_l3;
42 v_l3.level_2.level1[0] := 17;
43
44 var integer a := 42;
45 p3_out .level_2.level1[0] := a;
46 p3_in .level_2.level1[0] := a;
47 p3_inout.level_2.level1[0] := a;
48 }
49 // These two functions are "compile-only"
50 function dummy_template(in template level3 p3_in, out template level3 p3_out, inout template level3 p3_inout)
51 {
52 var template level3 v_l3;
53 v_l3.level_2.level1[0] := 17;
54
55 var integer a := 42;
56 var template integer b;
57 p3_out .level_2.level1[a] := a;
58 p3_in .level_2.level1[a+1] := a;
59 p3_inout.level_2.level1[-a] := a; // it would be nice to flag this indexing as an error (a is still 42, even though it's not a const)
60
61 b := p3_out .level_2.level1[a];
62 b := p3_in .level_2.level1[a+1];
63 b := p3_inout.level_2.level1[-a]; // if a is const, this _is_ flagged as error
64
65 }
66
67 function fval(in anytype any_in, out anytype any_out) return anytype
68 {
69 any_out := any_in;
70 var integer local := any_in.anysequence[3].anysequence[0].integer;
71 if (local == 13) { setverdict(pass); }
72 else { setverdict(fail); }
73
74 var level3 l3 := { level_2 := anyconst2.level2 }
75 var level3 l4;
76 l4 := { level_2 := anyconst2.level2 }
77 if (l3 == l4) { setverdict(pass); }
78 else { setverdict(fail); }
79 if (l3 == { level_2 := anyconst2.level2 }) { setverdict(pass); }
80 else { setverdict(fail); }
81 return any_out;
82 }
83
84 function ftmpl(in template anytype anytempl_in, out template anytype anytempl_out) return template anytype
85 {
86 anytempl_out := anytempl_in;
87 if (ischosen(anytempl_in.intlist)) {
88 var template intlist local_template := anytempl_in.intlist;
89 if( match(valueof(anytemp.intlist), local_template) ) { setverdict(pass); }
90 else { setverdict(fail); }
91
92 local_template := anytempl_in.intlist; // assign, not init
93 }
94 else {
95 var template level3 l3 := { level_2 := anytempl_in.level2 }
96 var template level3 l4;
97 l4 := { level_2 := anytempl_in.level2 } // assign, not init
98 }
99 return anytempl_out;
100 }
101
102 testcase values() runs on Small
103 {
104 var anytype anyvar;
105 // partial init is not enough anymore, checks became stricter due to HL51459
106 anyvar.anysequence[0] := { integer := 0 }
107 anyvar.anysequence[1] := { integer := 1 }
108 anyvar.anysequence[2] := { integer := 2 }
109 anyvar.anysequence[3] := { anysequence := { { integer := 13 } } }
110 //anyvar.address.i := 3;
111 var anytype anyout;
112 var anytype anyret := fval(anyvar, anyout);
113
114 if (anyout == anyret) { setverdict(pass); }
115 else { setverdict(fail); }
116 }
117
118 testcase templates() runs on Small
119 {
120 var template anytype anytemplout;
121 var template anytype anytemplret := ftmpl(anytemp, anytemplout);
122
123 if (valueof(anytemplout) == valueof(anytemplret)) { setverdict(pass); }
124 else { setverdict(fail); }
125
126 anytemplret := ftmpl(anytemp2, anytemplout);
127 if (valueof(anytemplout) == valueof(anytemplret)) { setverdict(pass); }
128 else { setverdict(fail); }
129 }
130
131 control{
132 var anytype anyvar;
133 var template intlist myvtemplist := anytemp.intlist
134 template intlist mytemplist := anytemp.intlist // Needs "AT_" prefix.
135 template intlist mytemplist2 := anytemp2.level2.level1 // Needs "AT_" prefix on level2, but not leve1
136 anyvar.anysequence[3] := { anysequence := { } }
137 anyvar.address.i := 3;
138 //(interpreted as module.function) anyvar.pie(2);
139 var integer io := anyvar.address.i
140
141
142 template anytype t_aa := { integer := 3 };
143 // PredefinedType----------^^^^^^^
144 // StructFieldRef----------^^^^^^^
145 // FieldReference----------^^^^^^^
146 //--------------------------------------^----- SimpleSpec as TemplateBody
147 // FieldRefce:= TemplateBody
148 // FieldSpec------
149 // \-FieldSpecList--/
150 // \-TemplateBody---/
151
152 //template address t_ii := { pie(13) }
153
154 execute(values());
155 execute(templates());
156 }
157
158 }
159 with {
160 encode "XML"
161 extension "anytype anysequence,address,integer,intlist,level2"
162 /*syntax error belongs to function_test extension "anytype boolean,
163 integer,address,boolean intreg"*/
164 }
This page took 0.034606 seconds and 5 git commands to generate.