Commit | Line | Data |
---|---|---|
970ed795 | 1 | /****************************************************************************** |
3abe9331 | 2 | * Copyright (c) 2000-2015 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 | |
7 | ******************************************************************************/ | |
8 | module Txerobjclass | |
9 | { | |
10 | modulepar boolean Txerobjclass_verbose := false; | |
11 | #define verbose Txerobjclass_verbose | |
12 | ||
13 | #include "../macros.ttcnin" | |
14 | ||
15 | import from ObjectClass all; | |
16 | import from ObjectClassWithSyntax all; | |
17 | import from AsnValues all; | |
18 | ||
19 | type component Tobjclass {} | |
20 | ||
21 | external function flatten(inout universal charstring par) ; | |
22 | ||
23 | const charstring add_str := | |
24 | "<MatOp>\n" & | |
25 | "\t<op>add</op>\n" & | |
26 | "\t<arg>\n" & | |
27 | "\t\t<TwoMat>\n" & | |
28 | "\t\t\t<left>\n" & | |
29 | "\t\t\t\t<SEQUENCE_OF>\n" & | |
30 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
31 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
32 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
33 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
34 | "\t\t\t\t</SEQUENCE_OF>\n" & | |
35 | "\t\t\t\t<SEQUENCE_OF>\n" & | |
36 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
37 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
38 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
39 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
40 | "\t\t\t\t</SEQUENCE_OF>\n" & | |
41 | "\t\t\t\t<SEQUENCE_OF>\n" & | |
42 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
43 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
44 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
45 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
46 | "\t\t\t\t</SEQUENCE_OF>\n" & | |
47 | "\t\t\t\t<SEQUENCE_OF>\n" & | |
48 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
49 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
50 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
51 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
52 | "\t\t\t\t</SEQUENCE_OF>\n" & | |
53 | "\t\t\t</left>\n" & | |
54 | "\t\t\t<right>\n" & | |
55 | "\t\t\t\t<SEQUENCE_OF>\n" & | |
56 | "\t\t\t\t\t<INTEGER>3</INTEGER>\n" & | |
57 | "\t\t\t\t\t<INTEGER>1</INTEGER>\n" & | |
58 | "\t\t\t\t\t<INTEGER>4</INTEGER>\n" & | |
59 | "\t\t\t\t\t<INTEGER>1</INTEGER>\n" & | |
60 | "\t\t\t\t</SEQUENCE_OF>\n" & | |
61 | "\t\t\t\t<SEQUENCE_OF>\n" & | |
62 | "\t\t\t\t\t<INTEGER>5</INTEGER>\n" & | |
63 | "\t\t\t\t\t<INTEGER>9</INTEGER>\n" & | |
64 | "\t\t\t\t\t<INTEGER>2</INTEGER>\n" & | |
65 | "\t\t\t\t\t<INTEGER>6</INTEGER>\n" & | |
66 | "\t\t\t\t</SEQUENCE_OF>\n" & | |
67 | "\t\t\t\t<SEQUENCE_OF>\n" & | |
68 | "\t\t\t\t\t<INTEGER>5</INTEGER>\n" & | |
69 | "\t\t\t\t\t<INTEGER>3</INTEGER>\n" & | |
70 | "\t\t\t\t\t<INTEGER>5</INTEGER>\n" & | |
71 | "\t\t\t\t\t<INTEGER>8</INTEGER>\n" & | |
72 | "\t\t\t\t</SEQUENCE_OF>\n" & | |
73 | "\t\t\t\t<SEQUENCE_OF>\n" & | |
74 | "\t\t\t\t\t<INTEGER>9</INTEGER>\n" & | |
75 | "\t\t\t\t\t<INTEGER>7</INTEGER>\n" & | |
76 | "\t\t\t\t\t<INTEGER>9</INTEGER>\n" & | |
77 | "\t\t\t\t\t<INTEGER>3</INTEGER>\n" & | |
78 | "\t\t\t\t</SEQUENCE_OF>\n" & | |
79 | "\t\t\t</right>\n" & | |
80 | "\t\t</TwoMat>\n" & | |
81 | "\t</arg>\n" & | |
82 | "\t<rez>\n" & | |
83 | "\t\t<Matrix>\n" & | |
84 | "\t\t\t<SEQUENCE_OF>\n" & | |
85 | "\t\t\t\t<INTEGER>3</INTEGER>\n" & | |
86 | "\t\t\t\t<INTEGER>1</INTEGER>\n" & | |
87 | "\t\t\t\t<INTEGER>4</INTEGER>\n" & | |
88 | "\t\t\t\t<INTEGER>1</INTEGER>\n" & | |
89 | "\t\t\t</SEQUENCE_OF>\n" & | |
90 | "\t\t\t<SEQUENCE_OF>\n" & | |
91 | "\t\t\t\t<INTEGER>5</INTEGER>\n" & | |
92 | "\t\t\t\t<INTEGER>9</INTEGER>\n" & | |
93 | "\t\t\t\t<INTEGER>2</INTEGER>\n" & | |
94 | "\t\t\t\t<INTEGER>6</INTEGER>\n" & | |
95 | "\t\t\t</SEQUENCE_OF>\n" & | |
96 | "\t\t\t<SEQUENCE_OF>\n" & | |
97 | "\t\t\t\t<INTEGER>5</INTEGER>\n" & | |
98 | "\t\t\t\t<INTEGER>3</INTEGER>\n" & | |
99 | "\t\t\t\t<INTEGER>5</INTEGER>\n" & | |
100 | "\t\t\t\t<INTEGER>8</INTEGER>\n" & | |
101 | "\t\t\t</SEQUENCE_OF>\n" & | |
102 | "\t\t\t<SEQUENCE_OF>\n" & | |
103 | "\t\t\t\t<INTEGER>9</INTEGER>\n" & | |
104 | "\t\t\t\t<INTEGER>7</INTEGER>\n" & | |
105 | "\t\t\t\t<INTEGER>9</INTEGER>\n" & | |
106 | "\t\t\t\t<INTEGER>3</INTEGER>\n" & | |
107 | "\t\t\t</SEQUENCE_OF>\n" & | |
108 | "\t\t</Matrix>\n" & | |
109 | "\t</rez>\n" & | |
110 | "</MatOp>\n" & | |
111 | "\n"; | |
112 | ||
113 | const charstring add_str_ws := | |
114 | "<MatOpWS>\n" & | |
115 | "\t<op>add</op>\n" & | |
116 | "\t<arg>\n" & | |
117 | "\t\t<TwoMatWS>\n" & | |
118 | "\t\t\t<left>\n" & | |
119 | "\t\t\t\t<SEQUENCE_OF>\n" & | |
120 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
121 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
122 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
123 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
124 | "\t\t\t\t</SEQUENCE_OF>\n" & | |
125 | "\t\t\t\t<SEQUENCE_OF>\n" & | |
126 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
127 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
128 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
129 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
130 | "\t\t\t\t</SEQUENCE_OF>\n" & | |
131 | "\t\t\t\t<SEQUENCE_OF>\n" & | |
132 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
133 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
134 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
135 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
136 | "\t\t\t\t</SEQUENCE_OF>\n" & | |
137 | "\t\t\t\t<SEQUENCE_OF>\n" & | |
138 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
139 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
140 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
141 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
142 | "\t\t\t\t</SEQUENCE_OF>\n" & | |
143 | "\t\t\t</left>\n" & | |
144 | "\t\t\t<right>\n" & | |
145 | "\t\t\t\t<SEQUENCE_OF>\n" & | |
146 | "\t\t\t\t\t<INTEGER>3</INTEGER>\n" & | |
147 | "\t\t\t\t\t<INTEGER>1</INTEGER>\n" & | |
148 | "\t\t\t\t\t<INTEGER>4</INTEGER>\n" & | |
149 | "\t\t\t\t\t<INTEGER>1</INTEGER>\n" & | |
150 | "\t\t\t\t</SEQUENCE_OF>\n" & | |
151 | "\t\t\t\t<SEQUENCE_OF>\n" & | |
152 | "\t\t\t\t\t<INTEGER>5</INTEGER>\n" & | |
153 | "\t\t\t\t\t<INTEGER>9</INTEGER>\n" & | |
154 | "\t\t\t\t\t<INTEGER>2</INTEGER>\n" & | |
155 | "\t\t\t\t\t<INTEGER>6</INTEGER>\n" & | |
156 | "\t\t\t\t</SEQUENCE_OF>\n" & | |
157 | "\t\t\t\t<SEQUENCE_OF>\n" & | |
158 | "\t\t\t\t\t<INTEGER>5</INTEGER>\n" & | |
159 | "\t\t\t\t\t<INTEGER>3</INTEGER>\n" & | |
160 | "\t\t\t\t\t<INTEGER>5</INTEGER>\n" & | |
161 | "\t\t\t\t\t<INTEGER>8</INTEGER>\n" & | |
162 | "\t\t\t\t</SEQUENCE_OF>\n" & | |
163 | "\t\t\t\t<SEQUENCE_OF>\n" & | |
164 | "\t\t\t\t\t<INTEGER>9</INTEGER>\n" & | |
165 | "\t\t\t\t\t<INTEGER>7</INTEGER>\n" & | |
166 | "\t\t\t\t\t<INTEGER>9</INTEGER>\n" & | |
167 | "\t\t\t\t\t<INTEGER>3</INTEGER>\n" & | |
168 | "\t\t\t\t</SEQUENCE_OF>\n" & | |
169 | "\t\t\t</right>\n" & | |
170 | "\t\t</TwoMatWS>\n" & | |
171 | "\t</arg>\n" & | |
172 | "\t<rez>\n" & | |
173 | "\t\t<MatrixWS>\n" & | |
174 | "\t\t\t<SEQUENCE_OF>\n" & | |
175 | "\t\t\t\t<INTEGER>3</INTEGER>\n" & | |
176 | "\t\t\t\t<INTEGER>1</INTEGER>\n" & | |
177 | "\t\t\t\t<INTEGER>4</INTEGER>\n" & | |
178 | "\t\t\t\t<INTEGER>1</INTEGER>\n" & | |
179 | "\t\t\t</SEQUENCE_OF>\n" & | |
180 | "\t\t\t<SEQUENCE_OF>\n" & | |
181 | "\t\t\t\t<INTEGER>5</INTEGER>\n" & | |
182 | "\t\t\t\t<INTEGER>9</INTEGER>\n" & | |
183 | "\t\t\t\t<INTEGER>2</INTEGER>\n" & | |
184 | "\t\t\t\t<INTEGER>6</INTEGER>\n" & | |
185 | "\t\t\t</SEQUENCE_OF>\n" & | |
186 | "\t\t\t<SEQUENCE_OF>\n" & | |
187 | "\t\t\t\t<INTEGER>5</INTEGER>\n" & | |
188 | "\t\t\t\t<INTEGER>3</INTEGER>\n" & | |
189 | "\t\t\t\t<INTEGER>5</INTEGER>\n" & | |
190 | "\t\t\t\t<INTEGER>8</INTEGER>\n" & | |
191 | "\t\t\t</SEQUENCE_OF>\n" & | |
192 | "\t\t\t<SEQUENCE_OF>\n" & | |
193 | "\t\t\t\t<INTEGER>9</INTEGER>\n" & | |
194 | "\t\t\t\t<INTEGER>7</INTEGER>\n" & | |
195 | "\t\t\t\t<INTEGER>9</INTEGER>\n" & | |
196 | "\t\t\t\t<INTEGER>3</INTEGER>\n" & | |
197 | "\t\t\t</SEQUENCE_OF>\n" & | |
198 | "\t\t</MatrixWS>\n" & | |
199 | "\t</rez>\n" & | |
200 | "</MatOpWS>\n" & | |
201 | "\n"; | |
202 | ||
203 | const charstring sub_str := | |
204 | "<MatOp>\n" & | |
205 | "\t<op>subtract</op>\n" & | |
206 | "\t<arg>\n" & | |
207 | "\t\t<TwoMat>\n" & | |
208 | "\t\t\t<left>\n" & | |
209 | "\t\t\t\t<SEQUENCE_OF>\n" & | |
210 | "\t\t\t\t\t<INTEGER>1</INTEGER>\n" & | |
211 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
212 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
213 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
214 | "\t\t\t\t</SEQUENCE_OF>\n" & | |
215 | "\t\t\t\t<SEQUENCE_OF>\n" & | |
216 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
217 | "\t\t\t\t\t<INTEGER>1</INTEGER>\n" & | |
218 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
219 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
220 | "\t\t\t\t</SEQUENCE_OF>\n" & | |
221 | "\t\t\t\t<SEQUENCE_OF>\n" & | |
222 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
223 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
224 | "\t\t\t\t\t<INTEGER>1</INTEGER>\n" & | |
225 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
226 | "\t\t\t\t</SEQUENCE_OF>\n" & | |
227 | "\t\t\t\t<SEQUENCE_OF>\n" & | |
228 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
229 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
230 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
231 | "\t\t\t\t\t<INTEGER>1</INTEGER>\n" & | |
232 | "\t\t\t\t</SEQUENCE_OF>\n" & | |
233 | "\t\t\t</left>\n" & | |
234 | "\t\t\t<right>\n" & | |
235 | "\t\t\t\t<SEQUENCE_OF>\n" & | |
236 | "\t\t\t\t\t<INTEGER>1</INTEGER>\n" & | |
237 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
238 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
239 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
240 | "\t\t\t\t</SEQUENCE_OF>\n" & | |
241 | "\t\t\t\t<SEQUENCE_OF>\n" & | |
242 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
243 | "\t\t\t\t\t<INTEGER>1</INTEGER>\n" & | |
244 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
245 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
246 | "\t\t\t\t</SEQUENCE_OF>\n" & | |
247 | "\t\t\t\t<SEQUENCE_OF>\n" & | |
248 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
249 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
250 | "\t\t\t\t\t<INTEGER>1</INTEGER>\n" & | |
251 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
252 | "\t\t\t\t</SEQUENCE_OF>\n" & | |
253 | "\t\t\t\t<SEQUENCE_OF>\n" & | |
254 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
255 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
256 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
257 | "\t\t\t\t\t<INTEGER>1</INTEGER>\n" & | |
258 | "\t\t\t\t</SEQUENCE_OF>\n" & | |
259 | "\t\t\t</right>\n" & | |
260 | "\t\t</TwoMat>\n" & | |
261 | "\t</arg>\n" & | |
262 | "\t<rez>\n" & | |
263 | "\t\t<Matrix>\n" & | |
264 | "\t\t\t<SEQUENCE_OF>\n" & | |
265 | "\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
266 | "\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
267 | "\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
268 | "\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
269 | "\t\t\t</SEQUENCE_OF>\n" & | |
270 | "\t\t\t<SEQUENCE_OF>\n" & | |
271 | "\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
272 | "\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
273 | "\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
274 | "\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
275 | "\t\t\t</SEQUENCE_OF>\n" & | |
276 | "\t\t\t<SEQUENCE_OF>\n" & | |
277 | "\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
278 | "\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
279 | "\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
280 | "\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
281 | "\t\t\t</SEQUENCE_OF>\n" & | |
282 | "\t\t\t<SEQUENCE_OF>\n" & | |
283 | "\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
284 | "\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
285 | "\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
286 | "\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
287 | "\t\t\t</SEQUENCE_OF>\n" & | |
288 | "\t\t</Matrix>\n" & | |
289 | "\t</rez>\n" & | |
290 | "</MatOp>\n" & | |
291 | "\n"; | |
292 | ||
293 | const charstring inv_str := | |
294 | "<MatOp>\n" & | |
295 | "\t<op>invert</op>\n" & | |
296 | "\t<arg>\n" & | |
297 | "\t\t<Matrix>\n" & | |
298 | "\t\t\t<SEQUENCE_OF>\n" & | |
299 | "\t\t\t\t<INTEGER>3</INTEGER>\n" & | |
300 | "\t\t\t\t<INTEGER>1</INTEGER>\n" & | |
301 | "\t\t\t\t<INTEGER>4</INTEGER>\n" & | |
302 | "\t\t\t\t<INTEGER>1</INTEGER>\n" & | |
303 | "\t\t\t</SEQUENCE_OF>\n" & | |
304 | "\t\t\t<SEQUENCE_OF>\n" & | |
305 | "\t\t\t\t<INTEGER>5</INTEGER>\n" & | |
306 | "\t\t\t\t<INTEGER>9</INTEGER>\n" & | |
307 | "\t\t\t\t<INTEGER>2</INTEGER>\n" & | |
308 | "\t\t\t\t<INTEGER>6</INTEGER>\n" & | |
309 | "\t\t\t</SEQUENCE_OF>\n" & | |
310 | "\t\t\t<SEQUENCE_OF>\n" & | |
311 | "\t\t\t\t<INTEGER>5</INTEGER>\n" & | |
312 | "\t\t\t\t<INTEGER>3</INTEGER>\n" & | |
313 | "\t\t\t\t<INTEGER>5</INTEGER>\n" & | |
314 | "\t\t\t\t<INTEGER>8</INTEGER>\n" & | |
315 | "\t\t\t</SEQUENCE_OF>\n" & | |
316 | "\t\t\t<SEQUENCE_OF>\n" & | |
317 | "\t\t\t\t<INTEGER>9</INTEGER>\n" & | |
318 | "\t\t\t\t<INTEGER>7</INTEGER>\n" & | |
319 | "\t\t\t\t<INTEGER>9</INTEGER>\n" & | |
320 | "\t\t\t\t<INTEGER>3</INTEGER>\n" & | |
321 | "\t\t\t</SEQUENCE_OF>\n" & | |
322 | "\t\t</Matrix>\n" & | |
323 | "\t</arg>\n" & | |
324 | "\t<rez>\n" & | |
325 | "\t\t<Matrix>\n" & | |
326 | "\t\t\t<SEQUENCE_OF>\n" & | |
327 | "\t\t\t\t<INTEGER>-467</INTEGER>\n" & | |
328 | "\t\t\t\t<INTEGER>-123</INTEGER>\n" & | |
329 | "\t\t\t\t<INTEGER>79</INTEGER>\n" & | |
330 | "\t\t\t\t<INTEGER>191</INTEGER>\n" & | |
331 | "\t\t\t</SEQUENCE_OF>\n" & | |
332 | "\t\t\t<SEQUENCE_OF>\n" & | |
333 | "\t\t\t\t<INTEGER>171</INTEGER>\n" & | |
334 | "\t\t\t\t<INTEGER>57</INTEGER>\n" & | |
335 | "\t\t\t\t<INTEGER>-39</INTEGER>\n" & | |
336 | "\t\t\t\t<INTEGER>-67</INTEGER>\n" & | |
337 | "\t\t\t</SEQUENCE_OF>\n" & | |
338 | "\t\t\t<SEQUENCE_OF>\n" & | |
339 | "\t\t\t\t<INTEGER>326</INTEGER>\n" & | |
340 | "\t\t\t\t<INTEGER>76</INTEGER>\n" & | |
341 | "\t\t\t\t<INTEGER>-52</INTEGER>\n" & | |
342 | "\t\t\t\t<INTEGER>-122</INTEGER>\n" & | |
343 | "\t\t\t</SEQUENCE_OF>\n" & | |
344 | "\t\t\t<SEQUENCE_OF>\n" & | |
345 | "\t\t\t\t<INTEGER>24</INTEGER>\n" & | |
346 | "\t\t\t\t<INTEGER>8</INTEGER>\n" & | |
347 | "\t\t\t\t<INTEGER>10</INTEGER>\n" & | |
348 | "\t\t\t\t<INTEGER>-18</INTEGER>\n" & | |
349 | "\t\t\t</SEQUENCE_OF>\n" & | |
350 | "\t\t</Matrix>\n" & | |
351 | "\t</rez>\n" & | |
352 | "</MatOp>\n" & | |
353 | "\n"; | |
354 | ||
355 | const charstring inv_str_ws := | |
356 | "<MatOpWS>\n" & | |
357 | "\t<op>invert</op>\n" & | |
358 | "\t<arg>\n" & | |
359 | "\t\t<MatrixWS>\n" & | |
360 | "\t\t\t<SEQUENCE_OF>\n" & | |
361 | "\t\t\t\t<INTEGER>3</INTEGER>\n" & | |
362 | "\t\t\t\t<INTEGER>1</INTEGER>\n" & | |
363 | "\t\t\t\t<INTEGER>4</INTEGER>\n" & | |
364 | "\t\t\t\t<INTEGER>1</INTEGER>\n" & | |
365 | "\t\t\t</SEQUENCE_OF>\n" & | |
366 | "\t\t\t<SEQUENCE_OF>\n" & | |
367 | "\t\t\t\t<INTEGER>5</INTEGER>\n" & | |
368 | "\t\t\t\t<INTEGER>9</INTEGER>\n" & | |
369 | "\t\t\t\t<INTEGER>2</INTEGER>\n" & | |
370 | "\t\t\t\t<INTEGER>6</INTEGER>\n" & | |
371 | "\t\t\t</SEQUENCE_OF>\n" & | |
372 | "\t\t\t<SEQUENCE_OF>\n" & | |
373 | "\t\t\t\t<INTEGER>5</INTEGER>\n" & | |
374 | "\t\t\t\t<INTEGER>3</INTEGER>\n" & | |
375 | "\t\t\t\t<INTEGER>5</INTEGER>\n" & | |
376 | "\t\t\t\t<INTEGER>8</INTEGER>\n" & | |
377 | "\t\t\t</SEQUENCE_OF>\n" & | |
378 | "\t\t\t<SEQUENCE_OF>\n" & | |
379 | "\t\t\t\t<INTEGER>9</INTEGER>\n" & | |
380 | "\t\t\t\t<INTEGER>7</INTEGER>\n" & | |
381 | "\t\t\t\t<INTEGER>9</INTEGER>\n" & | |
382 | "\t\t\t\t<INTEGER>3</INTEGER>\n" & | |
383 | "\t\t\t</SEQUENCE_OF>\n" & | |
384 | "\t\t</MatrixWS>\n" & | |
385 | "\t</arg>\n" & | |
386 | "\t<rez>\n" & | |
387 | "\t\t<MatrixWS>\n" & | |
388 | "\t\t\t<SEQUENCE_OF>\n" & | |
389 | "\t\t\t\t<INTEGER>-467</INTEGER>\n" & | |
390 | "\t\t\t\t<INTEGER>-123</INTEGER>\n" & | |
391 | "\t\t\t\t<INTEGER>79</INTEGER>\n" & | |
392 | "\t\t\t\t<INTEGER>191</INTEGER>\n" & | |
393 | "\t\t\t</SEQUENCE_OF>\n" & | |
394 | "\t\t\t<SEQUENCE_OF>\n" & | |
395 | "\t\t\t\t<INTEGER>171</INTEGER>\n" & | |
396 | "\t\t\t\t<INTEGER>57</INTEGER>\n" & | |
397 | "\t\t\t\t<INTEGER>-39</INTEGER>\n" & | |
398 | "\t\t\t\t<INTEGER>-67</INTEGER>\n" & | |
399 | "\t\t\t</SEQUENCE_OF>\n" & | |
400 | "\t\t\t<SEQUENCE_OF>\n" & | |
401 | "\t\t\t\t<INTEGER>326</INTEGER>\n" & | |
402 | "\t\t\t\t<INTEGER>76</INTEGER>\n" & | |
403 | "\t\t\t\t<INTEGER>-52</INTEGER>\n" & | |
404 | "\t\t\t\t<INTEGER>-122</INTEGER>\n" & | |
405 | "\t\t\t</SEQUENCE_OF>\n" & | |
406 | "\t\t\t<SEQUENCE_OF>\n" & | |
407 | "\t\t\t\t<INTEGER>24</INTEGER>\n" & | |
408 | "\t\t\t\t<INTEGER>8</INTEGER>\n" & | |
409 | "\t\t\t\t<INTEGER>10</INTEGER>\n" & | |
410 | "\t\t\t\t<INTEGER>-18</INTEGER>\n" & | |
411 | "\t\t\t</SEQUENCE_OF>\n" & | |
412 | "\t\t</MatrixWS>\n" & | |
413 | "\t</rez>\n" & | |
414 | "</MatOpWS>\n" & | |
415 | "\n"; | |
416 | ||
417 | ||
418 | DECLARE_XER_ENCODERS(ObjectClass.MatOp, matop); | |
419 | ||
420 | testcase encode_objclass() runs on Tobjclass | |
421 | { | |
422 | var universal charstring expected; | |
423 | ||
424 | expected := add_str; | |
425 | CHECK_METHOD(bxer_enc_matop, ObjectClass.addition, expected); | |
426 | flatten(expected); | |
427 | CHECK_METHOD(cxer_enc_matop, ObjectClass.addition, expected & lf); | |
428 | ||
429 | expected := inv_str; | |
430 | CHECK_METHOD(bxer_enc_matop, ObjectClass.inversion, expected); | |
431 | flatten(expected); | |
432 | CHECK_METHOD(cxer_enc_matop, ObjectClass.inversion, expected & lf); | |
433 | } | |
434 | ||
435 | testcase decode_objclass() runs on Tobjclass | |
436 | { | |
437 | var ObjectClass.MatOp expected; | |
438 | ||
439 | expected := ObjectClass.addition; | |
440 | CHECK_DECODE2(matop, add_str, ObjectClass.MatOp, expected); | |
441 | ||
442 | expected := ObjectClass.inversion; | |
443 | CHECK_DECODE2(matop, inv_str, ObjectClass.MatOp, expected); | |
444 | } | |
445 | ||
446 | ||
447 | DECLARE_XER_ENCODERS(ObjectClassWithSyntax.MatOpWS, matopws); | |
448 | ||
449 | testcase encode_objclass_syntax() runs on Tobjclass | |
450 | { | |
451 | var universal charstring expected; | |
452 | ||
453 | expected := add_str_ws; | |
454 | CHECK_METHOD(bxer_enc_matopws, ObjectClassWithSyntax.additionWS, expected); | |
455 | flatten(expected); | |
456 | CHECK_METHOD(cxer_enc_matopws, ObjectClassWithSyntax.additionWS, expected & lf); | |
457 | ||
458 | expected := inv_str_ws; | |
459 | CHECK_METHOD(bxer_enc_matopws, ObjectClassWithSyntax.inversionWS, expected); | |
460 | flatten(expected); | |
461 | CHECK_METHOD(cxer_enc_matopws, ObjectClassWithSyntax.inversionWS, expected & lf); | |
462 | } | |
463 | ||
464 | testcase decode_objclass_syntax() runs on Tobjclass | |
465 | { | |
466 | var ObjectClassWithSyntax.MatOpWS expected; | |
467 | ||
468 | expected := ObjectClassWithSyntax.additionWS; | |
469 | CHECK_DECODE2(matopws, add_str_ws, ObjectClassWithSyntax.MatOpWS, expected); | |
470 | ||
471 | expected := ObjectClassWithSyntax.inversionWS; | |
472 | CHECK_DECODE2(matopws, inv_str_ws, ObjectClassWithSyntax.MatOpWS, expected); | |
473 | } | |
474 | ||
475 | // hmstr stands for handmade-string, NOT hamster ! | |
476 | const charstring hmstr_mul := | |
477 | "<AMatOp>\n" & | |
478 | "\t<oph>mul</oph>\n" & | |
479 | "\t<argh>\n" & | |
480 | "\t\t<twoMat>\n" & | |
481 | "\t\t\t<left>\n" & | |
482 | "\t\t\t\t<SEQUENCE_OF>\n" & | |
483 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
484 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
485 | "\t\t\t\t</SEQUENCE_OF>\n" & | |
486 | "\t\t\t\t<SEQUENCE_OF>\n" & | |
487 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
488 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
489 | "\t\t\t\t</SEQUENCE_OF>\n" & | |
490 | "\t\t\t</left>\n" & | |
491 | "\t\t\t<right>\n" & | |
492 | "\t\t\t\t<SEQUENCE_OF>\n" & | |
493 | "\t\t\t\t\t<INTEGER>1</INTEGER>\n" & | |
494 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
495 | "\t\t\t\t</SEQUENCE_OF>\n" & | |
496 | "\t\t\t\t<SEQUENCE_OF>\n" & | |
497 | "\t\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
498 | "\t\t\t\t\t<INTEGER>1</INTEGER>\n" & | |
499 | "\t\t\t\t</SEQUENCE_OF>\n" & | |
500 | "\t\t\t</right>\n" & | |
501 | "\t\t</twoMat>\n" & | |
502 | "\t</argh>\n" & | |
503 | "\t<rezh>\n" & | |
504 | "\t\t<matrix>\n" & | |
505 | "\t\t\t<SEQUENCE_OF>\n" & | |
506 | "\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
507 | "\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
508 | "\t\t\t</SEQUENCE_OF>\n" & | |
509 | "\t\t\t<SEQUENCE_OF>\n" & | |
510 | "\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
511 | "\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
512 | "\t\t\t</SEQUENCE_OF>\n" & | |
513 | "\t\t</matrix>\n" & | |
514 | "\t</rezh>\n" & | |
515 | "</AMatOp>\n" & | |
516 | lf | |
517 | ||
518 | const charstring hmstr_inv := | |
519 | "<AMatOp>\n" & | |
520 | "\t<oph>inv</oph>\n" & | |
521 | "\t<argh>\n" & | |
522 | "\t\t<matrix>\n" & | |
523 | "\t\t\t<SEQUENCE_OF>\n" & | |
524 | "\t\t\t\t<INTEGER>1</INTEGER>\n" & | |
525 | "\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
526 | "\t\t\t</SEQUENCE_OF>\n" & | |
527 | "\t\t\t<SEQUENCE_OF>\n" & | |
528 | "\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
529 | "\t\t\t\t<INTEGER>1</INTEGER>\n" & | |
530 | "\t\t\t</SEQUENCE_OF>\n" & | |
531 | "\t\t</matrix>\n" & | |
532 | "\t</argh>\n" & | |
533 | "\t<rezh>\n" & | |
534 | "\t\t<matrix>\n" & | |
535 | "\t\t\t<SEQUENCE_OF>\n" & | |
536 | "\t\t\t\t<INTEGER>1</INTEGER>\n" & | |
537 | "\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
538 | "\t\t\t</SEQUENCE_OF>\n" & | |
539 | "\t\t\t<SEQUENCE_OF>\n" & | |
540 | "\t\t\t\t<INTEGER>0</INTEGER>\n" & | |
541 | "\t\t\t\t<INTEGER>1</INTEGER>\n" & | |
542 | "\t\t\t</SEQUENCE_OF>\n" & | |
543 | "\t\t</matrix>\n" & | |
544 | "\t</rezh>\n" & | |
545 | "</AMatOp>\n" & | |
546 | lf | |
547 | ||
548 | DECLARE_XER_ENCODERS(AMatOp, amatop); | |
549 | DECLARE_EXER_ENCODERS(AMatOp,amatop) | |
550 | DECLARE_XER_ENCODERS(ATwoMat, atwomat); | |
551 | DECLARE_EXER_ENCODERS(ATwoMat,atwomat) | |
552 | ||
553 | testcase encode_handmade() runs on Tobjclass | |
554 | { | |
555 | var universal charstring expected := hmstr_mul; | |
556 | CHECK_METHOD(bxer_enc_amatop, ObjectClassWithSyntax.matmul, expected); | |
557 | flatten(expected); | |
558 | CHECK_METHOD(cxer_enc_amatop, ObjectClassWithSyntax.matmul, expected & lf); | |
559 | ||
560 | expected := hmstr_inv; | |
561 | CHECK_METHOD(bxer_enc_amatop, ObjectClassWithSyntax.matinv, expected); | |
562 | flatten(expected); | |
563 | CHECK_METHOD(cxer_enc_amatop, ObjectClassWithSyntax.matinv, expected & lf); | |
564 | } | |
565 | ||
566 | const charstring a2mstr := | |
567 | "<ATwoMat>\n" & | |
568 | "\t<left>\n" & | |
569 | "\t\t<SEQUENCE_OF>\n" & | |
570 | "\t\t\t<INTEGER>0</INTEGER>\n" & | |
571 | "\t\t\t<INTEGER>0</INTEGER>\n" & | |
572 | "\t\t</SEQUENCE_OF>\n" & | |
573 | "\t\t<SEQUENCE_OF>\n" & | |
574 | "\t\t\t<INTEGER>0</INTEGER>\n" & | |
575 | "\t\t\t<INTEGER>0</INTEGER>\n" & | |
576 | "\t\t</SEQUENCE_OF>\n" & | |
577 | "\t</left>\n" & | |
578 | "\t<right>\n" & | |
579 | "\t\t<SEQUENCE_OF>\n" & | |
580 | "\t\t\t<INTEGER>1</INTEGER>\n" & | |
581 | "\t\t\t<INTEGER>0</INTEGER>\n" & | |
582 | "\t\t</SEQUENCE_OF>\n" & | |
583 | "\t\t<SEQUENCE_OF>\n" & | |
584 | "\t\t\t<INTEGER>0</INTEGER>\n" & | |
585 | "\t\t\t<INTEGER>1</INTEGER>\n" & | |
586 | "\t\t</SEQUENCE_OF>\n" & | |
587 | "\t</right>\n" & | |
588 | "</ATwoMat>\n" & | |
589 | lf; | |
590 | ||
591 | testcase decode_handmade() runs on Tobjclass | |
592 | { | |
593 | var ATwoMat a2m := { { {0,0}, {0,0} }, { {1,0}, {0,1} } } | |
594 | CHECK_DECODE2(atwomat, a2mstr, ATwoMat, a2m); | |
595 | // suffix, input, type, expected | |
596 | CHECK_DECODE2(amatop, hmstr_mul, AMatOp, ObjectClassWithSyntax.matmul); | |
597 | CHECK_DECODE2(amatop, hmstr_inv, AMatOp, ObjectClassWithSyntax.matinv); | |
598 | } | |
599 | ||
600 | control | |
601 | { | |
602 | execute(encode_handmade()); | |
603 | execute(decode_handmade()); | |
604 | ||
605 | execute(encode_objclass()); | |
606 | execute(decode_objclass()); | |
607 | ||
608 | execute(encode_objclass_syntax()); | |
609 | execute(decode_objclass_syntax()); | |
610 | } | |
611 | ||
612 | } |