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