source: trunk/Compiler/ModelicaFrontEnd/test/modelica/ExpandableConnectorArrays.mo @ 13019

Last change on this file since 13019 was 13019, checked in by Jesper Mattsson, 6 months ago

Removed TODO comment from expandable connector test that had already been fixed. (#5752)

File size: 46.5 KB
Line 
1/*
2    Copyright (C) 2019 Modelon AB
3
4    This program is free software: you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation, version 3 of the License.
7
8    This program is distributed in the hope that it will be useful,
9    but WITHOUT ANY WARRANTY; without even the implied warranty of
10    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11    GNU General Public License for more details.
12
13    You should have received a copy of the GNU General Public License
14    along with this program.  If not, see <http://www.gnu.org/licenses/>.
15*/
16
17within;
18
19package ExpandableConnectorArrays
20
21
22    model NoConnectionSingleCell
23        expandable connector EC
24        end EC;
25
26        EC ec1[1], ec2[1];
27    equation
28        connect(ec1, ec2);
29
30    annotation(__JModelica(UnitTesting(tests={
31        FlatteningTestCase(
32            name="NoConnectionSingleCell",
33            description="Expandable to expandable only, one cell each.",
34            flatModel="
35fclass ExpandableConnectorArrays.NoConnectionSingleCell
36end ExpandableConnectorArrays.NoConnectionSingleCell;
37")})));
38    end NoConnectionSingleCell;
39
40    model NoConnectionIntegerSized
41        expandable connector EC
42        end EC;
43
44        EC ec1[2], ec2[2];
45    equation
46        connect(ec1, ec2);
47
48    annotation(__JModelica(UnitTesting(tests={
49        FlatteningTestCase(
50            name="EmptyIntegerSized",
51            description="Expandable to expandable only, several cells each.",
52            flatModel="
53fclass ExpandableConnectorArrays.NoConnectionIntegerSized
54end ExpandableConnectorArrays.NoConnectionIntegerSized;
55")})));
56    end NoConnectionIntegerSized;
57
58    model NoConnectionParameterSized
59        expandable connector EC
60        end EC;
61
62        parameter Integer n;
63
64        EC ec1[n], ec2[n];
65    equation
66        connect(ec1, ec2);
67
68    annotation(__JModelica(UnitTesting(tests={
69        FlatteningTestCase(
70            name="NoConnectionParameterSized",
71            description="Expandable to expandable only, parameter sized.",
72            flatModel="
73fclass ExpandableConnectorArrays.NoConnectionParameterSized
74 structural parameter Integer n = 0 /* 0 */;
75end ExpandableConnectorArrays.NoConnectionParameterSized;
76")})));
77    end NoConnectionParameterSized;
78
79
80    model SingleCells
81        expandable connector EC
82        end EC;
83
84        connector C = Real;
85
86        EC ec1[1], ec2[1];
87        C c1, c2;
88    equation
89        connect(c1, ec1[1].a);
90        connect(ec1[1], ec2[1]);
91        connect(ec2[1].a, c2);
92        c1 = time;
93
94    annotation(__JModelica(UnitTesting(tests={
95        FlatteningTestCase(
96            name="SingleCells",
97            description="Arrays of expandable connectors, singular cells.",
98            flatModel="
99fclass ExpandableConnectorArrays.SingleCells
100 Real ec1[1].a;
101 Real ec2[1].a;
102 Real c1;
103 Real c2;
104equation
105 c1 = time;
106 c1 = c2;
107 c2 = ec1[1].a;
108 ec1[1].a = ec2[1].a;
109end ExpandableConnectorArrays.SingleCells;
110")})));
111    end SingleCells;
112
113
114    model IntegerSized
115        expandable connector EC
116        end EC;
117
118        connector C = Real;
119
120        EC ec1[2], ec2[2];
121        C c1, c2, c3, c4;
122    equation
123        connect(c1, ec1[1].a);
124        connect(c2, ec2[2].b);
125        connect(ec1[1], ec2[1]);
126        connect(ec1[2], ec2[2]);
127        connect(ec2[2].a, c3);
128        connect(ec2[2].a, c4);
129        c1 = time;
130        c2 = time;
131
132    annotation(__JModelica(UnitTesting(tests={
133        FlatteningTestCase(
134            name="IntegerSized",
135            description="Arrays of expandable connectors, several cells each.",
136            flatModel="
137fclass ExpandableConnectorArrays.IntegerSized
138 Real ec1[1].a;
139 Real ec1[2].a;
140 Real ec1[2].b;
141 Real ec2[1].a;
142 Real ec2[2].a;
143 Real ec2[2].b;
144 Real c1;
145 Real c2;
146 Real c3;
147 Real c4;
148equation
149 c1 = time;
150 c2 = time;
151 c1 = ec1[1].a;
152 ec1[1].a = ec2[1].a;
153 c2 = ec1[2].b;
154 ec1[2].b = ec2[2].b;
155 c3 = c4;
156 c4 = ec1[2].a;
157 ec1[2].a = ec2[2].a;
158end ExpandableConnectorArrays.IntegerSized;
159")})));
160    end IntegerSized;
161
162
163    model BooleanSized
164        expandable connector EC
165        end EC;
166
167        connector C = Real;
168
169        EC ec1[Boolean], ec2[Boolean], ec3[Boolean];
170        C c1, c2, c3, c4;
171    equation
172        connect(c1, ec1[false].a);
173        connect(c2, ec1[true].b);
174        connect(c3, ec2[false].b);
175        connect(c4, ec2[true].a);
176        connect(ec1, ec2);
177        connect(ec2[false], ec3[true]);
178        c1 = time;
179        c2 = time;
180        c3 = time;
181        c4 = time;
182
183    annotation(__JModelica(UnitTesting(tests={
184        FlatteningTestCase(
185            name="BooleanSized",
186            description="Arrays of expandable connectors, boolean sized.",
187            flatModel="
188fclass ExpandableConnectorArrays.BooleanSized
189 Real ec1[1].a;
190 Real ec1[1].b;
191 Real ec1[2].a;
192 Real ec1[2].b;
193 Real ec2[1].a;
194 Real ec2[1].b;
195 Real ec2[2].a;
196 Real ec2[2].b;
197 Real ec3[2].a;
198 Real ec3[2].b;
199 Real c1;
200 Real c2;
201 Real c3;
202 Real c4;
203equation
204 c1 = time;
205 c2 = time;
206 c3 = time;
207 c4 = time;
208 c1 = ec1[1].a;
209 ec1[1].a = ec2[1].a;
210 ec2[1].a = ec3[2].a;
211 c2 = ec1[2].b;
212 ec1[2].b = ec2[2].b;
213 c3 = ec1[1].b;
214 ec1[1].b = ec2[1].b;
215 ec2[1].b = ec3[2].b;
216 c4 = ec1[2].a;
217 ec1[2].a = ec2[2].a;
218end ExpandableConnectorArrays.BooleanSized;
219")})));
220    end BooleanSized;
221
222
223    model EnumerationSized
224        expandable connector EC
225        end EC;
226
227        type T = enumeration(A, B, C, D); 
228
229        connector C = Real;
230
231        EC ec1[T], ec2[T], ec3[T];
232        C c1, c2, c3, c4;
233    equation
234        connect(c1, ec1[T.A].a);
235        connect(c2, ec1[T.B].b);
236        connect(c3, ec2[T.C].b);
237        connect(c4, ec2[T.D].a);
238        connect(ec1, ec2);
239        connect(ec2[T.B], ec3[T.C]);
240        c1 = time;
241        c2 = time;
242        c3 = time;
243        c4 = time;
244
245    annotation(__JModelica(UnitTesting(tests={
246        FlatteningTestCase(
247            name="EnumerationSized",
248            description="Arrays of expandable connectors, enumeration sized.",
249            flatModel="
250fclass ExpandableConnectorArrays.EnumerationSized
251 Real ec1[1].a;
252 Real ec1[2].b;
253 Real ec1[3].b;
254 Real ec1[4].a;
255 Real ec2[1].a;
256 Real ec2[2].b;
257 Real ec2[3].b;
258 Real ec2[4].a;
259 Real ec3[3].b;
260 Real c1;
261 Real c2;
262 Real c3;
263 Real c4;
264equation
265 c1 = time;
266 c2 = time;
267 c3 = time;
268 c4 = time;
269 c1 = ec1[1].a;
270 ec1[1].a = ec2[1].a;
271 c2 = ec1[2].b;
272 ec1[2].b = ec2[2].b;
273 ec2[2].b = ec3[3].b;
274 c3 = ec1[3].b;
275 ec1[3].b = ec2[3].b;
276 c4 = ec1[4].a;
277 ec1[4].a = ec2[4].a;
278
279public
280 type ExpandableConnectorArrays.EnumerationSized.T = enumeration(A, B, C, D);
281
282end ExpandableConnectorArrays.EnumerationSized;
283")})));
284    end EnumerationSized;
285
286
287    model ParameterSized
288   
289        model M
290            expandable connector EC
291            end EC;
292
293            parameter Integer n;
294
295            connector C = Real;
296
297            EC ec1[n], ec2[n];
298            C c1, c2;
299        equation
300            connect(c1, ec1[n - 2].a);
301            connect(ec1[n - 2], ec2[n - 1]);
302            connect(ec2[n - 1].a, c2);
303            c1 = time;
304        end M;
305
306        M m(n = 3);
307    annotation(__JModelica(UnitTesting(tests={
308        FlatteningTestCase(
309            name="ParameterSized",
310            description="Arrays of expandable connectors, parameter sized.",
311            flatModel="
312fclass ExpandableConnectorArrays.ParameterSized
313 structural parameter Integer m.n = 3 /* 3 */;
314 Real m.ec1[1].a;
315 Real m.ec2[2].a;
316 Real m.c1;
317 Real m.c2;
318equation
319 m.c1 = time;
320 m.c1 = m.c2;
321 m.c2 = m.ec1[1].a;
322 m.ec1[1].a = m.ec2[2].a;
323end ExpandableConnectorArrays.ParameterSized;
324")})));
325    end ParameterSized;
326
327
328    model CompositeConnectors
329
330        expandable connector EC
331        end EC;
332
333        connector C
334            Real a;
335            flow Real b;
336        end C;
337
338        EC ec1[3], ec2[3], ec3[3];
339        C c1, c2, c3, c4, c5;
340    equation
341        connect(ec1, ec2);
342        connect(ec2, ec3);
343        connect(c1, ec1[1].x);
344        connect(c2, ec1[1].y);
345        connect(ec3[3].x, c3);
346        connect(ec3[3].y, c4);
347        connect(ec2[2].x, c5);
348
349    annotation(__JModelica(UnitTesting(tests={
350        FlatteningTestCase(
351            name="CompositeConnectors",
352            description="Expandable connector arrays: composite connectors.",
353            flatModel="
354fclass ExpandableConnectorArrays.CompositeConnectors
355 Real ec1[1].x.a;
356 Real ec1[1].x.b;
357 Real ec1[1].y.a;
358 Real ec1[1].y.b;
359 Real ec1[2].x.a;
360 Real ec1[2].x.b;
361 Real ec1[3].x.a;
362 Real ec1[3].x.b;
363 Real ec1[3].y.a;
364 Real ec1[3].y.b;
365 Real ec2[1].x.a;
366 Real ec2[1].x.b;
367 Real ec2[1].y.a;
368 Real ec2[1].y.b;
369 Real ec2[2].x.a;
370 Real ec2[2].x.b;
371 Real ec2[3].x.a;
372 Real ec2[3].x.b;
373 Real ec2[3].y.a;
374 Real ec2[3].y.b;
375 Real ec3[1].x.a;
376 Real ec3[1].x.b;
377 Real ec3[1].y.a;
378 Real ec3[1].y.b;
379 Real ec3[2].x.a;
380 Real ec3[2].x.b;
381 Real ec3[3].x.a;
382 Real ec3[3].x.b;
383 Real ec3[3].y.a;
384 Real ec3[3].y.b;
385 Real c1.a;
386 input Real c1.b;
387 Real c2.a;
388 input Real c2.b;
389 Real c3.a;
390 input Real c3.b;
391 Real c4.a;
392 input Real c4.b;
393 Real c5.a;
394 input Real c5.b;
395equation
396 c1.a = ec1[1].x.a;
397 ec1[1].x.a = ec2[1].x.a;
398 ec2[1].x.a = ec3[1].x.a;
399 - c1.b - ec1[1].x.b - ec2[1].x.b - ec3[1].x.b = 0.0;
400 c2.a = ec1[1].y.a;
401 ec1[1].y.a = ec2[1].y.a;
402 ec2[1].y.a = ec3[1].y.a;
403 - c2.b - ec1[1].y.b - ec2[1].y.b - ec3[1].y.b = 0.0;
404 c5.a = ec1[2].x.a;
405 ec1[2].x.a = ec2[2].x.a;
406 ec2[2].x.a = ec3[2].x.a;
407 - c5.b - ec1[2].x.b - ec2[2].x.b - ec3[2].x.b = 0.0;
408 c3.a = ec1[3].x.a;
409 ec1[3].x.a = ec2[3].x.a;
410 ec2[3].x.a = ec3[3].x.a;
411 - c3.b - ec1[3].x.b - ec2[3].x.b - ec3[3].x.b = 0.0;
412 c4.a = ec1[3].y.a;
413 ec1[3].y.a = ec2[3].y.a;
414 ec2[3].y.a = ec3[3].y.a;
415 - c4.b - ec1[3].y.b - ec2[3].y.b - ec3[3].y.b = 0.0;
416 ec1[1].x.b = 0.0;
417 ec1[1].y.b = 0.0;
418 ec2[1].x.b = 0.0;
419 ec2[1].y.b = 0.0;
420 ec1[2].x.b = 0.0;
421 ec2[2].x.b = 0.0;
422 ec1[3].x.b = 0.0;
423 ec1[3].y.b = 0.0;
424 ec2[3].x.b = 0.0;
425 ec2[3].y.b = 0.0;
426 ec3[1].x.b = 0.0;
427 ec3[1].y.b = 0.0;
428 ec3[2].x.b = 0.0;
429 ec3[3].x.b = 0.0;
430 ec3[3].y.b = 0.0;end ExpandableConnectorArrays.CompositeConnectors;
431")})));
432    end CompositeConnectors;
433
434
435    model Redeclare
436        expandable connector EC1
437        end EC1;
438
439        expandable connector EC2
440            C a;
441        end EC2;
442
443        expandable connector EC3
444            C b;
445        end EC3;
446
447        model A
448            replaceable EC1 ec[3];
449        end A;
450
451        connector C = Real;
452
453        A a1(redeclare EC2 ec);
454        A a2(redeclare EC3 ec);
455        C c1, c2;
456    equation
457        connect(c1, a1.ec[1].a);
458        connect(c2, a2.ec[2].b);
459        connect(a1.ec, a2.ec);
460        c1 = time;
461        c2 = time;
462
463    annotation(__JModelica(UnitTesting(tests={
464        FlatteningTestCase(
465            name="Redeclare",
466            description="Expandable connector arrays: redeclaring expandable connectors.",
467            flatModel="
468fclass ExpandableConnectorArrays.Redeclare
469 Real a1.ec[1].a;
470 Real a1.ec[2].b;
471 Real a2.ec[1].a;
472 Real a2.ec[2].b;
473 Real c1;
474 Real c2;
475equation
476 c1 = time;
477 c2 = time;
478 a1.ec[1].a = a2.ec[1].a;
479 a2.ec[1].a = c1;
480 a1.ec[2].b = a2.ec[2].b;
481 a2.ec[2].b = c2;
482end ExpandableConnectorArrays.Redeclare;
483")})));
484    end Redeclare;
485
486
487    model BindingExpressionComposite
488        expandable connector EC
489        end EC;
490
491        connector C
492            Real x;
493            Real y;
494        end C;
495
496        EC ec1[1], ec2[2], ec3[3];
497        C c1(x = 1, y = 2);
498        C c2;
499    equation
500        connect(c1, ec1[1].a);
501        connect(ec1[1], ec2[2]);
502        connect(ec2[2], ec3[3]);
503        connect(ec3[3].a, c2);
504
505    annotation(__JModelica(UnitTesting(tests={
506        FlatteningTestCase(
507            name="BindingExpressionComposite",
508            description="Adding to expandable connectors from composite with binding exps",
509            flatModel="
510fclass ExpandableConnectorArrays.BindingExpressionComposite
511 Real ec1[1].a.x;
512 Real ec1[1].a.y;
513 Real ec2[2].a.x;
514 Real ec2[2].a.y;
515 Real ec3[3].a.x;
516 Real ec3[3].a.y;
517 Real c1.x = 1;
518 Real c1.y = 2;
519 Real c2.x;
520 Real c2.y;
521equation
522 c1.x = c2.x;
523 c2.x = ec1[1].a.x;
524 ec1[1].a.x = ec2[2].a.x;
525 ec2[2].a.x = ec3[3].a.x;
526 c1.y = c2.y;
527 c2.y = ec1[1].a.y;
528 ec1[1].a.y = ec2[2].a.y;
529 ec2[2].a.y = ec3[3].a.y;
530end ExpandableConnectorArrays.BindingExpressionComposite;
531")})));
532    end BindingExpressionComposite;
533
534
535    model ConnectorArray
536        expandable connector EC
537        end EC;
538
539        connector C = Real[2];
540
541        model M
542            EC ec1[3], ec2[3], ec3[3];
543            C c1, c2;
544        equation
545            connect(c1, ec1[1].a);
546            connect(ec1, ec2);
547            connect(ec2, ec3);
548            connect(ec3[3].a, c2);
549        end M;
550
551        M m[2];
552
553    annotation(__JModelica(UnitTesting(tests={
554        FlatteningTestCase(
555            name="ConnectorArray",
556            description="Expandable connector arrays: adding entire array without subscripts, within array component.",
557            flatModel="
558fclass ExpandableConnectorArrays.ConnectorArray
559 ExpandableConnectorArrays.ConnectorArray.C m[1].ec1[1].a[2];
560 ExpandableConnectorArrays.ConnectorArray.C m[1].ec1[3].a[2];
561 ExpandableConnectorArrays.ConnectorArray.C m[1].ec2[1].a[2];
562 ExpandableConnectorArrays.ConnectorArray.C m[1].ec2[3].a[2];
563 ExpandableConnectorArrays.ConnectorArray.C m[1].ec3[1].a[2];
564 ExpandableConnectorArrays.ConnectorArray.C m[1].ec3[3].a[2];
565 ExpandableConnectorArrays.ConnectorArray.C m[1].c1[2];
566 ExpandableConnectorArrays.ConnectorArray.C m[1].c2[2];
567 ExpandableConnectorArrays.ConnectorArray.C m[2].ec1[1].a[2];
568 ExpandableConnectorArrays.ConnectorArray.C m[2].ec1[3].a[2];
569 ExpandableConnectorArrays.ConnectorArray.C m[2].ec2[1].a[2];
570 ExpandableConnectorArrays.ConnectorArray.C m[2].ec2[3].a[2];
571 ExpandableConnectorArrays.ConnectorArray.C m[2].ec3[1].a[2];
572 ExpandableConnectorArrays.ConnectorArray.C m[2].ec3[3].a[2];
573 ExpandableConnectorArrays.ConnectorArray.C m[2].c1[2];
574 ExpandableConnectorArrays.ConnectorArray.C m[2].c2[2];
575equation
576 m[1].c1[1] = m[1].ec1[1].a[1];
577 m[1].ec1[1].a[1] = m[1].ec2[1].a[1];
578 m[1].ec2[1].a[1] = m[1].ec3[1].a[1];
579 m[1].c1[2] = m[1].ec1[1].a[2];
580 m[1].ec1[1].a[2] = m[1].ec2[1].a[2];
581 m[1].ec2[1].a[2] = m[1].ec3[1].a[2];
582 m[1].c2[1] = m[1].ec1[3].a[1];
583 m[1].ec1[3].a[1] = m[1].ec2[3].a[1];
584 m[1].ec2[3].a[1] = m[1].ec3[3].a[1];
585 m[1].c2[2] = m[1].ec1[3].a[2];
586 m[1].ec1[3].a[2] = m[1].ec2[3].a[2];
587 m[1].ec2[3].a[2] = m[1].ec3[3].a[2];
588 m[2].c1[1] = m[2].ec1[1].a[1];
589 m[2].ec1[1].a[1] = m[2].ec2[1].a[1];
590 m[2].ec2[1].a[1] = m[2].ec3[1].a[1];
591 m[2].c1[2] = m[2].ec1[1].a[2];
592 m[2].ec1[1].a[2] = m[2].ec2[1].a[2];
593 m[2].ec2[1].a[2] = m[2].ec3[1].a[2];
594 m[2].c2[1] = m[2].ec1[3].a[1];
595 m[2].ec1[3].a[1] = m[2].ec2[3].a[1];
596 m[2].ec2[3].a[1] = m[2].ec3[3].a[1];
597 m[2].c2[2] = m[2].ec1[3].a[2];
598 m[2].ec1[3].a[2] = m[2].ec2[3].a[2];
599 m[2].ec2[3].a[2] = m[2].ec3[3].a[2];
600
601public
602 type ExpandableConnectorArrays.ConnectorArray.C = Real;
603end ExpandableConnectorArrays.ConnectorArray;
604")})));
605    end ConnectorArray;
606
607
608
609    model ConnectorSlice
610        expandable connector EC
611        end EC;
612
613        connector C
614            Real p;
615            flow Real f;
616        end C;
617
618        EC ec1[2], ec2[2], ec3[2];
619        C c[4];
620    equation
621        connect(c[1:2], ec1.a);
622        connect(ec1, ec2);
623        connect(ec2, ec3);
624        connect(ec3.a, c[3:4]);
625
626    annotation(__JModelica(UnitTesting(tests={
627        FlatteningTestCase(
628            name="ConnectorSlice",
629            description="Expandable connectors: connect to slice",
630            flatModel="
631fclass ExpandableConnectorArrays.ConnectorSlice
632 Real ec1[1].a.p;
633 Real ec1[1].a.f;
634 Real ec1[2].a.p;
635 Real ec1[2].a.f;
636 Real ec2[1].a.p;
637 Real ec2[1].a.f;
638 Real ec2[2].a.p;
639 Real ec2[2].a.f;
640 Real ec3[1].a.p;
641 Real ec3[1].a.f;
642 Real ec3[2].a.p;
643 Real ec3[2].a.f;
644 Real c[1].p;
645 input Real c[1].f;
646 Real c[2].p;
647 input Real c[2].f;
648 Real c[3].p;
649 input Real c[3].f;
650 Real c[4].p;
651 input Real c[4].f;
652equation
653 - c[1].f - c[3].f - ec1[1].a.f - ec2[1].a.f - ec3[1].a.f = 0.0;
654 c[1].p = c[3].p;
655 c[3].p = ec1[1].a.p;
656 ec1[1].a.p = ec2[1].a.p;
657 ec2[1].a.p = ec3[1].a.p;
658 - c[2].f - c[4].f - ec1[2].a.f - ec2[2].a.f - ec3[2].a.f = 0.0;
659 c[2].p = c[4].p;
660 c[4].p = ec1[2].a.p;
661 ec1[2].a.p = ec2[2].a.p;
662 ec2[2].a.p = ec3[2].a.p;
663 ec1[1].a.f = 0.0;
664 ec1[2].a.f = 0.0;
665 ec2[1].a.f = 0.0;
666 ec2[2].a.f = 0.0;
667 ec3[1].a.f = 0.0;
668 ec3[2].a.f = 0.0;
669end ExpandableConnectorArrays.ConnectorSlice;
670")})));
671    end ConnectorSlice;
672
673
674    model ConnectorSlicePrimitive
675        expandable connector EC
676        end EC;
677
678        connector C = Real;
679
680        EC ec1[2], ec2[2], ec3[2];
681        C c[4];
682    equation
683        connect(c[1:2], ec1.a);
684        connect(ec1, ec2);
685        connect(ec2, ec3);
686        connect(ec3.a, c[3:4]);
687
688    annotation(__JModelica(UnitTesting(tests={
689        FlatteningTestCase(
690            name="ConnectorSlicePrimitive",
691            description="Expandable connectors: connect to slice",
692            flatModel="
693fclass ExpandableConnectorArrays.ConnectorSlicePrimitive
694 Real ec1[1].a;
695 Real ec1[2].a;
696 Real ec2[1].a;
697 Real ec2[2].a;
698 Real ec3[1].a;
699 Real ec3[2].a;
700 Real c[4];
701equation
702 c[1] = c[3];
703 c[3] = ec1[1].a;
704 ec1[1].a = ec2[1].a;
705 ec2[1].a = ec3[1].a;
706 c[2] = c[4];
707 c[4] = ec1[2].a;
708 ec1[2].a = ec2[2].a;
709 ec2[2].a = ec3[2].a;
710end ExpandableConnectorArrays.ConnectorSlicePrimitive;
711")})));
712    end ConnectorSlicePrimitive;
713
714
715    model SliceToSlice
716        expandable connector EC
717        end EC;
718
719        connector C = Real;
720
721        EC ec1[2], ec2[3], ec3[4];
722        C c[4];
723    equation
724        connect(c[1:2], ec1.a);
725        connect(ec1[1:2], ec2[2:3]);
726        connect(ec2[2:3], ec3[3:4]);
727        connect(ec3.a, c);
728
729    annotation(__JModelica(UnitTesting(tests={
730        FlatteningTestCase(
731            name="SliceToSlice",
732            description="Expandable connectors: connect slice to slice",
733            flatModel="
734fclass ExpandableConnectorArrays.SliceToSlice
735 Real ec1[1].a;
736 Real ec1[2].a;
737 Real ec2[2].a;
738 Real ec2[3].a;
739 Real ec3[1].a;
740 Real ec3[2].a;
741 Real ec3[3].a;
742 Real ec3[4].a;
743 Real c[4];
744equation
745 c[1] = c[3];
746 c[3] = ec1[1].a;
747 ec1[1].a = ec2[2].a;
748 ec2[2].a = ec3[1].a;
749 ec3[1].a = ec3[3].a;
750 c[2] = c[4];
751 c[4] = ec1[2].a;
752 ec1[2].a = ec2[3].a;
753 ec2[3].a = ec3[2].a;
754 ec3[2].a = ec3[4].a;
755end ExpandableConnectorArrays.SliceToSlice;
756")})));
757    end SliceToSlice;
758
759
760    model SliceWithComponent
761        expandable connector EC
762        end EC;
763
764        connector C = Real;
765
766        EC ec1[2], ec2[3];
767        C c[3], c2[3,2];
768    equation
769        connect(c[1:2], ec1[1].a);
770        connect(ec1, ec2[2:3]);
771        connect(c2, ec2.a);
772        c[1] = time;
773
774    annotation(__JModelica(UnitTesting(tests={
775        FlatteningTestCase(
776            name="SliceWithComponent",
777            description="Expandable connectors: connect  of arrays.",
778            flatModel="
779fclass ExpandableConnectorArrays.SliceWithComponent
780 Real ec1[1].a[2];
781 Real ec1[2].a[2];
782 Real ec2[1].a[2];
783 Real ec2[2].a[2];
784 Real ec2[3].a[2];
785 Real c[3];
786 Real c2[3,2];
787equation
788 c[1] = time;
789 c2[2,1] = c[1];
790 c[1] = ec1[1].a[1];
791 ec1[1].a[1] = ec2[2].a[1];
792 c2[2,2] = c[2];
793 c[2] = ec1[1].a[2];
794 ec1[1].a[2] = ec2[2].a[2];
795 c2[3,1] = ec1[2].a[1];
796 ec1[2].a[1] = ec2[3].a[1];
797 c2[3,2] = ec1[2].a[2];
798 ec1[2].a[2] = ec2[3].a[2];
799 c2[1,1] = ec2[1].a[1];
800 c2[1,2] = ec2[1].a[2];
801end ExpandableConnectorArrays.SliceWithComponent;
802")})));
803    end SliceWithComponent;
804
805
806    model MatrixSlices
807        expandable connector EC
808        end EC;
809
810        connector C = Real;
811
812        EC ec1[2], ec2[3];
813        C c1[2], c2[2,2];
814    equation
815        connect(ec1[1].a[1,:], c1);
816        connect(ec1[2].b[:,1:2], c2);
817        connect(ec2[3].a[:,1:2], c2);
818
819    annotation(__JModelica(UnitTesting(tests={
820        FlatteningTestCase(
821            name="MatrixSlices",
822            description="Connecting to slice with colon of array in expandable connector array.",
823            flatModel="
824fclass ExpandableConnectorArrays.MatrixSlices
825 Real ec1[1].a[1,2];
826 Real ec1[2].b[2,2];
827 Real ec2[3].a[2,2];
828 Real c1[2];
829 Real c2[2,2];
830equation
831 c1[1] = ec1[1].a[1,1];
832 c1[2] = ec1[1].a[1,2];
833 c2[1,1] = ec1[2].b[1,1];
834 ec1[2].b[1,1] = ec2[3].a[1,1];
835 c2[1,2] = ec1[2].b[1,2];
836 ec1[2].b[1,2] = ec2[3].a[1,2];
837 c2[2,1] = ec1[2].b[2,1];
838 ec1[2].b[2,1] = ec2[3].a[2,1];
839 c2[2,2] = ec1[2].b[2,2];
840 ec1[2].b[2,2] = ec2[3].a[2,2];
841end ExpandableConnectorArrays.MatrixSlices;
842")})));
843    end MatrixSlices;
844
845
846    model MemberAccess
847        expandable connector EC
848            Real x;
849        end EC;
850
851        connector C = Real;
852
853        C c1, c2, c3, c4;
854        EC ec[3];
855        Real q;
856    equation
857        connect(c1, ec[1].a);
858        connect(c2, ec[2].b);
859        connect(c3, ec[3].c);
860        connect(c4, ec[1].x);
861        connect(ec[1], ec[2]);
862
863        q = ec[1].x;
864
865        c1 = time;
866        c2 = time;
867        c3 = time;
868        c4 = time;
869
870    annotation(__JModelica(UnitTesting(tests={
871        FlatteningTestCase(
872            name="MemberAccess",
873            description="Using members of expandable connector array.",
874            flatModel="
875fclass ExpandableConnectorArrays.MemberAccess
876 Real c1;
877 Real c2;
878 Real c3;
879 Real c4;
880 Real ec[1].a;
881 Real ec[1].b;
882 Real ec[1].x;
883 Real ec[2].a;
884 Real ec[2].b;
885 Real ec[2].x;
886 Real ec[3].c;
887 Real q;
888equation
889 q = ec[1].x;
890 c1 = time;
891 c2 = time;
892 c3 = time;
893 c4 = time;
894 c1 = ec[1].a;
895 ec[1].a = ec[2].a;
896 c2 = ec[1].b;
897 ec[1].b = ec[2].b;
898 c3 = ec[3].c;
899 c4 = ec[1].x;
900 ec[1].x = ec[2].x;
901end ExpandableConnectorArrays.MemberAccess;
902")})));
903    end MemberAccess;
904
905
906    model NestedAccess
907        expandable connector EC1
908            EC2 ec2[3];
909        end EC1;
910
911        expandable connector EC2
912        end EC2;
913
914        connector C = Real;
915
916        EC1 ec1[2];
917        C c1[2], c2[2];
918    equation
919        connect(c1, ec1.ec2[2].a);
920        connect(c2, ec1.ec2[1].b);
921
922    annotation(__JModelica(UnitTesting(tests={
923        FlatteningTestCase(
924            name="NestedAccess",
925            description="Nested declared expandable connector ",
926            flatModel="
927fclass ExpandableConnectorArrays.NestedAccess
928 Real ec1[1].ec2[1].b;
929 Real ec1[1].ec2[2].a;
930 Real ec1[2].ec2[1].b;
931 Real ec1[2].ec2[2].a;
932 Real c1[2];
933 Real c2[2];
934equation
935 c1[1] = ec1[1].ec2[2].a;
936 c1[2] = ec1[2].ec2[2].a;
937 c2[1] = ec1[1].ec2[1].b;
938 c2[2] = ec1[2].ec2[1].b;
939end ExpandableConnectorArrays.NestedAccess;
940")})));
941    end NestedAccess;
942
943
944    model NestedDisconnected
945        expandable connector EC1
946            C1 c1;
947        end EC1;
948
949        connector C1
950            EC2 ec2;
951            Real x;
952        end C1;
953
954        expandable connector EC2
955        end EC2;
956
957        connector C2 = Real;
958
959        EC1 ec1;
960        C2 c2;
961
962    annotation(__JModelica(UnitTesting(tests={
963        FlatteningTestCase(
964            name="NestedDisconnected",
965            description="Nested declared expandable connector arrays: not connected.",
966            flatModel="
967fclass ExpandableConnectorArrays.NestedDisconnected
968 Real c2;
969end ExpandableConnectorArrays.NestedDisconnected;
970")})));
971    end NestedDisconnected;
972
973
974    model NestedAccesses
975        expandable connector EC1
976            EC2 ec2[4];
977        end EC1;
978
979        expandable connector EC2
980        end EC2;
981
982        connector C = Real;
983
984        EC1 ec1[3];
985        C c1, c2;
986    equation
987        connect(c1, ec1[1].ec2[3].a);
988        connect(c2, ec1[1].b);
989
990    annotation(__JModelica(UnitTesting(tests={
991        FlatteningTestCase(
992            name="NestedAccesses",
993            description="Nested accesses to expandable connectors.",
994            flatModel="
995fclass ExpandableConnectorArrays.NestedAccesses
996 Real ec1[1].b;
997 Real ec1[1].ec2[3].a;
998 Real c1;
999 Real c2;
1000equation
1001 c1 = ec1[1].ec2[3].a;
1002 c2 = ec1[1].b;
1003end ExpandableConnectorArrays.NestedAccesses;
1004")})));
1005    end NestedAccesses;
1006
1007
1008    model NestedConnections
1009        expandable connector EC1
1010            EC2 ec2[3];
1011        end EC1;
1012
1013        expandable connector EC2
1014        end EC2;
1015
1016        connector C = Real;
1017
1018        constant Integer n = 3;
1019
1020        EC1 ec1[n];
1021        EC2 ec3[n];
1022        EC1 ec4[n];
1023
1024        C c1[n], c2;
1025    equation
1026        connect(c1, ec1.ec2[1].a);
1027        connect(ec1[2].ec2, ec3);
1028        connect(ec4[1], ec1[2].ec2[2]);
1029        connect(ec1, ec4);
1030        connect(ec4[1].ec2[2].b, c2);
1031        c1 = (1:n) * time;
1032        c2 = time;
1033
1034    annotation(__JModelica(UnitTesting(tests={
1035        FlatteningTestCase(
1036            name="NestedConnections",
1037            description="Nested expandable connectors, different connection levels.",
1038            flatModel="
1039fclass ExpandableConnectorArrays.NestedConnections
1040 constant Integer n = 3;
1041 Real ec1[1].ec2[1].a;
1042 Real ec1[1].ec2[2].b;
1043 Real ec1[2].ec2[1].a;
1044 Real ec1[2].ec2[2].ec2[1].a;
1045 Real ec1[2].ec2[2].ec2[2].b;
1046 Real ec1[3].ec2[1].a;
1047 Real ec3[1].a;
1048 Real ec3[2].ec2[1].a;
1049 Real ec3[2].ec2[2].b;
1050 Real ec4[1].ec2[1].a;
1051 Real ec4[1].ec2[2].b;
1052 Real ec4[2].ec2[1].a;
1053 Real ec4[2].ec2[2].ec2[1].a;
1054 Real ec4[2].ec2[2].ec2[2].b;
1055 Real ec4[3].ec2[1].a;
1056 Real c1[3];
1057 Real c2;
1058equation
1059 c1[1:3] = (1:3) * time;
1060 c2 = time;
1061 c1[2] = ec1[2].ec2[1].a;
1062 ec1[2].ec2[1].a = ec3[1].a;
1063 ec3[1].a = ec4[2].ec2[1].a;
1064 c1[3] = ec1[3].ec2[1].a;
1065 ec1[3].ec2[1].a = ec4[3].ec2[1].a;
1066 c1[1] = ec1[1].ec2[1].a;
1067 ec1[1].ec2[1].a = ec1[2].ec2[2].ec2[1].a;
1068 ec1[2].ec2[2].ec2[1].a = ec3[2].ec2[1].a;
1069 ec3[2].ec2[1].a = ec4[1].ec2[1].a;
1070 ec4[1].ec2[1].a = ec4[2].ec2[2].ec2[1].a;
1071 c2 = ec1[1].ec2[2].b;
1072 ec1[1].ec2[2].b = ec1[2].ec2[2].ec2[2].b;
1073 ec1[2].ec2[2].ec2[2].b = ec3[2].ec2[2].b;
1074 ec3[2].ec2[2].b = ec4[1].ec2[2].b;
1075 ec4[1].ec2[2].b = ec4[2].ec2[2].ec2[2].b;
1076end ExpandableConnectorArrays.NestedConnections;
1077")})));
1078    end NestedConnections;
1079
1080
1081    model NestedConnectionSizes
1082        expandable connector EC1
1083            EC2 ec2[n];
1084        end EC1;
1085
1086        expandable connector EC2
1087        end EC2;
1088
1089        connector C = Real;
1090
1091        constant Integer n = 2;
1092
1093        EC1 ec1[n];
1094        EC2 ec3[n,n];
1095
1096        C c1[n,n,n], c2[n,n];
1097    equation
1098        connect(c1, ec1.ec2.a);
1099        connect(c2, ec1.ec2.b);
1100        connect(ec1.ec2, ec3);
1101        c1 = fill(time, n, n, n);
1102        c2 = fill(time, n, n);
1103
1104    annotation(__JModelica(UnitTesting(tests={
1105        FlatteningTestCase(
1106            name="NestedConnectionSizes",
1107            description="Nested expandable connectors, different connection levels.",
1108            flatModel="
1109fclass ExpandableConnectorArrays.NestedConnectionSizes
1110 constant Integer n = 2;
1111 Real ec1[1].ec2[1].a[2];
1112 Real ec1[1].ec2[1].b;
1113 Real ec1[1].ec2[2].a[2];
1114 Real ec1[1].ec2[2].b;
1115 Real ec1[2].ec2[1].a[2];
1116 Real ec1[2].ec2[1].b;
1117 Real ec1[2].ec2[2].a[2];
1118 Real ec1[2].ec2[2].b;
1119 Real ec3[1,1].a[2];
1120 Real ec3[1,1].b;
1121 Real ec3[1,2].a[2];
1122 Real ec3[1,2].b;
1123 Real ec3[2,1].a[2];
1124 Real ec3[2,1].b;
1125 Real ec3[2,2].a[2];
1126 Real ec3[2,2].b;
1127 Real c1[2,2,2];
1128 Real c2[2,2];
1129equation
1130 c1[1:2,1:2,1:2] = fill(time, 2, 2, 2);
1131 c2[1:2,1:2] = fill(time, 2, 2);
1132 c1[1,1,1] = ec1[1].ec2[1].a[1];
1133 ec1[1].ec2[1].a[1] = ec3[1,1].a[1];
1134 c1[1,1,2] = ec1[1].ec2[1].a[2];
1135 ec1[1].ec2[1].a[2] = ec3[1,1].a[2];
1136 c1[1,2,1] = ec1[1].ec2[2].a[1];
1137 ec1[1].ec2[2].a[1] = ec3[1,2].a[1];
1138 c1[1,2,2] = ec1[1].ec2[2].a[2];
1139 ec1[1].ec2[2].a[2] = ec3[1,2].a[2];
1140 c1[2,1,1] = ec1[2].ec2[1].a[1];
1141 ec1[2].ec2[1].a[1] = ec3[2,1].a[1];
1142 c1[2,1,2] = ec1[2].ec2[1].a[2];
1143 ec1[2].ec2[1].a[2] = ec3[2,1].a[2];
1144 c1[2,2,1] = ec1[2].ec2[2].a[1];
1145 ec1[2].ec2[2].a[1] = ec3[2,2].a[1];
1146 c1[2,2,2] = ec1[2].ec2[2].a[2];
1147 ec1[2].ec2[2].a[2] = ec3[2,2].a[2];
1148 c2[1,1] = ec1[1].ec2[1].b;
1149 ec1[1].ec2[1].b = ec3[1,1].b;
1150 c2[1,2] = ec1[1].ec2[2].b;
1151 ec1[1].ec2[2].b = ec3[1,2].b;
1152 c2[2,1] = ec1[2].ec2[1].b;
1153 ec1[2].ec2[1].b = ec3[2,1].b;
1154 c2[2,2] = ec1[2].ec2[2].b;
1155 ec1[2].ec2[2].b = ec3[2,2].b;
1156end ExpandableConnectorArrays.NestedConnectionSizes;
1157")})));
1158    end NestedConnectionSizes;
1159
1160    model NestedAndSlices
1161        expandable connector EC1
1162            EC2 ec2[3];
1163        end EC1;
1164
1165        expandable connector EC2
1166        end EC2;
1167
1168        connector C = Real;
1169
1170        EC1 ec1a[2], ec1b[3];
1171        EC2 ec2[4];
1172        C c[3,3];
1173    equation
1174        connect(c[1:2,1], ec1a[1:2].a);
1175        connect(ec1a.ec2[1], ec2[2:3]);
1176        connect(ec1b[2:3].ec2[1], ec2[2:3]);
1177        connect(c, ec1b.ec2.b);
1178        connect(c, ec2[2:end].d); // TODO: Looks like the indices are wrong when adding this connect
1179                                  //       to ConnectionSetManager after elaboration
1180        connect(c[2:3,2:3], ec1b[2:3].ec2[2:3].e);
1181        c = {1:3, 4:6, 7:9} .* time;
1182
1183    annotation(__JModelica(UnitTesting(tests={
1184        FlatteningTestCase(
1185            name="NestedAndSlices",
1186            description="Expandable connectors: connect of arrays.",
1187            flatModel="
1188fclass ExpandableConnectorArrays.NestedAndSlices
1189 Real ec1a[1].a;
1190 Real ec1a[1].ec2[1].b;
1191 Real ec1a[1].ec2[1].d[3];
1192 Real ec1a[2].a;
1193 Real ec1a[2].ec2[1].b;
1194 Real ec1a[2].ec2[1].d[3];
1195 Real ec1b[1].ec2[1].b;
1196 Real ec1b[1].ec2[2].b;
1197 Real ec1b[1].ec2[3].b;
1198 Real ec1b[2].ec2[1].b;
1199 Real ec1b[2].ec2[1].d[3];
1200 Real ec1b[2].ec2[2].b;
1201 Real ec1b[2].ec2[2].e;
1202 Real ec1b[2].ec2[3].b;
1203 Real ec1b[2].ec2[3].e;
1204 Real ec1b[3].ec2[1].b;
1205 Real ec1b[3].ec2[1].d[3];
1206 Real ec1b[3].ec2[2].b;
1207 Real ec1b[3].ec2[2].e;
1208 Real ec1b[3].ec2[3].b;
1209 Real ec1b[3].ec2[3].e;
1210 Real ec2[2].b;
1211 Real ec2[2].d[3];
1212 Real ec2[3].b;
1213 Real ec2[3].d[3];
1214 Real ec2[4].d[3];
1215 Real c[3,3];
1216equation
1217 c[1:3,1:3] = {1:3, 4:6, 7:9} .* time;
1218 c[1,1] = ec1a[1].a;
1219 ec1a[1].a = ec1a[1].ec2[1].d[2];
1220 ec1a[1].ec2[1].d[2] = ec1b[1].ec2[1].b;
1221 ec1b[1].ec2[1].b = ec1b[2].ec2[1].d[2];
1222 ec1b[2].ec2[1].d[2] = ec2[2].d[2];
1223 c[2,1] = ec1a[1].ec2[1].b;
1224 ec1a[1].ec2[1].b = ec1a[2].a;
1225 ec1a[2].a = ec1b[2].ec2[1].b;
1226 ec1b[2].ec2[1].b = ec2[2].b;
1227 ec1a[1].ec2[1].d[1] = ec1b[2].ec2[1].d[1];
1228 ec1b[2].ec2[1].d[1] = ec2[2].d[1];
1229 ec1a[1].ec2[1].d[3] = ec1b[2].ec2[1].d[3];
1230 ec1b[2].ec2[1].d[3] = ec2[2].d[3];
1231 c[3,1] = ec1a[2].ec2[1].b;
1232 ec1a[2].ec2[1].b = ec1b[3].ec2[1].b;
1233 ec1b[3].ec2[1].b = ec2[3].b;
1234 ec1a[2].ec2[1].d[1] = ec1b[3].ec2[1].d[1];
1235 ec1b[3].ec2[1].d[1] = ec2[3].d[1];
1236 ec1a[2].ec2[1].d[2] = ec1b[3].ec2[1].d[2];
1237 ec1b[3].ec2[1].d[2] = ec2[3].d[2];
1238 c[1,2] = ec1a[2].ec2[1].d[3];
1239 ec1a[2].ec2[1].d[3] = ec1b[1].ec2[2].b;
1240 ec1b[1].ec2[2].b = ec1b[3].ec2[1].d[3];
1241 ec1b[3].ec2[1].d[3] = ec2[3].d[3];
1242 c[1,3] = ec1b[1].ec2[3].b;
1243 ec1b[1].ec2[3].b = ec2[4].d[4];
1244 c[2,2] = ec1b[2].ec2[2].b;
1245 ec1b[2].ec2[2].b = ec1b[2].ec2[2].e;
1246 c[2,3] = ec1b[2].ec2[3].b;
1247 ec1b[2].ec2[3].b = ec1b[2].ec2[3].e;
1248 c[3,2] = ec1b[3].ec2[2].b;
1249 ec1b[3].ec2[2].b = ec1b[3].ec2[2].e;
1250 c[3,3] = ec1b[3].ec2[3].b;
1251 ec1b[3].ec2[3].b = ec1b[3].ec2[3].e;
1252 ec2[4].d[1] = 0.0;
1253 ec2[4].d[2] = 0.0;
1254 ec2[4].d[3] = 0.0;
1255end ExpandableConnectorArrays.NestedAndSlices;
1256")})));
1257    end NestedAndSlices;
1258
1259    model LoopedConnection
1260        expandable connector EC
1261        end EC;
1262
1263        connector C = Real;
1264
1265        model M
1266            C c;
1267        end M;
1268
1269        parameter Integer n = 4;
1270
1271        EC ec[n];
1272        M m[n];
1273    equation
1274        for i in 1:(n-2) loop
1275            connect(ec[i], ec[i+2]);
1276            connect(ec[i].a, m[i].c);
1277        end for;
1278        connect(ec[end-1].a, m[end-1].c);
1279        connect(ec[end].a, m[end].c);
1280
1281    annotation(__JModelica(UnitTesting(tests={
1282        FlatteningTestCase(
1283            name="LoopedConnection",
1284            description="Connecting to expandable connector in for loop",
1285            flatModel="
1286fclass ExpandableConnectorArrays.LoopedConnection
1287 structural parameter Integer n = 4 /* 4 */;
1288 Real ec[1].a;
1289 Real ec[2].a;
1290 Real ec[3].a;
1291 Real ec[4].a;
1292 Real m[1].c;
1293 Real m[2].c;
1294 Real m[3].c;
1295 Real m[4].c;
1296equation
1297 ec[1].a = ec[3].a;
1298 ec[3].a = m[1].c;
1299 m[1].c = m[3].c;
1300 ec[2].a = ec[4].a;
1301 ec[4].a = m[2].c;
1302 m[2].c = m[4].c;
1303end ExpandableConnectorArrays.LoopedConnection;
1304")})));
1305    end LoopedConnection;
1306   
1307   
1308    model LoopedNested1
1309        expandable connector EC
1310        end EC;
1311       
1312        connector C = Real;
1313       
1314        parameter Integer n = 2;
1315       
1316        EC ec1, ec2[n];
1317        C c;
1318    equation
1319        for i in 1:n loop
1320            connect(ec1.a[i], ec2[i]);
1321            connect(ec1.a[i].b[i], c);
1322        end for;
1323
1324    annotation(__JModelica(UnitTesting(tests={
1325        FlatteningTestCase(
1326            name="LoopedNested1",
1327            description="Introducing connections in a loop, index used on two levels, non-declared nested, outer first",
1328            flatModel="
1329fclass ExpandableConnectorArrays.LoopedNested1
1330 structural parameter Integer n = 2 /* 2 */;
1331 Real ec1.a[1].b[1];
1332 Real ec1.a[2].b[2];
1333 Real ec2[1].b[1];
1334 Real ec2[2].b[2];
1335 Real c;
1336equation
1337 c = ec1.a[1].b[1];
1338 ec1.a[1].b[1] = ec1.a[2].b[2];
1339 ec1.a[2].b[2] = ec2[1].b[1];
1340 ec2[1].b[1] = ec2[2].b[2];
1341 ec1.a[2].b[1] = ec2[2].b[1];
1342end ExpandableConnectorArrays.LoopedNested1;
1343")})));
1344    end LoopedNested1;
1345   
1346   
1347    model LoopedNested2
1348        expandable connector EC
1349        end EC;
1350       
1351        connector C = Real;
1352       
1353        parameter Integer n = 2;
1354       
1355        EC ec1[n], ec2;
1356        C c;
1357    equation
1358        for i in 1:n loop
1359            connect(ec2.a[i].b[i], c);
1360            connect(ec2.a[i], ec1[i]);
1361        end for;
1362
1363    annotation(__JModelica(UnitTesting(tests={
1364        FlatteningTestCase(
1365            name="LoopedNested2",
1366            description="Introducing connections in a loop, index used on two levels, non-declared nested, inner first",
1367            flatModel="
1368fclass ExpandableConnectorArrays.LoopedNested2
1369 structural parameter Integer n = 2 /* 2 */;
1370 Real ec1[1].b[1];
1371 Real ec1[2].b[2];
1372 Real ec2.a[1].b[1];
1373 Real ec2.a[2].b[2];
1374 Real c;
1375equation
1376 c = ec1[1].b[1];
1377 ec1[1].b[1] = ec1[2].b[2];
1378 ec1[2].b[2] = ec2.a[1].b[1];
1379 ec2.a[1].b[1] = ec2.a[2].b[2];
1380 ec1[2].b[1] = ec2.a[2].b[1];
1381end ExpandableConnectorArrays.LoopedNested2;
1382")})));
1383    end LoopedNested2;
1384   
1385   
1386    model LoopedNested3
1387        expandable connector EC
1388        end EC;
1389       
1390        connector C = Real;
1391       
1392        parameter Integer n = 2;
1393       
1394        EC ec1[n], ec2[n];
1395        C c;
1396    equation
1397        for i in 1:n loop
1398            connect(ec1[i].a, ec2[i]);
1399            connect(ec1[i].a.b[i], c);
1400        end for;
1401    annotation(__JModelica(UnitTesting(tests={
1402        FlatteningTestCase(
1403            name="LoopedNested3",
1404            description="Introducing connections in a loop, index used on two levels, non-declared nested, outer first",
1405            flatModel="
1406fclass ExpandableConnectorArrays.LoopedNested3
1407 structural parameter Integer n = 2 /* 2 */;
1408 Real ec1[1].a.b[1];
1409 Real ec1[2].a.b[2];
1410 Real ec2[1].b[1];
1411 Real ec2[2].b[2];
1412 Real c;
1413equation
1414 c = ec1[1].a.b[1];
1415 ec1[1].a.b[1] = ec1[2].a.b[2];
1416 ec1[2].a.b[2] = ec2[1].b[1];
1417 ec2[1].b[1] = ec2[2].b[2];
1418 ec1[2].a.b[1] = ec2[2].b[1];
1419end ExpandableConnectorArrays.LoopedNested3;
1420")})));
1421    end LoopedNested3;
1422   
1423   
1424    model LoopedNested4
1425        expandable connector EC
1426        end EC;
1427       
1428        connector C = Real;
1429       
1430        parameter Integer n = 2;
1431       
1432        EC ec1[n], ec2[n];
1433        C c;
1434    equation
1435        for i in 1:n loop
1436            connect(ec2[i].a.b[i], c);
1437            connect(ec2[i].a, ec1[i]);
1438        end for;
1439    annotation(__JModelica(UnitTesting(tests={
1440        FlatteningTestCase(
1441            name="LoopedNested4",
1442            description="Introducing connections in a loop, index used on two levels, non-declared nested, inner first",
1443            flatModel="
1444fclass ExpandableConnectorArrays.LoopedNested4
1445 structural parameter Integer n = 2 /* 2 */;
1446 Real ec1[1].b[1];
1447 Real ec1[2].b[2];
1448 Real ec2[1].a.b[1];
1449 Real ec2[2].a.b[2];
1450 Real c;
1451equation
1452 c = ec1[1].b[1];
1453 ec1[1].b[1] = ec1[2].b[2];
1454 ec1[2].b[2] = ec2[1].a.b[1];
1455 ec2[1].a.b[1] = ec2[2].a.b[2];
1456 ec1[2].b[1] = ec2[2].a.b[1];
1457end ExpandableConnectorArrays.LoopedNested4;
1458")})));
1459    end LoopedNested4;
1460   
1461   
1462    model SliceNested1
1463        expandable connector EC
1464        end EC;
1465       
1466        connector C = Real;
1467       
1468        EC ec1, ec2[3];
1469        C c[3];
1470    equation
1471        connect(ec1.a[2:3], ec2[3:-1:2]);
1472        connect(ec2.b, c);
1473    annotation(__JModelica(UnitTesting(tests={
1474        FlatteningTestCase(
1475            name="SliceNested1",
1476            description="",
1477            flatModel="
1478fclass ExpandableConnectorArrays.SliceNested1
1479 Real ec1.a[2].b;
1480 Real ec1.a[3].b;
1481 Real ec2[1].b;
1482 Real ec2[2].b;
1483 Real ec2[3].b;
1484 Real c[3];
1485equation
1486 c[3] = ec1.a[2].b;
1487 ec1.a[2].b = ec2[3].b;
1488 c[2] = ec1.a[3].b;
1489 ec1.a[3].b = ec2[2].b;
1490 c[1] = ec2[1].b;
1491end ExpandableConnectorArrays.SliceNested1;
1492")})));
1493    end SliceNested1;
1494   
1495   
1496    model SliceNested2
1497        expandable connector EC
1498        end EC;
1499       
1500        connector C = Real;
1501       
1502        EC ec1, ec2[2,2];
1503        C c[2,2];
1504    equation
1505        connect(ec1.a, ec2[1,:]);
1506        connect(ec2.b, c);
1507    annotation(__JModelica(UnitTesting(tests={
1508        FlatteningTestCase(
1509            name="SliceNested2",
1510            description="",
1511            flatModel="
1512fclass ExpandableConnectorArrays.SliceNested2
1513 Real ec1.a[1].b;
1514 Real ec1.a[2].b;
1515 Real ec2[1,1].b;
1516 Real ec2[1,2].b;
1517 Real ec2[2,1].b;
1518 Real ec2[2,2].b;
1519 Real c[2,2];
1520equation
1521 c[1,1] = ec1.a[1].b;
1522 ec1.a[1].b = ec2[1,1].b;
1523 c[1,2] = ec1.a[2].b;
1524 ec1.a[2].b = ec2[1,2].b;
1525 c[2,1] = ec2[2,1].b;
1526 c[2,2] = ec2[2,2].b;
1527end ExpandableConnectorArrays.SliceNested2;
1528")})));
1529    end SliceNested2;
1530   
1531   
1532    // TODO: For some reason this flattens to an empty class even though the ExpandableSets look fine.
1533    model SliceNested3
1534        expandable connector EC
1535        end EC;
1536       
1537        connector C = Real;
1538       
1539        EC ec1[2], ec2[2,2];
1540        C c[2,2];
1541    equation
1542        connect(ec1.a, ec2);
1543        connect(ec2.b, c);
1544    end SliceNested3;
1545   
1546   
1547    // TODO:
1548    model SliceNested4
1549        expandable connector EC
1550        end EC;
1551       
1552        connector C = Real;
1553       
1554        EC ec1, ec2[2];
1555        C c[2, 2];
1556    equation
1557        connect(ec1.a, ec2[:]);
1558        connect(ec1.a[1:2].b[1:2], c);
1559    end SliceNested4;
1560   
1561   
1562    // TODO: For some reason most of the variables and connections disappear.
1563    model SliceNested5
1564        expandable connector EC
1565        end EC;
1566       
1567        connector C = Real;
1568       
1569        EC ec1, ec2[5];
1570        C c;
1571    equation
1572        connect(ec1.a[2:3], ec2[3:4]);
1573        connect(ec1.a[1:3].b, c);
1574//    annotation(__JModelica(UnitTesting(tests={
1575//        FlatteningTestCase(
1576//            name="SliceNested5",
1577//            description="",
1578//            flatModel="
1579//fclass ExpandableConnectorArrays.SliceNested5
1580// Real ec1.a[1].b; // All these variables should be here, right?
1581// Real ec1.a[2].b;
1582// Real ec1.a[3].b;
1583// Real ec2[3].b;
1584// Real ec2[4].b;
1585// Real c;
1586//equation
1587//end ExpandableConnectorArrays.SliceNested5;
1588//")})));
1589    end SliceNested5;
1590   
1591   
1592    model ThroughScalar
1593        expandable connector EC
1594        end EC;
1595       
1596        connector C = Real;
1597       
1598        EC ec1, ec2, ec3;
1599       
1600        C c1, c2;
1601    equation
1602        connect(ec2.b, c1);
1603        connect(ec3.d, c2);
1604        connect(ec1.a, ec2);
1605        connect(ec1.a, ec3);
1606
1607    annotation(__JModelica(UnitTesting(tests={
1608        FlatteningTestCase(
1609            name="ThroughScalar",
1610            description="Connecting expandable connectors through a scalar non-declared nested expandable connector",
1611            flatModel="
1612fclass ExpandableConnectorArrays.ThroughScalar
1613 Real ec1.a.b;
1614 Real ec1.a.d;
1615 Real ec2.b;
1616 Real ec2.d;
1617 Real ec3.b;
1618 Real ec3.d;
1619 Real c1;
1620 Real c2;
1621equation
1622 c1 = ec1.a.b;
1623 ec1.a.b = ec2.b;
1624 ec2.b = ec3.b;
1625 c2 = ec1.a.d;
1626 ec1.a.d = ec2.d;
1627 ec2.d = ec3.d;
1628end ExpandableConnectorArrays.ThroughScalar;
1629")})));
1630    end ThroughScalar;
1631   
1632    model ThroughArray
1633        expandable connector EC
1634        end EC;
1635       
1636        connector C = Real;
1637       
1638        EC ec1, ec2, ec3, ec4;
1639       
1640        C c1, c2;
1641    equation
1642        connect(ec2.b, c1);
1643        connect(ec4.d, c2);
1644        connect(ec1.a[1], ec2);
1645        connect(ec1.a[1], ec3);
1646        connect(ec1.a[2], ec4);
1647
1648    annotation(__JModelica(UnitTesting(tests={
1649        FlatteningTestCase(
1650            name="ThroughArray",
1651            description="Connecting expandable connectors through an array cell, and make contents is not propagated to other cells in same array",
1652            flatModel="
1653fclass ExpandableConnectorArrays.ThroughArray
1654 Real ec1.a[1].b;
1655 Real ec1.a[2].d;
1656 Real ec2.b;
1657 Real ec3.b;
1658 Real ec4.d;
1659 Real c1;
1660 Real c2;
1661equation
1662 c1 = ec1.a[1].b;
1663 ec1.a[1].b = ec2.b;
1664 ec2.b = ec3.b;
1665 c2 = ec1.a[2].d;
1666 ec1.a[2].d = ec4.d;
1667end ExpandableConnectorArrays.ThroughArray;
1668")})));
1669    end ThroughArray;
1670
1671/* TODO: Array of expandable sub-connector declared with [:]??? */
1672/*
1673expandable connector EC
1674    EC2 ec[:];
1675end EC;
1676*/
1677
1678
1679/* TODO: Template that is of a type containing an array size. */
1680// Real[2] x; type A = Real[2](unit = "K"); A y;
1681
1682package Error
1683
1684/* TODO: Add test with connection where both sides are introducing members, and improve error message for that. */
1685
1686    model MismatchingSize
1687        expandable connector EC
1688        end EC;
1689
1690        parameter Integer n = 2;
1691
1692        EC ec1[n], ec2[n + 1];
1693    equation
1694        connect(ec1, ec2);
1695
1696    annotation(__JModelica(UnitTesting(tests={
1697        ErrorTestCase(
1698            name="Error_MismatchingSize",
1699            description="Mismatching sizes.",
1700            errorMessage="
1701Error at line 9, column 9, in file '...', ARRAY_SIZE_MISMATCH_IN_CONNECT:
1702  Sizes do not match in connection, size of 'ec1' is [2] and size of 'ec2' is [3]
1703")})));
1704    end MismatchingSize;
1705
1706
1707    model ExpandableToExpandableArray
1708        expandable connector EC
1709        end EC;
1710
1711        connector C = Real;
1712
1713        parameter Integer n = 2;
1714
1715        EC ec1, ec2[n];
1716        C c1;
1717    equation
1718        connect(c1, ec2[2].a);
1719        connect(ec1, ec2);
1720        c1 = time;
1721
1722    annotation(__JModelica(UnitTesting(tests={
1723        ErrorTestCase(
1724            name="Error_ExpandableToExpandableArray",
1725            description="Attempt to connect an expandable connector to an
1726                         expandable connector array cell element.",
1727            errorMessage="
1728Error at line 13, column 9, in file '...', ARRAY_SIZE_MISMATCH_IN_CONNECT:
1729  Sizes do not match in connection, size of 'ec1' is scalar and size of 'ec2' is [2]
1730")})));
1731    end ExpandableToExpandableArray;
1732
1733    model ExpandableToExpandableArrayCellElement
1734        expandable connector EC
1735        end EC;
1736
1737        connector C = Real;
1738
1739        parameter Integer n = 2;
1740
1741        EC ec1[n], ec2[n];
1742        C c1;
1743    equation
1744        connect(ec1, ec2[2]);
1745        connect(c1, ec2[2].a);
1746
1747    annotation(__JModelica(UnitTesting(tests={
1748        ErrorTestCase(
1749            name="Error_ExpandableToExpandableArrayCellElement",
1750            description="Mismatching sizes.",
1751            errorMessage="
1752Error at line 12, column 9, in file '...', ARRAY_SIZE_MISMATCH_IN_CONNECT:
1753  Sizes do not match in connection, size of 'ec1' is [2] and size of 'ec2[2]' is scalar
1754")})));
1755    end ExpandableToExpandableArrayCellElement;
1756
1757
1758    model WrongSizeSlice
1759        expandable connector EC
1760        end EC;
1761
1762        connector C = Real;
1763
1764        EC ec1[3], ec2[3], ec3[3];
1765        C c[4];
1766        C c2[2,3];
1767    equation
1768        connect(c[1:2], ec1.a); /* Error */
1769        connect(ec1, ec2);
1770        connect(ec2, ec3);
1771        connect(ec3.a, c[3:4]); /* Error */
1772        connect(ec1.b, c2);     /* Error */
1773
1774    annotation(__JModelica(UnitTesting(tests={
1775        ErrorTestCase(
1776            name="Error_WrongSizeSlice",
1777            description="Mismatching sizes.",
1778            errorMessage="
1779Error at line 11, column 9, in file '...', ARRAY_SIZE_MISMATCH_IN_CONNECT:
1780  Sizes do not match in connection, size of the part of 'ec1.a' referring to the expandable connector is [3] and size of 'c[1:2]' is [2]
1781
1782Error at line 14, column 9, in file '...', ARRAY_SIZE_MISMATCH_IN_CONNECT:
1783  Sizes do not match in connection, size of the part of 'ec3.a' referring to the expandable connector is [3] and size of 'c[3:4]' is [2]
1784
1785Error at line 15, column 9, in file '...', ARRAY_SIZE_MISMATCH_IN_CONNECT:
1786  Sizes do not match in connection, size of the part of 'ec1.b' referring to the expandable connector is [3] and size of 'c2' is [2, 3]
1787")})));
1788    end WrongSizeSlice;
1789   
1790   
1791    model WrongNdimsInSlice
1792        expandable connector EC1
1793            EC2 ec2[3];
1794        end EC1;
1795
1796        expandable connector EC2
1797        end EC2;
1798
1799        connector C = Real;
1800
1801        constant Integer n = 3;
1802
1803        EC1 ec1[n];
1804        EC2 ec3[n];
1805
1806        C c1;
1807    equation
1808        connect(c1, ec1.ec2[1].a);        /* Error */
1809        connect(ec1.ec2, ec3);            /* Error */
1810        c1 = time;
1811
1812    annotation(__JModelica(UnitTesting(tests={
1813        ErrorTestCase(
1814            name="Error_WrongNdimsInSlice",
1815            description="Mismatching sizes.",
1816            errorMessage="
1817Error at line 18, column 9, in file '...', ARRAY_SIZE_MISMATCH_IN_CONNECT:
1818  Sizes do not match in connection, size of the part of 'ec1.ec2[1].a' referring to the expandable connector is [3] and size of 'c1' is scalar
1819
1820Error at line 19, column 9, in file '...', ARRAY_SIZE_MISMATCH_IN_CONNECT:
1821  Sizes do not match in connection, size of 'ec1.ec2' is [3, 3] and size of 'ec3' is [3]
1822")})));
1823    end WrongNdimsInSlice;
1824   
1825   
1826    // TODO: This should give an error because the ndims in second connect does not match
1827    model WrongNdimsInSlice2
1828        expandable connector EC
1829        end EC;
1830       
1831        connector C = Real;
1832       
1833        EC ec1;
1834        EC ec2[2];
1835        C c[2, 2];
1836    equation
1837        connect(ec1.a, ec2[:]);
1838        connect(ec1.a[1:2].b[:, 1:2], c);
1839    end WrongNdimsInSlice2;
1840
1841// TODO: Add test of recursion error through array - see Source.checkRecursion (ExpandableConnectors.jrag:803)
1842
1843end Error;
1844
1845
1846
1847end ExpandableConnectorArrays;
Note: See TracBrowser for help on using the repository browser.