source: branches/dev-mo-2530/Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo @ 13922

Last change on this file since 13922 was 13922, checked in by molsson, 6 weeks ago

Merged revision(s) 13898-13913 from branches/dev-mo-2617:
#5843 Moved type checking of conditional attributes so that it is always done.
........
#5843 Conditional attribute requires variability fixed parameter or less.
........
#5843 Updated error message NON_BOOLEAN_CONDITIONAL_GUARD to say Boolean instead of boolean.
........
#5843 Merged non-scalar and non-boolean conditional guard error messages.
........

File size: 76.3 KB
Line 
1/*
2    Copyright (C) 2009-2013 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
17
18package ConnectTests
19
20  model ConnectTest1
21
22        connector Ca
23                flow Real x;
24                Real y;
25        end Ca;
26       
27        connector Cb
28                flow Real x;
29                Real y;
30        end Cb;
31       
32        model C2
33                Ca ca;
34                Cb cb;
35        equation
36      connect(ca,cb);
37    end C2;
38   
39    C2 c2; 
40     
41    annotation(__JModelica(UnitTesting(tests={
42        FlatteningTestCase(
43            name="ConnectTest1",
44            description="Test of generation of connection equations.",
45            flatModel="
46fclass ConnectTests.ConnectTest1
47 Real c2.ca.x;
48 Real c2.ca.y;
49 Real c2.cb.x;
50 Real c2.cb.y;
51equation
52 - c2.ca.x - c2.cb.x = 0.0;
53 c2.ca.y = c2.cb.y;
54 c2.ca.x = 0.0;
55 c2.cb.x = 0.0;
56end ConnectTests.ConnectTest1;
57")})));
58   end ConnectTest1;
59
60    model ConnectTest2_Err
61
62        connector Ca
63                flow Real x;
64                Real y;
65        end Ca;
66       
67        connector Cb
68                flow Real x;
69                Real y;
70        end Cb;
71       
72        model C2
73                Ca ca;
74                Cb cb;
75        equation
76      connect(cc,cb);
77    end C2;
78   
79    C2 c2; 
80     
81
82    annotation(__JModelica(UnitTesting(tests={
83        ErrorTestCase(
84            name="ConnectTest2_Err",
85            description="Basic test of name lookup in connect clauses",
86            errorMessage="
871 errors found:
88
89Error at line 17, column 15, in file 'Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo',
90In component c2:
91  Cannot find class or component declaration for cc
92")})));
93   end ConnectTest2_Err;
94   
95model ConnectTest3
96 block Gain
97  "Output the product of a gain value with the input signal" 
98 
99  parameter Real k=1 "Gain value multiplied with input signal";
100public 
101  RealInput u "Input signal connector";
102  RealOutput y "Output signal connector";
103equation 
104  y = k*u;
105end Gain;
106 
107connector RealInput = input RealSignal "'input Real' as connector";
108 
109connector RealSignal
110  "Real port (both input/output possible)" 
111  type SignalType = Real;
112 
113  extends SignalType;
114 
115end RealSignal;
116 
117connector RealOutput = output RealSignal "'output Real' as connector";
118 
119block Constant 
120  "Generate constant signal of type Real" 
121  parameter Real k=1 "Constant output value";
122  extends SO;
123equation 
124  y = k;
125end Constant;
126 
127partial block SO
128  "Single Output continuous control block" 
129  RealOutput y "Connector of Real output signal";
130end SO; 
131 
132  Gain gain;
133  Constant const;
134equation 
135  connect(const.y, gain.u);
136
137
138
139    annotation(__JModelica(UnitTesting(tests={
140        FlatteningTestCase(
141            name="ConnectTest3",
142            description="Test of generation of connection equations",
143            flatModel="
144fclass ConnectTests.ConnectTest3
145 parameter Real gain.k = 1 \"Gain value multiplied with input signal\" /* 1 */;
146 ConnectTests.ConnectTest3.RealInput gain.u \"Input signal connector\";
147 ConnectTests.ConnectTest3.RealOutput gain.y \"Output signal connector\";
148 parameter Real const.k = 1 \"Constant output value\" /* 1 */;
149 ConnectTests.ConnectTest3.RealOutput const.y \"Connector of Real output signal\";
150equation
151 gain.y = gain.k * gain.u;
152 const.y = const.k;
153 const.y = gain.u;
154
155public
156 type ConnectTests.ConnectTest3.RealInput = Real;
157 type ConnectTests.ConnectTest3.RealOutput = Real;
158end ConnectTests.ConnectTest3;
159")})));
160end ConnectTest3;
161
162  model ConnectTest4
163
164        connector Ca
165                flow Real x;
166                Real y;
167        end Ca;
168       
169        connector Cb
170                flow Real x;
171                Real y;
172        end Cb;
173       
174        model C2
175                Ca ca;
176                Cb cb;
177                Ca ca2;
178        equation
179        ca2.x =3;
180      connect(ca,cb);
181    end C2;
182   
183    C2 c2; 
184     
185
186    annotation(__JModelica(UnitTesting(tests={
187        FlatteningTestCase(
188            name="ConnectTest4",
189            description="Test of generation of connection equations.",
190            flatModel="
191fclass ConnectTests.ConnectTest4
192 Real c2.ca.x;
193 Real c2.ca.y;
194 Real c2.cb.x;
195 Real c2.cb.y;
196 Real c2.ca2.x;
197 Real c2.ca2.y;
198equation
199 c2.ca2.x = 3;
200 - c2.ca.x - c2.cb.x = 0.0;
201 c2.ca.y = c2.cb.y;
202 c2.ca.x = 0.0;
203 c2.cb.x = 0.0;
204 c2.ca2.x = 0.0;
205end ConnectTests.ConnectTest4;
206")})));
207   end ConnectTest4;
208
209model ConnectTest5
210  connector C
211    parameter Integer n = 2;
212    Real x[n];
213  end C;
214  C c1;
215  C c2;
216
217equation
218  connect(c1,c2);
219  c1.x = {1,2};
220
221
222annotation(__JModelica(UnitTesting(tests={
223    FlatteningTestCase(
224        name="ConnectTest5",
225        description="Test of generation of connection equations.",
226        flatModel="
227fclass ConnectTests.ConnectTest5
228 structural parameter Integer c1.n = 2 /* 2 */;
229 potential Real c1.x[2];
230 structural parameter Integer c2.n = 2 /* 2 */;
231 potential Real c2.x[2];
232equation
233 c1.x[1:2] = {1, 2};
234 c1.x[1:2] = c2.x[1:2];
235end ConnectTests.ConnectTest5;
236")})));
237end ConnectTest5;
238
239
240model ConnectTest6
241        connector A
242                Real y[2];
243                flow Real x[2];
244        end A;
245       
246        model B
247                A a1;
248                A a2;
249          equation
250            connect(a1,a2);
251        end B;
252       
253        B b1;
254        B b2;
255equation
256        connect(b1.a1, b2.a2);
257
258    annotation(__JModelica(UnitTesting(tests={
259        FlatteningTestCase(
260            name="ConnectTest6",
261            description="Connecting array flow variables",
262            flatModel="
263fclass ConnectTests.ConnectTest6
264 Real b1.a1.y[2];
265 Real b1.a1.x[2];
266 Real b1.a2.y[2];
267 Real b1.a2.x[2];
268 Real b2.a1.y[2];
269 Real b2.a1.x[2];
270 Real b2.a2.y[2];
271 Real b2.a2.x[2];
272equation
273 b1.a1.x[1:2] + b2.a2.x[1:2] = zeros(2);
274 b1.a1.y[1:2] = b2.a2.y[1:2];
275 - b1.a1.x[1:2] - b1.a2.x[1:2] = zeros(2);
276 b1.a1.y[1:2] = b1.a2.y[1:2];
277 b1.a2.x[1:2] = zeros(2);
278 - b2.a1.x[1:2] - b2.a2.x[1:2] = zeros(2);
279 b2.a1.y[1:2] = b2.a2.y[1:2];
280 b2.a1.x[1:2] = zeros(2);
281end ConnectTests.ConnectTest6;
282")})));
283end ConnectTest6;
284
285
286model ConnectTest7
287    connector A
288        Real x;
289        flow Real y;
290    end A;
291   
292    A a1[2];
293    A a2[2];
294equation
295    connect(a1, a2);
296    a1.x = ones(2);
297
298annotation(__JModelica(UnitTesting(tests={
299    FlatteningTestCase(
300        name="ConnectTest7",
301        description="Connecting arrays of connectors",
302        flatModel="
303fclass ConnectTests.ConnectTest7
304 potential Real a1[1].x;
305 flow Real a1[1].y;
306 potential Real a1[2].x;
307 flow Real a1[2].y;
308 potential Real a2[1].x;
309 flow Real a2[1].y;
310 potential Real a2[2].x;
311 flow Real a2[2].y;
312equation
313 {a1[1].x, a1[2].x} = ones(2);
314 a1[1].x = a2[1].x;
315 - a1[1].y - a2[1].y = 0.0;
316 a1[2].x = a2[2].x;
317 - a1[2].y - a2[2].y = 0.0;
318 a1[1].y = 0.0;
319 a1[2].y = 0.0;
320 a2[1].y = 0.0;
321 a2[2].y = 0.0;
322end ConnectTests.ConnectTest7;
323")})));
324end ConnectTest7;
325
326
327model ConnectTest8
328    connector A
329        Real x;
330        flow Real y;
331    end A;
332   
333    A a[4];
334equation
335    for i in 1:3 loop
336        connect(a[i], a[i+1]);
337    end for;
338
339annotation(__JModelica(UnitTesting(tests={
340    FlatteningTestCase(
341        name="ConnectTest8",
342        description="Connect in for loop",
343        flatModel="
344fclass ConnectTests.ConnectTest8
345 potential Real a[1].x;
346 flow Real a[1].y;
347 potential Real a[2].x;
348 flow Real a[2].y;
349 potential Real a[3].x;
350 flow Real a[3].y;
351 potential Real a[4].x;
352 flow Real a[4].y;
353equation
354 a[1].x = a[2].x;
355 a[2].x = a[3].x;
356 a[3].x = a[4].x;
357 - a[1].y - a[2].y - a[3].y - a[4].y = 0.0;
358 a[1].y = 0.0;
359 a[2].y = 0.0;
360 a[3].y = 0.0;
361 a[4].y = 0.0;
362end ConnectTests.ConnectTest8;
363")})));
364end ConnectTest8;
365
366
367model ConnectTest9
368        connector A
369                Real x;
370                flow Real y;
371        end A;
372       
373        A a[2];
374equation
375        connect(a[1], a[2]);
376
377annotation(__JModelica(UnitTesting(tests={
378    FlatteningTestCase(
379        name="ConnectTest9",
380        description="Connecting array elements",
381        flatModel="
382fclass ConnectTests.ConnectTest9
383 potential Real a[1].x;
384 flow Real a[1].y;
385 potential Real a[2].x;
386 flow Real a[2].y;
387equation
388 a[1].x = a[2].x;
389 - a[1].y - a[2].y = 0.0;
390 a[1].y = 0.0;
391 a[2].y = 0.0;
392end ConnectTests.ConnectTest9;
393")})));
394end ConnectTest9;
395
396
397model ConnectTest10
398        connector A
399                Real x;
400                Real y;
401        end A;
402       
403        connector B
404                Real y;
405                Real x;
406        end B;
407       
408        A a;
409        B b;
410equation
411        connect(a, b);
412
413annotation(__JModelica(UnitTesting(tests={
414    FlatteningTestCase(
415        name="ConnectTest10",
416        description="Check that order of variables within connector does not matter",
417        flatModel="
418fclass ConnectTests.ConnectTest10
419 potential Real a.x;
420 potential Real a.y;
421 potential Real b.y;
422 potential Real b.x;
423equation
424 a.x = b.x;
425 a.y = b.y;
426end ConnectTests.ConnectTest10;
427")})));
428end ConnectTest10;
429
430
431model ConnectTest11
432        connector B
433            Real x;
434            flow Real y;
435        end B;
436 
437        connector C
438            B b1;
439            B b2;
440        end C;
441 
442        C c1;
443        C c2;
444equation
445        connect(c1, c2);
446
447annotation(__JModelica(UnitTesting(tests={
448    FlatteningTestCase(
449        name="ConnectTest11",
450        description="Connecting nestled connectors",
451        flatModel="
452fclass ConnectTests.ConnectTest11
453 potential Real c1.b1.x;
454 flow Real c1.b1.y;
455 potential Real c1.b2.x;
456 flow Real c1.b2.y;
457 potential Real c2.b1.x;
458 flow Real c2.b1.y;
459 potential Real c2.b2.x;
460 flow Real c2.b2.y;
461equation
462 c1.b1.x = c2.b1.x;
463 - c1.b1.y - c2.b1.y = 0.0;
464 c1.b2.x = c2.b2.x;
465 - c1.b2.y - c2.b2.y = 0.0;
466 c1.b1.y = 0.0;
467 c1.b2.y = 0.0;
468 c2.b1.y = 0.0;
469 c2.b2.y = 0.0;
470end ConnectTests.ConnectTest11;
471")})));
472end ConnectTest11;
473
474
475model ConnectTest12
476        connector A
477                Real x;
478                flow Real y;
479        end A;
480       
481        connector B
482                A a[2];
483        end B;
484       
485        B b[3,4];
486equation
487        for i in 1:2, j in 1:3 loop
488                connect(b[i,j].a[1], b[i,j+1].a[1]);
489                connect(b[i,j].a[2], b[i+1,j].a[2]);
490                connect(b[i,j].a[1], b[i,j].a[2]);
491        end for;
492
493annotation(__JModelica(UnitTesting(tests={
494    FlatteningTestCase(
495        name="ConnectTest12",
496        description="Connect in for loop on nestles arrays of connectors",
497        flatModel="
498fclass ConnectTests.ConnectTest12
499 potential Real b[1,1].a[1].x;
500 flow Real b[1,1].a[1].y;
501 potential Real b[1,1].a[2].x;
502 flow Real b[1,1].a[2].y;
503 potential Real b[1,2].a[1].x;
504 flow Real b[1,2].a[1].y;
505 potential Real b[1,2].a[2].x;
506 flow Real b[1,2].a[2].y;
507 potential Real b[1,3].a[1].x;
508 flow Real b[1,3].a[1].y;
509 potential Real b[1,3].a[2].x;
510 flow Real b[1,3].a[2].y;
511 potential Real b[1,4].a[1].x;
512 flow Real b[1,4].a[1].y;
513 potential Real b[1,4].a[2].x;
514 flow Real b[1,4].a[2].y;
515 potential Real b[2,1].a[1].x;
516 flow Real b[2,1].a[1].y;
517 potential Real b[2,1].a[2].x;
518 flow Real b[2,1].a[2].y;
519 potential Real b[2,2].a[1].x;
520 flow Real b[2,2].a[1].y;
521 potential Real b[2,2].a[2].x;
522 flow Real b[2,2].a[2].y;
523 potential Real b[2,3].a[1].x;
524 flow Real b[2,3].a[1].y;
525 potential Real b[2,3].a[2].x;
526 flow Real b[2,3].a[2].y;
527 potential Real b[2,4].a[1].x;
528 flow Real b[2,4].a[1].y;
529 potential Real b[2,4].a[2].x;
530 flow Real b[2,4].a[2].y;
531 potential Real b[3,1].a[1].x;
532 flow Real b[3,1].a[1].y;
533 potential Real b[3,1].a[2].x;
534 flow Real b[3,1].a[2].y;
535 potential Real b[3,2].a[1].x;
536 flow Real b[3,2].a[1].y;
537 potential Real b[3,2].a[2].x;
538 flow Real b[3,2].a[2].y;
539 potential Real b[3,3].a[1].x;
540 flow Real b[3,3].a[1].y;
541 potential Real b[3,3].a[2].x;
542 flow Real b[3,3].a[2].y;
543 potential Real b[3,4].a[1].x;
544 flow Real b[3,4].a[1].y;
545 potential Real b[3,4].a[2].x;
546 flow Real b[3,4].a[2].y;
547equation
548 b[1,1].a[1].x = b[1,1].a[2].x;
549 b[1,1].a[2].x = b[1,2].a[1].x;
550 b[1,2].a[1].x = b[1,2].a[2].x;
551 b[1,2].a[2].x = b[1,3].a[1].x;
552 b[1,3].a[1].x = b[1,3].a[2].x;
553 b[1,3].a[2].x = b[1,4].a[1].x;
554 b[1,4].a[1].x = b[2,1].a[1].x;
555 b[2,1].a[1].x = b[2,1].a[2].x;
556 b[2,1].a[2].x = b[2,2].a[1].x;
557 b[2,2].a[1].x = b[2,2].a[2].x;
558 b[2,2].a[2].x = b[2,3].a[1].x;
559 b[2,3].a[1].x = b[2,3].a[2].x;
560 b[2,3].a[2].x = b[2,4].a[1].x;
561 b[2,4].a[1].x = b[3,1].a[2].x;
562 b[3,1].a[2].x = b[3,2].a[2].x;
563 b[3,2].a[2].x = b[3,3].a[2].x;
564 - b[1,1].a[1].y - b[1,1].a[2].y - b[1,2].a[1].y - b[1,2].a[2].y - b[1,3].a[1].y - b[1,3].a[2].y - b[1,4].a[1].y - b[2,1].a[1].y - b[2,1].a[2].y - b[2,2].a[1].y - b[2,2].a[2].y - b[2,3].a[1].y - b[2,3].a[2].y - b[2,4].a[1].y - b[3,1].a[2].y - b[3,2].a[2].y - b[3,3].a[2].y = 0.0;
565 b[1,1].a[1].y = 0.0;
566 b[1,1].a[2].y = 0.0;
567 b[1,2].a[1].y = 0.0;
568 b[1,2].a[2].y = 0.0;
569 b[1,3].a[1].y = 0.0;
570 b[1,3].a[2].y = 0.0;
571 b[1,4].a[1].y = 0.0;
572 b[1,4].a[2].y = 0.0;
573 b[2,1].a[1].y = 0.0;
574 b[2,1].a[2].y = 0.0;
575 b[2,2].a[1].y = 0.0;
576 b[2,2].a[2].y = 0.0;
577 b[2,3].a[1].y = 0.0;
578 b[2,3].a[2].y = 0.0;
579 b[2,4].a[1].y = 0.0;
580 b[2,4].a[2].y = 0.0;
581 b[3,1].a[1].y = 0.0;
582 b[3,1].a[2].y = 0.0;
583 b[3,2].a[1].y = 0.0;
584 b[3,2].a[2].y = 0.0;
585 b[3,3].a[1].y = 0.0;
586 b[3,3].a[2].y = 0.0;
587 b[3,4].a[1].y = 0.0;
588 b[3,4].a[2].y = 0.0;
589end ConnectTests.ConnectTest12;
590")})));
591end ConnectTest12;
592
593
594model ConnectTest13
595        connector A
596                Real x;
597                flow Real y;
598        end A;
599       
600        connector B
601                A a[2];
602        end B;
603       
604        B b[3];
605equation
606        for i in 1:2 loop
607                connect(b[i].a, b[i+1].a);
608        end for;
609
610annotation(__JModelica(UnitTesting(tests={
611    FlatteningTestCase(
612        name="ConnectTest13",
613        description="Connecting arrays of connectors in a for loop",
614        flatModel="
615fclass ConnectTests.ConnectTest13
616 potential Real b[1].a[1].x;
617 flow Real b[1].a[1].y;
618 potential Real b[1].a[2].x;
619 flow Real b[1].a[2].y;
620 potential Real b[2].a[1].x;
621 flow Real b[2].a[1].y;
622 potential Real b[2].a[2].x;
623 flow Real b[2].a[2].y;
624 potential Real b[3].a[1].x;
625 flow Real b[3].a[1].y;
626 potential Real b[3].a[2].x;
627 flow Real b[3].a[2].y;
628equation
629 b[1].a[1].x = b[2].a[1].x;
630 b[2].a[1].x = b[3].a[1].x;
631 - b[1].a[1].y - b[2].a[1].y - b[3].a[1].y = 0.0;
632 b[1].a[2].x = b[2].a[2].x;
633 b[2].a[2].x = b[3].a[2].x;
634 - b[1].a[2].y - b[2].a[2].y - b[3].a[2].y = 0.0;
635 b[1].a[1].y = 0.0;
636 b[1].a[2].y = 0.0;
637 b[2].a[1].y = 0.0;
638 b[2].a[2].y = 0.0;
639 b[3].a[1].y = 0.0;
640 b[3].a[2].y = 0.0;
641end ConnectTests.ConnectTest13;
642")})));
643end ConnectTest13;
644
645
646model ConnectTest14
647        connector A
648                Real x;
649                flow Real y;
650        end A;
651       
652        connector B
653                A a[2];
654        end B;
655       
656        B b1[2,2];
657        B b2[2,2];
658equation
659        connect(b1.a, b2.a);
660
661annotation(__JModelica(UnitTesting(tests={
662    FlatteningTestCase(
663        name="ConnectTest14",
664        description="Connecting nestled arrays of connectors",
665        flatModel="
666fclass ConnectTests.ConnectTest14
667 potential Real b1[1,1].a[1].x;
668 flow Real b1[1,1].a[1].y;
669 potential Real b1[1,1].a[2].x;
670 flow Real b1[1,1].a[2].y;
671 potential Real b1[1,2].a[1].x;
672 flow Real b1[1,2].a[1].y;
673 potential Real b1[1,2].a[2].x;
674 flow Real b1[1,2].a[2].y;
675 potential Real b1[2,1].a[1].x;
676 flow Real b1[2,1].a[1].y;
677 potential Real b1[2,1].a[2].x;
678 flow Real b1[2,1].a[2].y;
679 potential Real b1[2,2].a[1].x;
680 flow Real b1[2,2].a[1].y;
681 potential Real b1[2,2].a[2].x;
682 flow Real b1[2,2].a[2].y;
683 potential Real b2[1,1].a[1].x;
684 flow Real b2[1,1].a[1].y;
685 potential Real b2[1,1].a[2].x;
686 flow Real b2[1,1].a[2].y;
687 potential Real b2[1,2].a[1].x;
688 flow Real b2[1,2].a[1].y;
689 potential Real b2[1,2].a[2].x;
690 flow Real b2[1,2].a[2].y;
691 potential Real b2[2,1].a[1].x;
692 flow Real b2[2,1].a[1].y;
693 potential Real b2[2,1].a[2].x;
694 flow Real b2[2,1].a[2].y;
695 potential Real b2[2,2].a[1].x;
696 flow Real b2[2,2].a[1].y;
697 potential Real b2[2,2].a[2].x;
698 flow Real b2[2,2].a[2].y;
699equation
700 b1[1,1].a[1].x = b2[1,1].a[1].x;
701 - b1[1,1].a[1].y - b2[1,1].a[1].y = 0.0;
702 b1[1,1].a[2].x = b2[1,1].a[2].x;
703 - b1[1,1].a[2].y - b2[1,1].a[2].y = 0.0;
704 b1[1,2].a[1].x = b2[1,2].a[1].x;
705 - b1[1,2].a[1].y - b2[1,2].a[1].y = 0.0;
706 b1[1,2].a[2].x = b2[1,2].a[2].x;
707 - b1[1,2].a[2].y - b2[1,2].a[2].y = 0.0;
708 b1[2,1].a[1].x = b2[2,1].a[1].x;
709 - b1[2,1].a[1].y - b2[2,1].a[1].y = 0.0;
710 b1[2,1].a[2].x = b2[2,1].a[2].x;
711 - b1[2,1].a[2].y - b2[2,1].a[2].y = 0.0;
712 b1[2,2].a[1].x = b2[2,2].a[1].x;
713 - b1[2,2].a[1].y - b2[2,2].a[1].y = 0.0;
714 b1[2,2].a[2].x = b2[2,2].a[2].x;
715 - b1[2,2].a[2].y - b2[2,2].a[2].y = 0.0;
716 b1[1,1].a[1].y = 0.0;
717 b1[1,1].a[2].y = 0.0;
718 b1[1,2].a[1].y = 0.0;
719 b1[1,2].a[2].y = 0.0;
720 b1[2,1].a[1].y = 0.0;
721 b1[2,1].a[2].y = 0.0;
722 b1[2,2].a[1].y = 0.0;
723 b1[2,2].a[2].y = 0.0;
724 b2[1,1].a[1].y = 0.0;
725 b2[1,1].a[2].y = 0.0;
726 b2[1,2].a[1].y = 0.0;
727 b2[1,2].a[2].y = 0.0;
728 b2[2,1].a[1].y = 0.0;
729 b2[2,1].a[2].y = 0.0;
730 b2[2,2].a[1].y = 0.0;
731 b2[2,2].a[2].y = 0.0;
732end ConnectTests.ConnectTest14;
733")})));
734end ConnectTest14;
735
736
737model ConnectTest15
738        connector A
739                Real x;
740                flow Real y;
741        end A;
742       
743        connector B
744                A a[2];
745        end B;
746       
747        B b[2,2,2];
748equation
749        connect(b[1,:,:].a, b[2,:,:].a);
750
751annotation(__JModelica(UnitTesting(tests={
752    FlatteningTestCase(
753        name="ConnectTest15",
754        description="Connecting nestled arrays of connectors using simple slice operation",
755        flatModel="
756fclass ConnectTests.ConnectTest15
757 potential Real b[1,1,1].a[1].x;
758 flow Real b[1,1,1].a[1].y;
759 potential Real b[1,1,1].a[2].x;
760 flow Real b[1,1,1].a[2].y;
761 potential Real b[1,1,2].a[1].x;
762 flow Real b[1,1,2].a[1].y;
763 potential Real b[1,1,2].a[2].x;
764 flow Real b[1,1,2].a[2].y;
765 potential Real b[1,2,1].a[1].x;
766 flow Real b[1,2,1].a[1].y;
767 potential Real b[1,2,1].a[2].x;
768 flow Real b[1,2,1].a[2].y;
769 potential Real b[1,2,2].a[1].x;
770 flow Real b[1,2,2].a[1].y;
771 potential Real b[1,2,2].a[2].x;
772 flow Real b[1,2,2].a[2].y;
773 potential Real b[2,1,1].a[1].x;
774 flow Real b[2,1,1].a[1].y;
775 potential Real b[2,1,1].a[2].x;
776 flow Real b[2,1,1].a[2].y;
777 potential Real b[2,1,2].a[1].x;
778 flow Real b[2,1,2].a[1].y;
779 potential Real b[2,1,2].a[2].x;
780 flow Real b[2,1,2].a[2].y;
781 potential Real b[2,2,1].a[1].x;
782 flow Real b[2,2,1].a[1].y;
783 potential Real b[2,2,1].a[2].x;
784 flow Real b[2,2,1].a[2].y;
785 potential Real b[2,2,2].a[1].x;
786 flow Real b[2,2,2].a[1].y;
787 potential Real b[2,2,2].a[2].x;
788 flow Real b[2,2,2].a[2].y;
789equation
790 b[1,1,1].a[1].x = b[2,1,1].a[1].x;
791 - b[1,1,1].a[1].y - b[2,1,1].a[1].y = 0.0;
792 b[1,1,1].a[2].x = b[2,1,1].a[2].x;
793 - b[1,1,1].a[2].y - b[2,1,1].a[2].y = 0.0;
794 b[1,1,2].a[1].x = b[2,1,2].a[1].x;
795 - b[1,1,2].a[1].y - b[2,1,2].a[1].y = 0.0;
796 b[1,1,2].a[2].x = b[2,1,2].a[2].x;
797 - b[1,1,2].a[2].y - b[2,1,2].a[2].y = 0.0;
798 b[1,2,1].a[1].x = b[2,2,1].a[1].x;
799 - b[1,2,1].a[1].y - b[2,2,1].a[1].y = 0.0;
800 b[1,2,1].a[2].x = b[2,2,1].a[2].x;
801 - b[1,2,1].a[2].y - b[2,2,1].a[2].y = 0.0;
802 b[1,2,2].a[1].x = b[2,2,2].a[1].x;
803 - b[1,2,2].a[1].y - b[2,2,2].a[1].y = 0.0;
804 b[1,2,2].a[2].x = b[2,2,2].a[2].x;
805 - b[1,2,2].a[2].y - b[2,2,2].a[2].y = 0.0;
806 b[1,1,1].a[1].y = 0.0;
807 b[1,1,1].a[2].y = 0.0;
808 b[1,1,2].a[1].y = 0.0;
809 b[1,1,2].a[2].y = 0.0;
810 b[1,2,1].a[1].y = 0.0;
811 b[1,2,1].a[2].y = 0.0;
812 b[1,2,2].a[1].y = 0.0;
813 b[1,2,2].a[2].y = 0.0;
814 b[2,1,1].a[1].y = 0.0;
815 b[2,1,1].a[2].y = 0.0;
816 b[2,1,2].a[1].y = 0.0;
817 b[2,1,2].a[2].y = 0.0;
818 b[2,2,1].a[1].y = 0.0;
819 b[2,2,1].a[2].y = 0.0;
820 b[2,2,2].a[1].y = 0.0;
821 b[2,2,2].a[2].y = 0.0;
822end ConnectTests.ConnectTest15;
823")})));
824end ConnectTest15;
825
826
827model ConnectTest16
828    connector A
829        Real x;
830    end A;
831   
832    model B
833        A a1[2];
834        A a2[2];
835    equation
836        connect(a1, a2);
837    end B;
838   
839    B b[2];
840
841    annotation(__JModelica(UnitTesting(tests={
842        FlatteningTestCase(
843            name="ConnectTest16",
844            description="Connecting arrays of connectors within an array of component instances, no indices",
845            flatModel="
846fclass ConnectTests.ConnectTest16
847 Real b[1].a1[1].x;
848 Real b[1].a1[2].x;
849 Real b[1].a2[1].x;
850 Real b[1].a2[2].x;
851 Real b[2].a1[1].x;
852 Real b[2].a1[2].x;
853 Real b[2].a2[1].x;
854 Real b[2].a2[2].x;
855equation
856 b[1].a1[1].x = b[1].a2[1].x;
857 b[1].a1[2].x = b[1].a2[2].x;
858 b[2].a1[1].x = b[2].a2[1].x;
859 b[2].a1[2].x = b[2].a2[2].x;
860end ConnectTests.ConnectTest16;
861")})));
862end ConnectTest16;
863
864
865model ConnectTest17
866    connector A
867        Real x;
868    end A;
869   
870    model B
871        A a1[3];
872        A a2[3];
873    equation
874        connect(a1[1:2], a2[2:3]);
875    end B;
876   
877    B b[2];
878
879    annotation(__JModelica(UnitTesting(tests={
880        FlatteningTestCase(
881            name="ConnectTest17",
882            description="Connecting arrays of connectors within an array of component instances, slices",
883            flatModel="
884fclass ConnectTests.ConnectTest17
885 Real b[1].a1[1].x;
886 Real b[1].a1[2].x;
887 Real b[1].a1[3].x;
888 Real b[1].a2[1].x;
889 Real b[1].a2[2].x;
890 Real b[1].a2[3].x;
891 Real b[2].a1[1].x;
892 Real b[2].a1[2].x;
893 Real b[2].a1[3].x;
894 Real b[2].a2[1].x;
895 Real b[2].a2[2].x;
896 Real b[2].a2[3].x;
897equation
898 b[1].a1[1].x = b[1].a2[2].x;
899 b[1].a1[2].x = b[1].a2[3].x;
900 b[2].a1[1].x = b[2].a2[2].x;
901 b[2].a1[2].x = b[2].a2[3].x;
902end ConnectTests.ConnectTest17;
903")})));
904end ConnectTest17;
905
906
907model ConnectTest18
908    connector A
909        Real x;
910    end A;
911   
912    model B
913        A a1;
914        A a2;
915        A a3[2];
916    equation
917        connect(a1, a3[1]);
918        connect(a2, a3[2]);
919    end B;
920   
921    B b[2];
922
923    annotation(__JModelica(UnitTesting(tests={
924        FlatteningTestCase(
925            name="ConnectTest18",
926            description="Connecting single element in array of connectors",
927            flatModel="
928fclass ConnectTests.ConnectTest18
929 Real b[1].a1.x;
930 Real b[1].a2.x;
931 Real b[1].a3[1].x;
932 Real b[1].a3[2].x;
933 Real b[2].a1.x;
934 Real b[2].a2.x;
935 Real b[2].a3[1].x;
936 Real b[2].a3[2].x;
937equation
938 b[1].a1.x = b[1].a3[1].x;
939 b[1].a2.x = b[1].a3[2].x;
940 b[2].a1.x = b[2].a3[1].x;
941 b[2].a2.x = b[2].a3[2].x;
942end ConnectTests.ConnectTest18;
943")})));
944end ConnectTest18;
945
946
947model ConnectTest19
948    model A
949        B a1;
950        B a2[1];
951    equation
952        connect(a1, a2[1]);
953    end A;
954       
955        connector B = Real;
956   
957    A b[2];
958
959    annotation(__JModelica(UnitTesting(tests={
960        FlatteningTestCase(
961            name="ConnectTest19",
962            description="Connecting single element in array of reals",
963            flatModel="
964fclass ConnectTests.ConnectTest19
965 Real b[1].a1;
966 Real b[1].a2[1];
967 Real b[2].a1;
968 Real b[2].a2[1];
969equation
970 b[1].a1 = b[1].a2[1];
971 b[2].a1 = b[2].a2[1];
972end ConnectTests.ConnectTest19;
973")})));
974end ConnectTest19;
975
976
977model ConnectTest20
978    model A
979        B a1;
980        B a2;
981        B a3[2];
982    equation
983        connect(a1, a3[1]);
984        connect(a2, a3[2]);
985    end B;
986   
987    connector B = Real;
988   
989    A b[2];
990
991    annotation(__JModelica(UnitTesting(tests={
992        FlatteningTestCase(
993            name="ConnectTest20",
994            description="Connecting several elemens in array of reals, one at a time",
995            flatModel="
996fclass ConnectTests.ConnectTest20
997 Real b[1].a1;
998 Real b[1].a2;
999 Real b[1].a3[2];
1000 Real b[2].a1;
1001 Real b[2].a2;
1002 Real b[2].a3[2];
1003equation
1004 b[1].a1 = b[1].a3[1];
1005 b[1].a2 = b[1].a3[2];
1006 b[2].a1 = b[2].a3[1];
1007 b[2].a2 = b[2].a3[2];
1008end ConnectTests.ConnectTest20;
1009")})));
1010end ConnectTest20;
1011
1012
1013model ConnectTest21
1014    model A
1015        B a1[3];
1016        B a2[3];
1017    equation
1018        connect(a1[1:2], a2[2:3]);
1019    end A;
1020   
1021    connector B = Real;
1022   
1023    A b[2];
1024
1025    annotation(__JModelica(UnitTesting(tests={
1026        FlatteningTestCase(
1027            name="ConnectTest21",
1028            description="Connecting arrays of reals within an array of component instances, slices",
1029            flatModel="
1030fclass ConnectTests.ConnectTest21
1031 Real b[1].a1[3];
1032 Real b[1].a2[3];
1033 Real b[2].a1[3];
1034 Real b[2].a2[3];
1035equation
1036 b[1].a1[1] = b[1].a2[2];
1037 b[1].a1[2] = b[1].a2[3];
1038 b[2].a1[1] = b[2].a2[2];
1039 b[2].a1[2] = b[2].a2[3];
1040end ConnectTests.ConnectTest21;
1041")})));
1042end ConnectTest21;
1043
1044model ConnectTest22
1045    connector C = Real[2,2];
1046
1047    model A
1048        B a1[3];
1049        B a2[3];
1050    equation
1051        connect(a1[1:2].b1[1,:], a2[2:3].b1[2,:]);
1052    end A;
1053   
1054    connector B
1055        C b1;
1056    end B;
1057   
1058    A b[2];
1059
1060    annotation(__JModelica(UnitTesting(tests={
1061        FlatteningTestCase(
1062            name="ConnectTest22",
1063            description="Connecting arrays of reals within an array of component instances, complex slices",
1064            flatModel="
1065fclass ConnectTests.ConnectTest22
1066 ConnectTests.ConnectTest22.C b[1].a1[1].b1[2,2];
1067 ConnectTests.ConnectTest22.C b[1].a1[2].b1[2,2];
1068 ConnectTests.ConnectTest22.C b[1].a1[3].b1[2,2];
1069 ConnectTests.ConnectTest22.C b[1].a2[1].b1[2,2];
1070 ConnectTests.ConnectTest22.C b[1].a2[2].b1[2,2];
1071 ConnectTests.ConnectTest22.C b[1].a2[3].b1[2,2];
1072 ConnectTests.ConnectTest22.C b[2].a1[1].b1[2,2];
1073 ConnectTests.ConnectTest22.C b[2].a1[2].b1[2,2];
1074 ConnectTests.ConnectTest22.C b[2].a1[3].b1[2,2];
1075 ConnectTests.ConnectTest22.C b[2].a2[1].b1[2,2];
1076 ConnectTests.ConnectTest22.C b[2].a2[2].b1[2,2];
1077 ConnectTests.ConnectTest22.C b[2].a2[3].b1[2,2];
1078equation
1079 b[1].a1[1].b1[1,1] = b[1].a2[2].b1[2,1];
1080 b[1].a1[1].b1[1,2] = b[1].a2[2].b1[2,2];
1081 b[1].a1[2].b1[1,1] = b[1].a2[3].b1[2,1];
1082 b[1].a1[2].b1[1,2] = b[1].a2[3].b1[2,2];
1083 b[2].a1[1].b1[1,1] = b[2].a2[2].b1[2,1];
1084 b[2].a1[1].b1[1,2] = b[2].a2[2].b1[2,2];
1085 b[2].a1[2].b1[1,1] = b[2].a2[3].b1[2,1];
1086 b[2].a1[2].b1[1,2] = b[2].a2[3].b1[2,2];
1087
1088public
1089 type ConnectTests.ConnectTest22.C = Real;
1090end ConnectTests.ConnectTest22;
1091")})));
1092end ConnectTest22;
1093
1094
1095model ConnectTest23
1096    connector A = Real;
1097   
1098        A x[4];
1099        A y[4];
1100        A z[4];
1101equation
1102        x = 1:4;
1103        z = 5:8;
1104        for i in 1:4 loop
1105                if i < 3 then
1106                        connect(x[i], y[i]);
1107        else
1108            connect(z[i], y[i]);
1109                end if;
1110        end for;
1111
1112    annotation(__JModelica(UnitTesting(tests={
1113        FlatteningTestCase(
1114            name="ConnectTest23",
1115            description="Connect clauses in if with parameter test",
1116            flatModel="
1117fclass ConnectTests.ConnectTest23
1118 Real x[4];
1119 Real y[4];
1120 Real z[4];
1121equation
1122 x[1:4] = 1:4;
1123 z[1:4] = 5:8;
1124 x[1] = y[1];
1125 x[2] = y[2];
1126 y[3] = z[3];
1127 y[4] = z[4];
1128end ConnectTests.ConnectTest23;
1129")})));
1130end ConnectTest23;
1131
1132
1133model ConnectTest24
1134    connector A = Real;
1135        A a = 1;
1136equation
1137        connect(a, a);
1138
1139    annotation(__JModelica(UnitTesting(tests={
1140        FlatteningTestCase(
1141            name="ConnectTest24",
1142            description="Check that self-connections are allowed with a warning",
1143            flatModel="
1144fclass ConnectTests.ConnectTest24
1145 Real a = 1;
1146end ConnectTests.ConnectTest24;
1147")})));
1148end ConnectTest24;
1149
1150
1151model ConnectTest25
1152    connector A = Real;
1153    A a = 1;
1154equation
1155    connect(a, a);
1156
1157    annotation(__JModelica(UnitTesting(tests={
1158        WarningTestCase(
1159            name="ConnectTest25",
1160            description="Check that self-connections are allowed with a warning",
1161            errorMessage="
11621 warnings found:
1163
1164Warning at line 5, column 5, in file 'Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo':
1165  Ignored connection from connector to itself
1166")})));
1167end ConnectTest25;
1168
1169
1170model ConnectTest26
1171    connector A
1172        B b[2];
1173    end A;
1174   
1175    connector B
1176        Real x;
1177        flow Real y;
1178    end B;
1179   
1180    A a1, a2;
1181equation
1182    connect(a1, a2);
1183
1184annotation(__JModelica(UnitTesting(tests={
1185    FlatteningTestCase(
1186        name="ConnectTest26",
1187        description="Test array of composite connectors in connector",
1188        flatModel="
1189fclass ConnectTests.ConnectTest26
1190 potential Real a1.b[1].x;
1191 flow Real a1.b[1].y;
1192 potential Real a1.b[2].x;
1193 flow Real a1.b[2].y;
1194 potential Real a2.b[1].x;
1195 flow Real a2.b[1].y;
1196 potential Real a2.b[2].x;
1197 flow Real a2.b[2].y;
1198equation
1199 a1.b[1].x = a2.b[1].x;
1200 - a1.b[1].y - a2.b[1].y = 0.0;
1201 a1.b[2].x = a2.b[2].x;
1202 - a1.b[2].y - a2.b[2].y = 0.0;
1203 a1.b[1].y = 0.0;
1204 a1.b[2].y = 0.0;
1205 a2.b[1].y = 0.0;
1206 a2.b[2].y = 0.0;
1207end ConnectTests.ConnectTest26;
1208")})));
1209end ConnectTest26;
1210
1211
1212model ConnectTest27
1213    connector T = Real;
1214    T[2] x1 if false;
1215    T[3] x2 = (1:3) * time;
1216equation
1217    connect(x1, x2);
1218
1219    annotation(__JModelica(UnitTesting(tests={
1220        FlatteningTestCase(
1221            name="ConnectTest27",
1222            description="Allow connect clauses with mismatch in sizes if one side refers to a disabled conditional",
1223            flatModel="
1224fclass ConnectTests.ConnectTest27
1225 Real x2[3] = (1:3) * time;
1226end ConnectTests.ConnectTest27;
1227")})));
1228end ConnectTest27;
1229
1230
1231model ConnectTest28
1232    connector C = input Real;
1233    model A
1234        C x;
1235    equation
1236        x = time;
1237    end A;
1238   
1239    model B
1240        extends A;
1241        C x;
1242        C y;
1243    equation
1244        connect(x, y);
1245    end B;
1246   
1247    B b;
1248
1249    annotation(__JModelica(UnitTesting(tests={
1250        FlatteningTestCase(
1251            name="ConnectTest28",
1252            description="Check that connections to duplicate components work",
1253            flatModel="
1254fclass ConnectTests.ConnectTest28
1255 ConnectTests.ConnectTest28.C b.y;
1256 ConnectTests.ConnectTest28.C b.x;
1257equation
1258 b.x = time;
1259 b.x = b.y;
1260
1261public
1262 type ConnectTests.ConnectTest28.C = Real;
1263end ConnectTests.ConnectTest28;
1264")})));
1265end ConnectTest28;
1266
1267model ConnectTest29
1268    connector C
1269        Real a;
1270    end C;
1271   
1272    parameter Boolean[2] b = {true,false};
1273    C[2] x,y;
1274equation
1275    for i in 1:2 loop
1276        if b[i] then
1277            connect(x[i],y[i]);
1278        end if;
1279    end for;
1280
1281annotation(__JModelica(UnitTesting(tests={
1282    FlatteningTestCase(
1283        name="ConnectTest29",
1284        description="Connect in if in for",
1285        flatModel="
1286fclass ConnectTests.ConnectTest29
1287 structural parameter Boolean b[2] = {true, false} /* { true, false } */;
1288 potential Real x[1].a;
1289 potential Real x[2].a;
1290 potential Real y[1].a;
1291 potential Real y[2].a;
1292equation
1293 x[1].a = y[1].a;
1294end ConnectTests.ConnectTest29;
1295")})));
1296end ConnectTest29;
1297
1298
1299model ConnectTest30
1300    connector C
1301        Real a;
1302    end C;
1303   
1304    model A
1305        parameter Integer n = 2;
1306        C c[n];
1307    end A;
1308   
1309    A a1(c(a={1,2}));
1310    A a2;
1311equation
1312    connect(a1.c, a2.c[1:end]);
1313
1314    annotation(__JModelica(UnitTesting(tests={
1315        FlatteningTestCase(
1316            name="ConnectTest30",
1317            description="Size of range exp using end in connect, where size is discribed by parameter in other scope",
1318            flatModel="
1319fclass ConnectTests.ConnectTest30
1320 structural parameter Integer a1.n = 2 /* 2 */;
1321 Real a1.c[1].a = 1;
1322 Real a1.c[2].a = 2;
1323 structural parameter Integer a2.n = 2 /* 2 */;
1324 Real a2.c[1].a;
1325 Real a2.c[2].a;
1326equation
1327 a1.c[1].a = a2.c[1].a;
1328 a1.c[2].a = a2.c[2].a;
1329end ConnectTests.ConnectTest30;
1330")})));
1331end ConnectTest30;
1332
1333
1334
1335model ConnectOuterTest1
1336    connector C = Real;
1337   
1338    model B
1339        outer C c;
1340        C c2;
1341    equation
1342        connect(c, c2);
1343    end B;
1344   
1345    inner C c;
1346    B b;
1347
1348    annotation(__JModelica(UnitTesting(tests={
1349        FlatteningTestCase(
1350            name="ConnectOuterTest1",
1351            description="",
1352            flatModel="
1353fclass ConnectTests.ConnectOuterTest1
1354 Real c;
1355 Real b.c2;
1356equation
1357 b.c2 = c;
1358end ConnectTests.ConnectOuterTest1;
1359")})));
1360end ConnectOuterTest1;
1361
1362
1363model ConnectOuterTest2
1364    connector C = Real;
1365   
1366    model A
1367        C c;
1368    end A;
1369   
1370    model B
1371        outer A a;
1372        C c2;
1373    equation
1374        connect(a.c, c2);
1375    end B;
1376   
1377    inner A a;
1378    B b;
1379
1380    annotation(__JModelica(UnitTesting(tests={
1381        FlatteningTestCase(
1382            name="ConnectOuterTest2",
1383            description="",
1384            flatModel="
1385fclass ConnectTests.ConnectOuterTest2
1386 Real a.c;
1387 Real b.c2;
1388equation
1389 a.c = b.c2;
1390end ConnectTests.ConnectOuterTest2;
1391")})));
1392end ConnectOuterTest2;
1393
1394
1395model ConnectOuterTest3
1396    connector C
1397        Real x;
1398    end C;
1399           
1400    model B
1401        outer C c;
1402        C c2;
1403    equation
1404        connect(c, c2);
1405    end B;
1406   
1407    inner C c;
1408    B b;
1409
1410annotation(__JModelica(UnitTesting(tests={
1411    FlatteningTestCase(
1412        name="ConnectOuterTest3",
1413        description="",
1414        flatModel="
1415fclass ConnectTests.ConnectOuterTest3
1416 potential Real c.x;
1417 Real b.c2.x;
1418equation
1419 b.c2.x = c.x;
1420end ConnectTests.ConnectOuterTest3;
1421")})));
1422end ConnectOuterTest3;
1423
1424
1425model ConnectOuterTest4
1426    connector C
1427                Real x;
1428        end C;
1429   
1430    model A
1431        C c;
1432    end A;
1433   
1434    model B
1435        outer A a;
1436        C c2;
1437    equation
1438        connect(a.c, c2);
1439    end B;
1440   
1441    inner A a;
1442    B b;
1443
1444    annotation(__JModelica(UnitTesting(tests={
1445        FlatteningTestCase(
1446            name="ConnectOuterTest4",
1447            description="",
1448            flatModel="
1449fclass ConnectTests.ConnectOuterTest4
1450 Real a.c.x;
1451 Real b.c2.x;
1452equation
1453 a.c.x = b.c2.x;
1454end ConnectTests.ConnectOuterTest4;
1455")})));
1456end ConnectOuterTest4;
1457
1458
1459model ConnectOuterTest5
1460    connector C = Real;
1461   
1462    model B
1463        outer C[2] c;
1464        C c2;
1465    equation
1466        connect(c[1], c2);
1467    end B;
1468   
1469    inner C[2] c;
1470    B b;
1471
1472    annotation(__JModelica(UnitTesting(tests={
1473        FlatteningTestCase(
1474            name="ConnectOuterTest5",
1475            description="",
1476            flatModel="
1477fclass ConnectTests.ConnectOuterTest5
1478 Real c[2];
1479 Real b.c2;
1480equation
1481 b.c2 = c[1];
1482end ConnectTests.ConnectOuterTest5;
1483")})));
1484end ConnectOuterTest5;
1485
1486
1487model ConnectOuterTest6
1488    connector C = Real;
1489   
1490    model A
1491        C[2] c;
1492    end A;
1493   
1494    model B
1495        outer A[2] a;
1496        C c2;
1497    equation
1498        connect(a[1].c[1], c2);
1499    end B;
1500   
1501    inner A[2] a;
1502    B b;
1503
1504    annotation(__JModelica(UnitTesting(tests={
1505        FlatteningTestCase(
1506            name="ConnectOuterTest6",
1507            description="",
1508            flatModel="
1509fclass ConnectTests.ConnectOuterTest6
1510 Real a[1].c[2];
1511 Real a[2].c[2];
1512 Real b.c2;
1513equation
1514 a[1].c[1] = b.c2;
1515end ConnectTests.ConnectOuterTest6;
1516")})));
1517end ConnectOuterTest6;
1518
1519
1520model ConnectOuterTest7
1521    connector C
1522        Real x;
1523        flow Real y;
1524    end C;
1525   
1526    model A
1527        C c;
1528    end A;
1529   
1530    model B
1531        inner outer A a;
1532    end B;
1533   
1534        model D
1535        inner A a;
1536        B b;
1537    end D;
1538   
1539    D d;
1540
1541    annotation(__JModelica(UnitTesting(tests={
1542        FlatteningTestCase(
1543            name="ConnectOuterTest7",
1544            description="Non-connected connector in component declared inner outer",
1545            flatModel="
1546fclass ConnectTests.ConnectOuterTest7
1547 Real d.a.c.x;
1548 Real d.a.c.y;
1549 Real d.b.a.c.x;
1550 Real d.b.a.c.y;
1551equation
1552 d.a.c.y = 0.0;
1553 d.b.a.c.y = 0.0;
1554end ConnectTests.ConnectOuterTest7;
1555")})));
1556end ConnectOuterTest7;
1557
1558
1559model ConnectOuterTest8
1560    connector C
1561        Real x;
1562        flow Real y;
1563    end C;
1564   
1565    model A
1566        C c;
1567    end A;
1568   
1569    model B
1570        inner outer A a;
1571        C c;
1572        D d;
1573    equation
1574        connect(c, a.c);
1575    end B;
1576   
1577    model D
1578        outer A a;
1579        C c;
1580    equation
1581        connect(c, a.c);
1582    end D;
1583   
1584    inner A a;
1585    B b;
1586
1587    annotation(__JModelica(UnitTesting(tests={
1588        FlatteningTestCase(
1589            name="ConnectOuterTest8",
1590            description="Connected connector in component declared inner outer",
1591            flatModel="
1592fclass ConnectTests.ConnectOuterTest8
1593 Real a.c.x;
1594 Real a.c.y;
1595 Real b.a.c.x;
1596 Real b.a.c.y;
1597 Real b.c.x;
1598 Real b.c.y;
1599 Real b.d.c.x;
1600 Real b.d.c.y;
1601equation
1602 a.c.y - b.c.y = 0.0;
1603 a.c.x = b.c.x;
1604 b.a.c.y - b.d.c.y = 0.0;
1605 b.c.y = 0.0;
1606 b.a.c.x = b.d.c.x;
1607 b.d.c.y = 0.0;
1608end ConnectTests.ConnectOuterTest8;
1609")})));
1610end ConnectOuterTest8;
1611
1612
1613model ConnectOuterTest9
1614    connector C
1615        Real x;
1616        flow Real y;
1617    end C;
1618   
1619    model B
1620        inner outer C c1;
1621        C c2;
1622        D d;
1623    equation
1624        connect(c1, c2);
1625    end B;
1626   
1627    model D
1628        outer C c1;
1629        C c2;
1630    equation
1631        connect(c1, c2);
1632    end D;
1633   
1634    inner C c1;
1635    B b;
1636
1637annotation(__JModelica(UnitTesting(tests={
1638    FlatteningTestCase(
1639        name="ConnectOuterTest9",
1640        description="Connected connector declared inner outer",
1641        flatModel="
1642fclass ConnectTests.ConnectOuterTest9
1643 potential Real c1.x;
1644 flow Real c1.y;
1645 Real b.c1.x;
1646 Real b.c1.y;
1647 Real b.c2.x;
1648 Real b.c2.y;
1649 Real b.d.c2.x;
1650 Real b.d.c2.y;
1651equation
1652 c1.y = 0.0;
1653 b.c2.x = c1.x;
1654 - b.c2.y - c1.y = 0.0;
1655 b.c1.y = 0.0;
1656 b.c2.y = 0.0;
1657 b.c1.x = b.d.c2.x;
1658 - b.c1.y - b.d.c2.y = 0.0;
1659 b.d.c2.y = 0.0;
1660end ConnectTests.ConnectOuterTest9;
1661")})));
1662end ConnectOuterTest9;
1663
1664
1665
1666model ConnectErrTest1
1667    model A
1668        Real x;
1669    end A;
1670   
1671    connector B
1672        Real x;
1673    end B;
1674   
1675    A a;
1676    B b;
1677equation
1678    connect(a, b);
1679
1680    annotation(__JModelica(UnitTesting(tests={
1681        ErrorTestCase(
1682            name="ConnectErrTest1",
1683            description="",
1684            errorMessage="
16851 errors found:
1686
1687Error at line 13, column 13, in file 'Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo', CONNECT_WITH_INVALID_TYPE:
1688  Connecting to an instance of a non-connector type is not allowed
1689")})));
1690end ConnectErrTest1;
1691
1692
1693model ConnectErrTest2
1694    Real a;
1695    Real b;
1696equation
1697    connect(a, b);
1698
1699    annotation(__JModelica(UnitTesting(tests={
1700        ErrorTestCase(
1701            name="ConnectErrTest2",
1702            description="",
1703            errorMessage="
17042 errors found:
1705
1706Error at line 5, column 13, in file 'Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo', CONNECT_WITH_INVALID_TYPE:
1707  Connecting to an instance of a non-connector type is not allowed
1708
1709Error at line 5, column 16, in file 'Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo', CONNECT_WITH_INVALID_TYPE:
1710  Connecting to an instance of a non-connector type is not allowed
1711")})));
1712end ConnectErrTest2;
1713
1714
1715model ConnectErrTest3
1716    connector A
1717        Real x;
1718            Real y;
1719    end A;
1720   
1721    connector B
1722        Real x;
1723    end B;
1724   
1725    A a;
1726    B b;
1727equation
1728    connect(a, b);
1729
1730    annotation(__JModelica(UnitTesting(tests={
1731        ErrorTestCase(
1732            name="ConnectErrTest3",
1733            description="",
1734            errorMessage="
17351 errors found:
1736
1737Error at line 14, column 5, in file 'Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo', TYPE_MISMATCH_IN_CONNECT:
1738  Types of connected components do not match
1739")})));
1740end ConnectErrTest3;
1741
1742
1743model ConnectErrTest4
1744    connector A
1745        Real x;
1746        Real y;
1747    end A;
1748   
1749    connector B
1750        Real x;
1751    end B;
1752       
1753        connector C
1754                A a;
1755                Real z;
1756        end C;
1757   
1758    connector D
1759        B a;
1760        Real z;
1761    end D;
1762   
1763    C a;
1764    D b;
1765equation
1766    connect(a, b);
1767
1768    annotation(__JModelica(UnitTesting(tests={
1769        ErrorTestCase(
1770            name="ConnectErrTest4",
1771            description="",
1772            errorMessage="
17731 errors found:
1774
1775Error at line 24, column 5, in file 'Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo', TYPE_MISMATCH_IN_CONNECT:
1776  Types of connected components do not match
1777")})));
1778end ConnectErrTest4;
1779
1780
1781model ConnectErrTest5
1782    connector A
1783        Real x[3];
1784    end A;
1785   
1786    connector B
1787        Real x[4];
1788    end B;
1789   
1790    A a;
1791    B b;
1792equation
1793    connect(a, b);
1794
1795    annotation(__JModelica(UnitTesting(tests={
1796        ErrorTestCase(
1797            name="ConnectErrTest5",
1798            description="",
1799            errorMessage="
18001 errors found:
1801
1802Error at line 13, column 5, in file 'Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo', TYPE_MISMATCH_IN_CONNECT:
1803  Types of connected components do not match
1804")})));
1805end ConnectErrTest5;
1806
1807
1808model ConnectErrTest6
1809    connector A
1810        Real x;
1811    end A;
1812   
1813    A a1[3], a2[3];
1814equation
1815    connect(a1, a2[1:2]);
1816
1817    annotation(__JModelica(UnitTesting(tests={
1818        ErrorTestCase(
1819            name="ConnectErrTest6",
1820            description="",
1821            errorMessage="
18221 errors found:
1823
1824Error at line 8, column 5, in file 'Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo', ARRAY_SIZE_MISMATCH_IN_CONNECT:
1825  Sizes do not match in connection, size of 'a1' is [3] and size of 'a2[1:2]' is [2]
1826")})));
1827end ConnectErrTest6;
1828
1829
1830model ConnectErrTest7
1831    connector A
1832        Real x;
1833    end A;
1834   
1835    connector B
1836        Boolean x;
1837    end B;
1838   
1839    A a;
1840    B b;
1841equation
1842    connect(a, b);
1843
1844    annotation(__JModelica(UnitTesting(tests={
1845        ErrorTestCase(
1846            name="ConnectErrTest7",
1847            description="",
1848            errorMessage="
18491 errors found:
1850
1851Error at line 13, column 5, in file 'Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo', TYPE_MISMATCH_IN_CONNECT:
1852  Types of connected components do not match
1853")})));
1854end ConnectErrTest7;
1855
1856
1857model ConnectErrTest8
1858    connector A
1859        Real x;
1860    end A;
1861   
1862    connector B
1863        flow Real x;
1864    end B;
1865   
1866    A a;
1867    B b;
1868equation
1869    connect(a, b);
1870
1871    annotation(__JModelica(UnitTesting(tests={
1872        ErrorTestCase(
1873            name="ConnectErrTest8",
1874            description="",
1875            errorMessage="
18761 errors found:
1877
1878Error at line 13, column 5, in file 'Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo', TYPE_MISMATCH_IN_CONNECT:
1879  Types of connected components do not match
1880")})));
1881end ConnectErrTest8;
1882
1883
1884model ConnectErrTest9
1885    connector A
1886        stream Real x;
1887    end A;
1888   
1889    connector B
1890        flow Real x;
1891    end B;
1892   
1893    A a;
1894    B b;
1895equation
1896    connect(a, b);
1897
1898    annotation(__JModelica(UnitTesting(tests={
1899        ErrorTestCase(
1900            name="ConnectErrTest9",
1901            description="",
1902            errorMessage="
19031 errors found:
1904
1905Error at line 13, column 5, in file 'Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo', TYPE_MISMATCH_IN_CONNECT:
1906  Types of connected components do not match
1907")})));
1908end ConnectErrTest9;
1909
1910
1911model ConnectErrTest10
1912    connector A = Real;
1913   
1914    A x;
1915    A y = time;
1916equation
1917    if time < 2 then
1918        x = y + 2;
1919    else
1920        connect(x,y);
1921    end if;
1922
1923    annotation(__JModelica(UnitTesting(tests={
1924        ErrorTestCase(
1925            name="ConnectErrTest10",
1926            description="Connect clause in else branch of if with non-parameter test",
1927            errorMessage="
19281 errors found:
1929
1930Error at line 10, column 9, in file 'Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo':
1931  Connect clauses are not allowed in if equations with non-parameter or non-fixed conditions
1932")})));
1933end ConnectErrTest10;
1934
1935
1936model ConnectErrTest11
1937    connector A
1938        Real x;
1939    end A;
1940   
1941    connector B
1942        Real y;
1943    end B;
1944   
1945    model C
1946        A a;
1947    end C;
1948   
1949    C c;
1950    B b;
1951equation
1952    connect(c.a, b);
1953
1954    annotation(__JModelica(UnitTesting(tests={
1955        ErrorTestCase(
1956            name="ConnectErrTest11",
1957            description="Bad connection where one access contains dot",
1958            errorMessage="
19591 errors found:
1960
1961Error at line 17, column 5, in file 'Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo', TYPE_MISMATCH_IN_CONNECT:
1962  Types of connected components do not match
1963")})));
1964end ConnectErrTest11;
1965
1966model ConnectErrTest12
1967    connector A = Real;
1968   
1969    A x;
1970    A y = time;
1971   
1972    parameter Real p(start=3,fixed=false);
1973equation
1974    if p < 2 then
1975        x = y + 2;
1976    else
1977        connect(x,y);
1978    end if;
1979
1980    annotation(__JModelica(UnitTesting(tests={
1981        ErrorTestCase(
1982            name="ConnectErrTest12",
1983            description="Connect clause in else branch of if with non-fixed parameter test",
1984            errorMessage="
19851 errors found:
1986
1987Error at line 12, column 9, in file 'Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo':
1988  Connect clauses are not allowed in if equations with non-parameter or non-fixed conditions
1989")})));
1990end ConnectErrTest12;
1991
1992model ConnectErrTest13
1993    connector A = Real;
1994   
1995    A x;
1996    A y = time;
1997   
1998    parameter Real p(start=3,fixed=false);
1999equation
2000    if time < 2 then
2001        if p < 2 then
2002            connect(x,y);
2003        else
2004            connect(x,y);
2005        end if;
2006    else
2007        if p < 2 then
2008            connect(x,y);
2009        else
2010            connect(x,y);
2011        end if;
2012    end if;
2013
2014    annotation(__JModelica(UnitTesting(tests={
2015        ErrorTestCase(
2016            name="ConnectErrTest13",
2017            description="Connect clause in nested branch of if with non-fixed parameter test",
2018            errorMessage="
20194 errors found:
2020
2021Error at line 11, column 13, in file 'Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo':
2022  Connect clauses are not allowed in if equations with non-parameter or non-fixed conditions
2023
2024Error at line 13, column 13, in file 'Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo':
2025  Connect clauses are not allowed in if equations with non-parameter or non-fixed conditions
2026
2027Error at line 17, column 13, in file 'Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo':
2028  Connect clauses are not allowed in if equations with non-parameter or non-fixed conditions
2029
2030Error at line 19, column 13, in file 'Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo':
2031  Connect clauses are not allowed in if equations with non-parameter or non-fixed conditions
2032")})));
2033end ConnectErrTest13;
2034
2035model ConnectErrTest14
2036
2037    function f
2038        input Integer i;
2039        output Integer o;
2040        external;
2041    end f;
2042
2043    connector A = Real;
2044   
2045    A x;
2046    A y = time;
2047   
2048    parameter Integer p = 3;
2049    parameter Real[2] pa = 1:2;
2050equation
2051    if pa[f(p)] < 2 then
2052        x = y + 2;
2053    else
2054        connect(x,y);
2055    end if;
2056
2057    annotation(__JModelica(UnitTesting(tests={
2058        ErrorTestCase(
2059            name="ConnectErrTest14",
2060            description="Connect clause in nested branch of if with non-evaluable test",
2061            errorMessage="
20621 errors found:
2063
2064Error at line 17, column 8, in file 'Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo':
2065  Could not evaluate test expression for if equation containing connect clause
2066")})));
2067end ConnectErrTest14;
2068
2069model ConnectInIfNoErr1
2070    connector A = Real;
2071    A[3] a = (1:3) * time;
2072    A[3] b;
2073   
2074    parameter Boolean[2] p1 = { true , false };
2075    parameter Boolean[1] p2 = { true };
2076   
2077equation
2078    for i in 1:3 loop
2079        if rem(i, 2) == 1 then
2080            if p1[integer((i + 1) / 2)] then
2081                connect(a[i], b[i]);
2082            else
2083                connect(a[i], b[i]);
2084            end if;
2085        else
2086            if p2[integer((i + 1) / 2)] then
2087                connect(a[i], b[i]);
2088            else
2089                connect(a[i], b[i]);
2090            end if;
2091        end if;
2092    end for;
2093
2094    annotation(__JModelica(UnitTesting(tests={
2095        FlatteningTestCase(
2096            name="ConnectInIfNoErr1",
2097            description="Check that connect statements are not error checked in inactive if branches",
2098            flatModel="
2099fclass ConnectTests.ConnectInIfNoErr1
2100 Real a[3] = (1:3) * time;
2101 Real b[3];
2102 structural parameter Boolean p1[2] = {true, false} /* { true, false } */;
2103 structural parameter Boolean p2[1] = {true} /* { true } */;
2104equation
2105 a[1] = b[1];
2106 a[2] = b[2];
2107 a[3] = b[3];
2108end ConnectTests.ConnectInIfNoErr1;
2109")})));
2110end ConnectInIfNoErr1;
2111
2112
2113
2114package Electrical
2115 
2116  connector Pin "Pin of an electrical component" 
2117    Real v "Potential at the pin";
2118    flow Real i "Current flowing into the pin";
2119  end Pin;
2120
2121  connector PositivePin "Positive pin of an electric component" 
2122    Real v "Potential at the pin";
2123    flow Real i "Current flowing into the pin";
2124  end PositivePin;
2125 
2126  connector NegativePin "Negative pin of an electric component" 
2127    Real v "Potential at the pin";
2128    flow Real i "Current flowing into the pin";
2129  end NegativePin;
2130 
2131  partial model TwoPin "Component with one electrical port" 
2132    Real v "Voltage drop between the two pins (= p.v - n.v)";
2133    PositivePin p "Positive pin";
2134    NegativePin n "Negative pin";
2135  equation 
2136    v = p.v - n.v;
2137  end TwoPin;
2138
2139  partial model OnePort
2140    "Component with two electrical pins p and n and current i from p to n" 
2141   
2142    Real v "Voltage drop between the two pins (= p.v - n.v)";
2143    Real i "Current flowing from pin p to pin n";
2144    PositivePin p ;
2145    NegativePin n ;
2146  equation 
2147    v = p.v - n.v;
2148    0 = p.i + n.i;
2149    i = p.i;
2150  end OnePort;
2151
2152 model Resistor "Ideal linear electrical resistor" 
2153    extends OnePort;
2154    parameter Real R=1 "Resistance";
2155  equation 
2156    R*i = v;
2157  end Resistor;
2158
2159 model Capacitor "Ideal linear electrical capacitor" 
2160    extends OnePort;
2161    parameter Real C=1 "Capacitance";
2162  equation 
2163    i = C*der(v);
2164  end Capacitor;
2165
2166  model Inductor "Ideal linear electrical inductor" 
2167    extends OnePort;
2168    parameter Real L=1 "Inductance";
2169  equation 
2170    L*der(i) = v;
2171  end Inductor;
2172
2173 model ConstantVoltage "Source for constant voltage" 
2174    parameter Real V=1 "Value of constant voltage";
2175    extends OnePort;
2176  equation 
2177    v = V;
2178  end ConstantVoltage;
2179
2180  model Ground "Ground node" 
2181    Pin p;
2182  equation 
2183    p.v = 0;
2184  end Ground;
2185end Electrical;
2186
2187  model CircuitTest1
2188    Electrical.ConstantVoltage cv;
2189    Electrical.Ground g;
2190    Electrical.Resistor r;
2191    Electrical.Capacitor c;
2192  equation
2193    connect(cv.p,r.p);
2194    connect(r.p,c.p);
2195    connect(cv.n,g.p);
2196    connect(cv.n,r.n);
2197    connect(r.n,c.n);
2198
2199    annotation(__JModelica(UnitTesting(tests={
2200        FlatteningTestCase(
2201            name="CircuitTest1",
2202            description="Test of generation of connection equations.",
2203            flatModel="
2204fclass ConnectTests.CircuitTest1
2205 parameter Real cv.V = 1 \"Value of constant voltage\" /* 1 */;
2206 Real cv.v \"Voltage drop between the two pins (= p.v - n.v)\";
2207 Real cv.i \"Current flowing from pin p to pin n\";
2208 Real cv.p.v \"Potential at the pin\";
2209 Real cv.p.i \"Current flowing into the pin\";
2210 Real cv.n.v \"Potential at the pin\";
2211 Real cv.n.i \"Current flowing into the pin\";
2212 Real g.p.v \"Potential at the pin\";
2213 Real g.p.i \"Current flowing into the pin\";
2214 parameter Real r.R = 1 \"Resistance\" /* 1 */;
2215 Real r.v \"Voltage drop between the two pins (= p.v - n.v)\";
2216 Real r.i \"Current flowing from pin p to pin n\";
2217 Real r.p.v \"Potential at the pin\";
2218 Real r.p.i \"Current flowing into the pin\";
2219 Real r.n.v \"Potential at the pin\";
2220 Real r.n.i \"Current flowing into the pin\";
2221 parameter Real c.C = 1 \"Capacitance\" /* 1 */;
2222 Real c.v \"Voltage drop between the two pins (= p.v - n.v)\";
2223 Real c.i \"Current flowing from pin p to pin n\";
2224 Real c.p.v \"Potential at the pin\";
2225 Real c.p.i \"Current flowing into the pin\";
2226 Real c.n.v \"Potential at the pin\";
2227 Real c.n.i \"Current flowing into the pin\";
2228equation
2229 cv.v = cv.V;
2230 cv.v = cv.p.v - cv.n.v;
2231 0 = cv.p.i + cv.n.i;
2232 cv.i = cv.p.i;
2233 g.p.v = 0;
2234 r.R * r.i = r.v;
2235 r.v = r.p.v - r.n.v;
2236 0 = r.p.i + r.n.i;
2237 r.i = r.p.i;
2238 c.i = c.C * der(c.v);
2239 c.v = c.p.v - c.n.v;
2240 0 = c.p.i + c.n.i;
2241 c.i = c.p.i;
2242 c.p.i + cv.p.i + r.p.i = 0.0;
2243 c.p.v = cv.p.v;
2244 cv.p.v = r.p.v;
2245 c.n.i + cv.n.i + g.p.i + r.n.i = 0.0;
2246 c.n.v = cv.n.v;
2247 cv.n.v = g.p.v;
2248 g.p.v = r.n.v;
2249end ConnectTests.CircuitTest1;
2250")})));
2251  end CircuitTest1;
2252
2253  model CircuitTest2
2254    model F
2255      extends Electrical.OnePort;
2256      Electrical.Resistor r;
2257      Electrical.Capacitor c;
2258    equation
2259      connect(p,r.p);
2260      connect(p,c.p);
2261      connect(n,r.n);
2262      connect(n,c.n);
2263    end F;
2264
2265    model F2
2266      extends Electrical.TwoPin;
2267      Electrical.Resistor r;
2268      Electrical.Capacitor c;
2269    equation
2270      connect(p,r.p);
2271      connect(p,c.p);
2272      connect(n,r.n);
2273      connect(n,c.n);
2274    end F2;
2275 
2276    Electrical.ConstantVoltage cv;
2277    Electrical.Ground g;
2278    Electrical.Resistor r;
2279    F2 f;
2280  equation
2281    connect(cv.p,r.p);
2282    connect(r.p,f.p);
2283    connect(cv.n,g.p);
2284    connect(cv.n,r.n);
2285    connect(r.n,f.n);
2286
2287    annotation(__JModelica(UnitTesting(tests={
2288        FlatteningTestCase(
2289            name="CircuitTest2",
2290            description="Test of generation of connection equations",
2291            flatModel="
2292fclass ConnectTests.CircuitTest2
2293 parameter Real cv.V = 1 \"Value of constant voltage\" /* 1 */;
2294 Real cv.v \"Voltage drop between the two pins (= p.v - n.v)\";
2295 Real cv.i \"Current flowing from pin p to pin n\";
2296 Real cv.p.v \"Potential at the pin\";
2297 Real cv.p.i \"Current flowing into the pin\";
2298 Real cv.n.v \"Potential at the pin\";
2299 Real cv.n.i \"Current flowing into the pin\";
2300 Real g.p.v \"Potential at the pin\";
2301 Real g.p.i \"Current flowing into the pin\";
2302 parameter Real r.R = 1 \"Resistance\" /* 1 */;
2303 Real r.v \"Voltage drop between the two pins (= p.v - n.v)\";
2304 Real r.i \"Current flowing from pin p to pin n\";
2305 Real r.p.v \"Potential at the pin\";
2306 Real r.p.i \"Current flowing into the pin\";
2307 Real r.n.v \"Potential at the pin\";
2308 Real r.n.i \"Current flowing into the pin\";
2309 parameter Real f.r.R = 1 \"Resistance\" /* 1 */;
2310 Real f.r.v \"Voltage drop between the two pins (= p.v - n.v)\";
2311 Real f.r.i \"Current flowing from pin p to pin n\";
2312 Real f.r.p.v \"Potential at the pin\";
2313 Real f.r.p.i \"Current flowing into the pin\";
2314 Real f.r.n.v \"Potential at the pin\";
2315 Real f.r.n.i \"Current flowing into the pin\";
2316 parameter Real f.c.C = 1 \"Capacitance\" /* 1 */;
2317 Real f.c.v \"Voltage drop between the two pins (= p.v - n.v)\";
2318 Real f.c.i \"Current flowing from pin p to pin n\";
2319 Real f.c.p.v \"Potential at the pin\";
2320 Real f.c.p.i \"Current flowing into the pin\";
2321 Real f.c.n.v \"Potential at the pin\";
2322 Real f.c.n.i \"Current flowing into the pin\";
2323 Real f.v \"Voltage drop between the two pins (= p.v - n.v)\";
2324 Real f.p.v \"Potential at the pin\";
2325 Real f.p.i \"Current flowing into the pin\";
2326 Real f.n.v \"Potential at the pin\";
2327 Real f.n.i \"Current flowing into the pin\";
2328equation
2329 cv.v = cv.V;
2330 cv.v = cv.p.v - cv.n.v;
2331 0 = cv.p.i + cv.n.i;
2332 cv.i = cv.p.i;
2333 g.p.v = 0;
2334 r.R * r.i = r.v;
2335 r.v = r.p.v - r.n.v;
2336 0 = r.p.i + r.n.i;
2337 r.i = r.p.i;
2338 f.r.R * f.r.i = f.r.v;
2339 f.r.v = f.r.p.v - f.r.n.v;
2340 0 = f.r.p.i + f.r.n.i;
2341 f.r.i = f.r.p.i;
2342 f.c.i = f.c.C * der(f.c.v);
2343 f.c.v = f.c.p.v - f.c.n.v;
2344 0 = f.c.p.i + f.c.n.i;
2345 f.c.i = f.c.p.i;
2346 f.v = f.p.v - f.n.v;
2347 cv.p.i + f.p.i + r.p.i = 0.0;
2348 cv.p.v = f.p.v;
2349 f.p.v = r.p.v;
2350 cv.n.i + f.n.i + g.p.i + r.n.i = 0.0;
2351 cv.n.v = f.n.v;
2352 f.n.v = g.p.v;
2353 g.p.v = r.n.v;
2354 f.c.p.i - f.p.i + f.r.p.i = 0.0;
2355 f.c.p.v = f.p.v;
2356 f.p.v = f.r.p.v;
2357 f.c.n.i - f.n.i + f.r.n.i = 0.0;
2358 f.c.n.v = f.n.v;
2359 f.n.v = f.r.n.v;
2360end ConnectTests.CircuitTest2;
2361")})));
2362  end CircuitTest2;
2363
2364model ConnectorTest
2365   model A
2366 
2367     RealInput u;
2368     RealOutput y;
2369     parameter Real k = 1;
2370   equation 
2371     y = k*u;
2372   end A;
2373 
2374   model B
2375         FirstOrder firstOrder;
2376     Feedback feedback;
2377     RealInput u;
2378   equation 
2379    connect(feedback.y, firstOrder.u);
2380    connect(firstOrder.y, feedback.u2);
2381    connect(feedback.u1, u);
2382   end B;
2383
2384
2385   
2386          block FirstOrder "First order transfer function block (= 1 pole)"
2387           parameter Real k=1 "Gain";
2388           parameter Modelica.SIunits.Time T(start=1)=1 "Time Constant";
2389           parameter Real y_start=0 "Initial or guess value of output (= state)";
2390       
2391           extends SISO(y(start=y_start));
2392       
2393         initial equation 
2394                 y = y_start;
2395         equation 
2396           der(y) = (k*u - y)/T;
2397         end FirstOrder;
2398       
2399        connector RealInput =  input Real "'input Real' as connector";
2400       
2401   connector RealOutput = output Real "'output Real' as connector";
2402       
2403   block Feedback
2404         "Output difference between commanded and feedback input"
2405       
2406         input RealInput u1;
2407         input RealInput u2;
2408         output RealOutput y;
2409       
2410   equation 
2411         y = u1 - u2;
2412   end Feedback;
2413       
2414        partial block SISO
2415         "Single Input Single Output continuous control block"
2416         extends BlockIcon;
2417       
2418         RealInput u "Connector of Real input signal";
2419         RealOutput y "Connector of Real output signal";
2420   end SISO;
2421       
2422   partial block BlockIcon
2423         "Basic graphical layout of input/output block"
2424       
2425       
2426   equation
2427       
2428   end BlockIcon;
2429       
2430   block Constant 
2431         "Generate constant signal of type Real"
2432         parameter Real k(start=1) "Constant output value";
2433         extends SO;
2434       
2435   equation 
2436         y = k;
2437   end Constant;
2438       
2439   partial block SO
2440         "Single Output continuous control block"
2441         extends BlockIcon;
2442       
2443         RealOutput y "Connector of Real output signal";
2444       
2445   end SO;
2446    model C
2447    B b;
2448    Constant const(k=1);
2449  equation 
2450    connect(const.y, b.u);
2451  end C;
2452 
2453  C c;
2454
2455    annotation(__JModelica(UnitTesting(tests={
2456        FlatteningTestCase(
2457            name="ConnectorTest",
2458            description="Test of generation of connection equations",
2459            flatModel="
2460fclass ConnectTests.ConnectorTest
2461 parameter Real c.b.firstOrder.k = 1 \"Gain\" /* 1 */;
2462 parameter Modelica.SIunits.Time c.b.firstOrder.T(start = 1) = 1 \"Time Constant\" /* 1 */;
2463 parameter Real c.b.firstOrder.y_start = 0 \"Initial or guess value of output (= state)\" /* 0 */;
2464 ConnectTests.ConnectorTest.RealInput c.b.firstOrder.u \"Connector of Real input signal\";
2465 ConnectTests.ConnectorTest.RealOutput c.b.firstOrder.y(start = c.b.firstOrder.y_start) \"Connector of Real output signal\";
2466 ConnectTests.ConnectorTest.RealInput c.b.feedback.u1;
2467 ConnectTests.ConnectorTest.RealInput c.b.feedback.u2;
2468 ConnectTests.ConnectorTest.RealOutput c.b.feedback.y;
2469 ConnectTests.ConnectorTest.RealInput c.b.u;
2470 parameter Real c.const.k(start = 1) = 1 \"Constant output value\" /* 1 */;
2471 ConnectTests.ConnectorTest.RealOutput c.const.y \"Connector of Real output signal\";
2472initial equation 
2473 c.b.firstOrder.y = c.b.firstOrder.y_start;
2474equation
2475 der(c.b.firstOrder.y) = (c.b.firstOrder.k * c.b.firstOrder.u - c.b.firstOrder.y) / c.b.firstOrder.T;
2476 c.b.feedback.y = c.b.feedback.u1 - c.b.feedback.u2;
2477 c.const.y = c.const.k;
2478 c.b.u = c.const.y;
2479 c.b.feedback.y = c.b.firstOrder.u;
2480 c.b.feedback.u2 = c.b.firstOrder.y;
2481 c.b.feedback.u1 = c.b.u;
2482
2483public
2484 type Modelica.SIunits.Time = Real(final quantity = \"Time\",final unit = \"s\");
2485 type ConnectTests.ConnectorTest.RealInput = Real;
2486 type ConnectTests.ConnectorTest.RealOutput = Real;
2487end ConnectTests.ConnectorTest;
2488")})));
2489end ConnectorTest;
2490
2491
2492model StreamTest1
2493    connector A
2494        Real a;
2495        flow Real b;
2496        stream Real c;
2497        stream Real d;
2498    end A;
2499
2500    model B
2501        A e;
2502        A f;
2503    equation
2504        connect(e,f);
2505    end B;
2506   
2507    B g;
2508
2509    annotation(__JModelica(UnitTesting(tests={
2510        FlatteningTestCase(
2511            name="StreamTest1",
2512            description="Stream variables: basic test",
2513            flatModel="
2514fclass ConnectTests.StreamTest1
2515 Real g.e.a;
2516 Real g.e.b;
2517 Real g.e.c;
2518 Real g.e.d;
2519 Real g.f.a;
2520 Real g.f.b;
2521 Real g.f.c;
2522 Real g.f.d;
2523equation
2524 g.e.a = g.f.a;
2525 - g.e.b - g.f.b = 0.0;
2526 g.e.c = inStream(g.f.c);
2527 g.f.c = inStream(g.e.c);
2528 g.e.d = inStream(g.f.d);
2529 g.f.d = inStream(g.e.d);
2530 g.e.b = 0.0;
2531 g.f.b = 0.0;
2532end ConnectTests.StreamTest1;
2533")})));
2534end StreamTest1;
2535
2536
2537model StreamTest2
2538    connector A
2539        Real a;
2540        flow Real b;
2541        stream Real c;
2542        stream Real d;
2543    end A;
2544
2545    model B
2546        A e;
2547        A f;
2548        Real x;
2549        Real y;
2550
2551    equation
2552        x = inStream(e.c);
2553        y = actualStream(e.c);
2554        connect(e,f);
2555    end B;
2556   
2557    B g;
2558
2559    annotation(__JModelica(UnitTesting(tests={
2560        FlatteningTestCase(
2561            name="StreamTest2",
2562            description="Basic test of inStream() and actualStream()",
2563            flatModel="
2564fclass ConnectTests.StreamTest2
2565 Real g.e.a;
2566 Real g.e.b;
2567 Real g.e.c;
2568 Real g.e.d;
2569 Real g.f.a;
2570 Real g.f.b;
2571 Real g.f.c;
2572 Real g.f.d;
2573 Real g.x;
2574 Real g.y;
2575equation
2576 g.x = inStream(g.e.c);
2577 g.y = actualStream(g.e.c);
2578 g.e.a = g.f.a;
2579 - g.e.b - g.f.b = 0.0;
2580 g.e.c = inStream(g.f.c);
2581 g.f.c = inStream(g.e.c);
2582 g.e.d = inStream(g.f.d);
2583 g.f.d = inStream(g.e.d);
2584 g.e.b = 0.0;
2585 g.f.b = 0.0;
2586end ConnectTests.StreamTest2;
2587")})));
2588end StreamTest2;
2589
2590
2591model StreamTest3
2592        connector A
2593                Real a;
2594                flow Real b;
2595                stream Real c;
2596        end A;
2597       
2598        A d;
2599        Real x;
2600        Real y;
2601equation
2602        x = inStream(d.a);
2603        y = actualStream(d.a);
2604
2605    annotation(__JModelica(UnitTesting(tests={
2606        ErrorTestCase(
2607            name="StreamTest3",
2608            description="Using inStream() and actualStream() on normal var in connector",
2609            errorMessage="
26102 errors found:
2611
2612Error at line 12, column 6, in file 'Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo':
2613  Argument of inStream() must be a stream variable
2614
2615Error at line 13, column 6, in file 'Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo':
2616  Argument of actualStream() must be a stream variable
2617")})));
2618end StreamTest3;
2619
2620
2621model StreamTest4
2622        connector A
2623                Real a;
2624                flow Real b;
2625                stream Real c;
2626        end A;
2627       
2628        A d;
2629        Real x;
2630        Real y;
2631equation
2632        x = inStream(d.b);
2633        y = actualStream(d.b);
2634
2635    annotation(__JModelica(UnitTesting(tests={
2636        ErrorTestCase(
2637            name="StreamTest4",
2638            description="Using inStream() and actualStream() on flow var",
2639            errorMessage="
26402 errors found:
2641
2642Error at line 12, column 6, in file 'Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo':
2643  Argument of inStream() must be a stream variable
2644
2645Error at line 13, column 6, in file 'Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo':
2646  Argument of actualStream() must be a stream variable
2647")})));
2648end StreamTest4;
2649
2650
2651model StreamTest5
2652        Real a;
2653        Real x;
2654        Real y;
2655equation
2656        x = inStream(a);
2657        y = actualStream(a);
2658
2659    annotation(__JModelica(UnitTesting(tests={
2660        ErrorTestCase(
2661            name="StreamTest5",
2662            description="Using inStream() and actualStream() on normal var not in connector",
2663            errorMessage="
26642 errors found:
2665
2666Error at line 6, column 6, in file 'Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo':
2667  Argument of inStream() must be a stream variable
2668
2669Error at line 7, column 6, in file 'Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo':
2670  Argument of actualStream() must be a stream variable
2671")})));
2672end StreamTest5;
2673
2674
2675model StreamTest6
2676    connector A
2677        Real a;
2678        flow Real b;
2679        stream Real c;
2680    end A;
2681
2682    model B
2683        A a;
2684    end B;
2685
2686    parameter Integer n = 2;
2687    Real x[n];
2688    A a[n];
2689    B b[n];
2690equation
2691    connect(a, b.a);
2692    a.a = (1:2) * time;
2693    a.c = a.a * 2;
2694    for i in 1:n loop
2695        if i < n then
2696            x[i] = inStream(a[i + 1].c) * time;
2697        else
2698            x[i] = inStream(a[i].c) + time;
2699        end if;
2700    end for;
2701
2702annotation(__JModelica(UnitTesting(tests={
2703    TransformCanonicalTestCase(
2704        name="StreamTest6",
2705        description="Check that inStream() using out-of-bounds array access does not cause crash when used in inactive if branch",
2706        eliminate_alias_variables=false,
2707        variability_propagation=false,
2708        flatModel="
2709fclass ConnectTests.StreamTest6
2710 structural parameter Integer n = 2 /* 2 */;
2711 Real x[1];
2712 Real x[2];
2713 potential Real a[1].a;
2714 flow Real a[1].b;
2715 stream Real a[1].c;
2716 potential Real a[2].a;
2717 flow Real a[2].b;
2718 stream Real a[2].c;
2719 Real b[1].a.a;
2720 Real b[1].a.b;
2721 Real b[1].a.c;
2722 Real b[2].a.a;
2723 Real b[2].a.b;
2724 Real b[2].a.c;
2725equation
2726 a[1].a = time;
2727 a[2].a = 2 * a[1].a;
2728 a[1].c = a[2].a;
2729 a[2].c = a[2].a * 2;
2730 x[1] = a[2].c * time;
2731 x[2] = a[2].c + time;
2732 a[1].a = b[1].a.a;
2733 - a[1].b + b[1].a.b = 0.0;
2734 a[1].c = b[1].a.c;
2735 a[2].a = b[2].a.a;
2736 - a[2].b + b[2].a.b = 0.0;
2737 a[2].c = b[2].a.c;
2738 a[1].b = 0.0;
2739 a[2].b = 0.0;
2740end ConnectTests.StreamTest6;
2741")})));
2742end StreamTest6;
2743
2744
2745model Cardinality1
2746    connector A = Real;
2747
2748    A x;
2749    A y;
2750    A z;
2751equation
2752    connect(x, y);
2753    connect(y, z);
2754    if cardinality(x) == 2 then
2755        x = time;
2756    elseif cardinality(y) == 2 then
2757        y = 2 * time;
2758    else
2759        z = 3 * time;
2760    end if;
2761
2762    annotation(__JModelica(UnitTesting(tests={
2763        TransformCanonicalTestCase(
2764            name="Cardinality1",
2765            description="cardinality(): basic test",
2766            flatModel="
2767fclass ConnectTests.Cardinality1
2768 Real x;
2769equation
2770 x = 2 * time;
2771end ConnectTests.Cardinality1;
2772")})));
2773end Cardinality1;
2774
2775
2776model Cardinality2
2777    connector A
2778        Real a;
2779        Real b;
2780    end A;
2781       
2782    A x;
2783    A y;
2784    A z;
2785equation
2786    connect(x, y);
2787    connect(y, z);
2788    if cardinality(x) == 2 then
2789        x.a = time;
2790    elseif cardinality(y) == 2 then
2791        y.a = 2 * time;
2792    else
2793        z.a = 3 * time;
2794    end if;
2795        x.b = 1;
2796
2797annotation(__JModelica(UnitTesting(tests={
2798    TransformCanonicalTestCase(
2799        name="Cardinality2",
2800        description="cardinality(): basic test",
2801        eliminate_alias_variables=false,
2802        variability_propagation=false,
2803        flatModel="
2804fclass ConnectTests.Cardinality2
2805 potential Real x.a;
2806 potential Real x.b;
2807 potential Real y.a;
2808 potential Real y.b;
2809 potential Real z.a;
2810 potential Real z.b;
2811equation
2812 y.a = 2 * time;
2813 x.b = 1;
2814 x.a = y.a;
2815 y.a = z.a;
2816 x.b = y.b;
2817 y.b = z.b;
2818end ConnectTests.Cardinality2;
2819")})));
2820end Cardinality2;
2821
2822
2823model Cardinality3
2824    inner A a;
2825    B b[cardinality(a)];
2826       
2827        connector A
2828                Real x;
2829                flow Real y;
2830        end A;
2831       
2832        model B
2833                outer A a;
2834                A a2;
2835        equation
2836                connect(a, a2);
2837        end B;
2838
2839    annotation(__JModelica(UnitTesting(tests={
2840        WarningTestCase(
2841            name="Cardinality3",
2842            description="cardinality(): deprecation warning and limitation on where it can be used",
2843            errorMessage="
28441 errors and 1 warnings found:
2845
2846Compliance error at line 3, column 9, in file 'Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo', INCORRECT_USE_OF_CARDINALITY:
2847  The cardinality() function-like operator is only supported in asserts and in the tests of if clauses that do not contain connect()
2848
2849Warning at line 3, column 9, in file 'Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo', DEPRECATED_CARDINALITY:
2850  The cardinality() function-like operator is deprecated, and will be removed in a future version of Modelica
2851")})));
2852end Cardinality3;
2853
2854model Cardinality4
2855    connector A = Real;
2856
2857    A x[2];
2858    A y;
2859equation
2860    connect(x[1], x[2]);
2861    connect(x[2], y);
2862    if cardinality(x[1]) == 2 then
2863        x[1] = time;
2864    elseif cardinality(x[2]) == 2 then
2865        x[2] = 2 * time;
2866    else
2867        y = 3 * time;
2868    end if;
2869
2870    annotation(__JModelica(UnitTesting(tests={
2871        TransformCanonicalTestCase(
2872            name="Cardinality4",
2873            description="",
2874            flatModel="
2875fclass ConnectTests.Cardinality4
2876 Real x[1];
2877equation
2878 x[1] = 2 * time;
2879end ConnectTests.Cardinality4;
2880")})));
2881end Cardinality4;
2882
2883model Cardinality5
2884        connector A = Real;
2885
2886    A x[2];
2887    A y;
2888equation
2889    connect(x[1], y);
2890    connect(y, x[2]);
2891    if cardinality(x) == 2 then
2892        x[1] = time;
2893    elseif cardinality(y) == 2 then
2894        y = time;
2895    else
2896        x[2] = time;
2897    end if;
2898
2899    annotation(__JModelica(UnitTesting(tests={
2900        ErrorTestCase(
2901            name="Cardinality5",
2902            description="cardinality(): non scalar",
2903            errorMessage="
29041 errors found:
2905
2906Error at line 9, column 20, in file 'Compiler/ModelicaFrontEnd/test/modelica/ConnectTests.mo':
2907  The argument of cardinality() must be a scalar reference to a connector
2908")})));
2909end Cardinality5;
2910
2911model Cardinality6
2912        connector A = Real;
2913
2914    A x[3];
2915equation
2916    connect(x[1:2], x[2:3]);
2917    for i in 1:3 loop
2918        assert(cardinality(x[i]) == 1, "Failed for index: " + String(i));
2919    end for;
2920
2921    annotation(__JModelica(UnitTesting(tests={
2922        ErrorTestCase(
2923            name="Cardinality6",
2924            description="cardinality(): array test",
2925            errorMessage="
29261 errors found:
2927
2928Error in flattened model:
2929  Assertion failed: Failed for index: 2
2930")})));
2931end Cardinality6;
2932
2933
2934model Cardinality7
2935    connector A = Real;
2936
2937    parameter Integer n = 2;
2938    A x[n];
2939    A y[n] = (1:n) * time;
2940equation
2941    connect(x[1], y[1]);
2942    for i in 1:n loop
2943        if cardinality(x[i]) == 0 then
2944            x[n] = 0;
2945        end if;
2946    end for;
2947
2948    annotation(__JModelica(UnitTesting(tests={
2949        TransformCanonicalTestCase(
2950            name="Cardinality7",
2951            description="cardinality(): array test as test of if expression",
2952            eliminate_linear_equations=false,
2953            flatModel="
2954fclass ConnectTests.Cardinality7
2955 structural parameter Integer n = 2 /* 2 */;
2956 Real x[1];
2957 constant Real x[2] = 0;
2958 Real y[2];
2959equation
2960 x[1] = time;
2961 y[2] = 2 * time;
2962end ConnectTests.Cardinality7;
2963")})));
2964end Cardinality7;
2965
2966
2967model ConditionalNoErrTest1
2968    connector C = Real;
2969   
2970    parameter Boolean on = false;
2971   
2972    C x[if on then 2 else 1];
2973    C y if on;
2974equation
2975    connect(x[2], y);
2976
2977    annotation(__JModelica(UnitTesting(tests={
2978        FlatteningTestCase(
2979            name="ConditionalNoErrTest1",
2980            description="",
2981            flatModel="
2982fclass ConnectTests.ConditionalNoErrTest1
2983 structural parameter Boolean on = false /* false */;
2984 Real x[1];
2985end ConnectTests.ConditionalNoErrTest1;
2986")})));
2987end ConditionalNoErrTest1;
2988
2989
2990model ConditionalNoErrTest2
2991    connector C = Real;
2992   
2993    parameter Boolean on = false;
2994   
2995    C x[if on then 2 else 1];
2996    C y if on;
2997equation
2998    connect(y, x[2]);
2999
3000    annotation(__JModelica(UnitTesting(tests={
3001        FlatteningTestCase(
3002            name="ConditionalNoErrTest2",
3003            description="",
3004            flatModel="
3005fclass ConnectTests.ConditionalNoErrTest2
3006 structural parameter Boolean on = false /* false */;
3007 Real x[1];
3008end ConnectTests.ConditionalNoErrTest2;
3009")})));
3010end ConditionalNoErrTest2;
3011
3012
3013model ConditionalNoErrTest3
3014    connector C = Real;
3015       
3016        model A
3017                C c;
3018        end A;
3019   
3020    parameter Boolean on = false;
3021   
3022    C x[if on then 2 else 1];
3023    A y if on;
3024equation
3025    connect(x[2], y.c);
3026
3027    annotation(__JModelica(UnitTesting(tests={
3028        FlatteningTestCase(
3029            name="ConditionalNoErrTest3",
3030            description="",
3031            flatModel="
3032fclass ConnectTests.ConditionalNoErrTest3
3033 structural parameter Boolean on = false /* false */;
3034 Real x[1];
3035end ConnectTests.ConditionalNoErrTest3;
3036")})));
3037end ConditionalNoErrTest3;
3038
3039
3040model ConditionalNoErrTest4
3041    connector C = Real;
3042   
3043    model A
3044        C c;
3045    end A;
3046   
3047    parameter Boolean on = false;
3048   
3049    C x[if on then 2 else 1];
3050    A y if on;
3051equation
3052    connect(y.c, x[2]);
3053
3054    annotation(__JModelica(UnitTesting(tests={
3055        FlatteningTestCase(
3056            name="ConditionalNoErrTest4",
3057            description="",
3058            flatModel="
3059fclass ConnectTests.ConditionalNoErrTest4
3060 structural parameter Boolean on = false /* false */;
3061 Real x[1];
3062end ConnectTests.ConditionalNoErrTest4;
3063")})));
3064end ConditionalNoErrTest4;
3065
3066
3067model ConditionalNoErrTest5
3068    model A
3069        Real y;
3070    end A;
3071   
3072    parameter Boolean on = false;
3073   
3074    Real x[if on then 2 else 1];
3075    A a(y=x[2]) if on;
3076
3077    annotation(__JModelica(UnitTesting(tests={
3078        FlatteningTestCase(
3079            name="ConditionalNoErrTest5",
3080            description="",
3081            flatModel="
3082fclass ConnectTests.ConditionalNoErrTest5
3083 structural parameter Boolean on = false /* false */;
3084 Real x[1];
3085end ConnectTests.ConditionalNoErrTest5;
3086")})));
3087end ConditionalNoErrTest5;
3088
3089model ConditionalNoErrTest6
3090    connector C = Real;
3091   
3092    model A
3093        C c = false;
3094    end A;
3095   
3096    parameter Boolean on = false;
3097   
3098    C c;
3099    A a if on;
3100equation
3101    connect(a.c, c);
3102
3103annotation(__JModelica(UnitTesting(tests={
3104    FlatteningTestCase(
3105        name="ConditionalNoErrTest6",
3106        description="Ensure that components in conditionaly false components aren't error checked due to connections",
3107        flatModel="
3108fclass ConnectTests.ConditionalNoErrTest6
3109 structural parameter Boolean on = false /* false */;
3110 Real c;
3111end ConnectTests.ConditionalNoErrTest6;
3112")})));
3113end ConditionalNoErrTest6;
3114
3115
3116model ConditionalConnectInIf1
3117    connector C
3118        Real c;
3119    end C;
3120   
3121    parameter Boolean use_x = false;
3122    input C x if use_x;
3123    C y;
3124equation 
3125    if use_x then
3126        connect(x,y);
3127    else
3128        y.c = 1;
3129    end if;
3130
3131annotation(__JModelica(UnitTesting(tests={
3132    TransformCanonicalTestCase(
3133        name="ConditionalConnectInIf1",
3134        description="Check that if equations with if branch that becomes empty in flattening are flattened correctly",
3135        variability_propagation=false,
3136        flatModel="
3137fclass ConnectTests.ConditionalConnectInIf1
3138 structural parameter Boolean use_x = false /* false */;
3139 potential Real y.c;
3140equation
3141 y.c = 1;
3142end ConnectTests.ConditionalConnectInIf1;
3143")})));
3144end ConditionalConnectInIf1;
3145
3146
3147model ConditionalCompInConnector1
3148    connector C
3149        parameter Boolean b = false;
3150        Real x if b;
3151        Real y;
3152    end C;
3153   
3154    C c1, c2;
3155equation
3156    connect(c1, c2);
3157
3158annotation(__JModelica(UnitTesting(tests={
3159    FlatteningTestCase(
3160        name="ConditionalCompInConnector1",
3161        description="Check that inactive conditional components in connnectors are handled properly",
3162        flatModel="
3163fclass ConnectTests.ConditionalCompInConnector1
3164 structural parameter Boolean c1.b = false /* false */;
3165 potential Real c1.y;
3166 structural parameter Boolean c2.b = false /* false */;
3167 potential Real c2.y;
3168equation
3169 c1.y = c2.y;
3170end ConnectTests.ConditionalCompInConnector1;
3171")})));
3172end ConditionalCompInConnector1;
3173
3174
3175model ConditionalCompInConnector2
3176    connector C
3177        parameter Boolean b = true;
3178        Real x if b;
3179        Real y;
3180    end C;
3181   
3182    C c1, c2;
3183equation
3184    connect(c1, c2);
3185
3186annotation(__JModelica(UnitTesting(tests={
3187    FlatteningTestCase(
3188        name="ConditionalCompInConnector2",
3189        description="Check that active conditional components in connnectors are handled properly",
3190        flatModel="
3191fclass ConnectTests.ConditionalCompInConnector2
3192 structural parameter Boolean c1.b = true /* true */;
3193 potential Real c1.x;
3194 potential Real c1.y;
3195 structural parameter Boolean c2.b = true /* true */;
3196 potential Real c2.x;
3197 potential Real c2.y;
3198equation
3199 c1.x = c2.x;
3200 c1.y = c2.y;
3201end ConnectTests.ConditionalCompInConnector2;
3202")})));
3203end ConditionalCompInConnector2;
3204
3205model TopLevelIO1
3206    connector C
3207        input Real x;
3208    end C;
3209   
3210    C[2] c1;
3211
3212    annotation(__JModelica(UnitTesting(tests={
3213        TransformCanonicalTestCase(
3214            name="TopLevelIO1",
3215            description="",
3216            flatModel="
3217fclass ConnectTests.TopLevelIO1
3218 input Real c1[1].x;
3219 input Real c1[2].x;
3220end ConnectTests.TopLevelIO1;
3221")})));
3222end TopLevelIO1;
3223
3224model TopLevelIO2
3225    connector C
3226        input Real x;
3227        flow Real f;
3228    end C;
3229   
3230    model M
3231        C c2;
3232    end M;
3233   
3234    C c1;
3235    M m;
3236equation
3237    connect(c1, m.c2);
3238
3239annotation(__JModelica(UnitTesting(tests={
3240    TransformCanonicalTestCase(
3241        name="TopLevelIO2",
3242        description="",
3243        eliminate_alias_variables=false,
3244        variability_propagation=false,
3245        flatModel="
3246fclass ConnectTests.TopLevelIO2
3247 input Real c1.x;
3248 flow Real c1.f;
3249 Real m.c2.x;
3250 Real m.c2.f;
3251equation
3252 - c1.f + m.c2.f = 0.0;
3253 c1.x = m.c2.x;
3254 c1.f = 0.0;
3255end ConnectTests.TopLevelIO2;
3256")})));
3257end TopLevelIO2;
3258
3259model TopLevelIO3
3260    connector C
3261        Real x;
3262        flow Real f;
3263    end C;
3264   
3265    input  C c1;
3266    output C c2;
3267equation
3268    connect(c1, c2);
3269
3270    annotation(__JModelica(UnitTesting(tests={
3271        TransformCanonicalTestCase(
3272            name="TopLevelIO3",
3273            description="",
3274            flatModel="
3275fclass ConnectTests.TopLevelIO3
3276 input Real c1.x;
3277 input Real c1.f;
3278 output Real c2.x;
3279 output Real c2.f;
3280equation
3281 - c1.f - c2.f = 0.0;
3282 c1.x = c2.x;
3283end ConnectTests.TopLevelIO3;
3284")})));
3285end TopLevelIO3;
3286
3287model TopLevelIO4
3288    connector C
3289        Real x;
3290        flow Real f;
3291    end C;
3292   
3293    input  C ci;
3294    output C co;
3295protected
3296    input  C cpi;
3297    output C cpo;
3298equation
3299    connect(ci, cpo);
3300    connect(co, cpi);
3301    connect(cpi, cpo);
3302
3303    annotation(__JModelica(UnitTesting(tests={
3304        TransformCanonicalTestCase(
3305            name="TopLevelIO4",
3306            description="",
3307            flatModel="
3308fclass ConnectTests.TopLevelIO4
3309 input Real ci.x;
3310 input Real ci.f;
3311 output Real co.x;
3312 output Real co.f;
3313protected
3314 Real cpi.x;
3315 constant Real cpi.f = 0.0;
3316equation
3317 - ci.f - co.f = 0.0;
3318 ci.x = co.x;
3319 co.x = cpi.x;
3320end ConnectTests.TopLevelIO4;
3321")})));
3322end TopLevelIO4;
3323
3324
3325end ConnectTests;
Note: See TracBrowser for help on using the repository browser.