1
1
using ModelingToolkit, Test
2
- using ModelingToolkit: get_gui_metadata,
3
- get_ps, getdefault, getname, scalarize,
4
- VariableDescription, RegularConnector
2
+ using ModelingToolkit: get_gui_metadata, get_systems, get_connector_type,
3
+ get_ps, getdefault, getname, scalarize, VariableDescription, RegularConnector
5
4
using URIs: URI
6
5
using Distributions
7
6
using Unitful
303
302
end
304
303
305
304
@named aa = A ()
306
- @test aa . connector_type == RegularConnector ()
305
+ @test get_connector_type (aa) == RegularConnector ()
307
306
308
307
@test A. isconnector == true
309
308
314
313
@test A. structure[:components ] == [[:cc , :C ]]
315
314
end
316
315
317
- @testset " Conditional components, equations and parameters " begin
316
+ @testset " Conditional statements inside the blocks " begin
318
317
@mtkmodel C begin end
319
318
320
319
# Conditional statements inside @components, @equations
@@ -326,21 +325,21 @@ end
326
325
@parameters begin
327
326
eq = flag == 1 ? 1 : 0
328
327
if flag == 1
329
- a1
328
+ if_parameter
330
329
elseif flag == 2
331
- a2
330
+ elseif_parameter
332
331
else
333
- a3
332
+ else_parameter
334
333
end
335
334
end
336
335
@components begin
337
- sys0 = C ()
336
+ default_sys = C ()
338
337
if flag == 1
339
- sys1 = C ()
338
+ if_sys = C ()
340
339
elseif flag == 2
341
- sys2 = C ()
340
+ elseif_sys = C ()
342
341
else
343
- sys3 = C ()
342
+ else_sys = C ()
344
343
end
345
344
end
346
345
@equations begin
@@ -352,94 +351,160 @@ end
352
351
else
353
352
eq ~ 3
354
353
end
354
+ flag == 1 ? eq ~ 4 : eq ~ 5
355
355
end
356
356
end
357
357
358
- @named in_sys_1 = InsideTheBlock ()
359
- in_sys_1 = complete (in_sys_1)
360
- @named in_sys_2 = InsideTheBlock (flag = 2 )
361
- in_sys_2 = complete (in_sys_2)
362
- @named in_sys_3 = InsideTheBlock (flag = 3 )
363
- in_sys_3 = complete (in_sys_3)
364
-
365
- @test nameof .(parameters (in_sys_1)) == [:a1 , :eq ]
366
- @test nameof .(parameters (in_sys_2)) == [:a2 , :eq ]
367
- @test nameof .(parameters (in_sys_3)) == [:a3 , :eq ]
368
-
369
- @test nameof .(in_sys_1. systems) == [:sys1 , :sys0 ]
370
- @test nameof .(in_sys_2. systems) == [:sys2 , :sys0 ]
371
- @test nameof .(in_sys_3. systems) == [:sys3 , :sys0 ]
372
-
373
- @test all ([in_sys_1. eq ~ 0 , in_sys_1. eq ~ 1 ] .∈ [equations (in_sys_1)])
374
- @test all ([in_sys_2. eq ~ 0 , in_sys_2. eq ~ 2 ] .∈ [equations (in_sys_2)])
375
- @test all ([in_sys_3. eq ~ 0 , in_sys_3. eq ~ 3 ] .∈ [equations (in_sys_3)])
358
+ @named if_in_sys = InsideTheBlock ()
359
+ if_in_sys = complete (if_in_sys)
360
+ @named elseif_in_sys = InsideTheBlock (flag = 2 )
361
+ elseif_in_sys = complete (elseif_in_sys)
362
+ @named else_in_sys = InsideTheBlock (flag = 3 )
363
+ else_in_sys = complete (else_in_sys)
364
+
365
+ @test nameof .(parameters (if_in_sys)) == [:if_parameter , :eq ]
366
+ @test nameof .(parameters (elseif_in_sys)) == [:elseif_parameter , :eq ]
367
+ @test nameof .(parameters (else_in_sys)) == [:else_parameter , :eq ]
368
+
369
+ @test nameof .(get_systems (if_in_sys)) == [:if_sys , :default_sys ]
370
+ @test nameof .(get_systems (elseif_in_sys)) == [:elseif_sys , :default_sys ]
371
+ @test nameof .(get_systems (else_in_sys)) == [:else_sys , :default_sys ]
372
+
373
+ @test all ([
374
+ if_in_sys. eq ~ 0 ,
375
+ if_in_sys. eq ~ 1 ,
376
+ if_in_sys. eq ~ 4 ,
377
+ ] .∈ [equations (if_in_sys)])
378
+ @test all ([
379
+ elseif_in_sys. eq ~ 0 ,
380
+ elseif_in_sys. eq ~ 2 ,
381
+ elseif_in_sys. eq ~ 5 ,
382
+ ] .∈ [equations (elseif_in_sys)])
383
+ @test all ([
384
+ else_in_sys. eq ~ 0 ,
385
+ else_in_sys. eq ~ 3 ,
386
+ else_in_sys. eq ~ 5 ,
387
+ ] .∈ [equations (else_in_sys)])
388
+
389
+ @test getdefault (if_in_sys. eq) == 1
390
+ @test getdefault (elseif_in_sys. eq) == 0
391
+ end
376
392
377
- @test getdefault (in_sys_1 . eq) == 1
378
- @test getdefault (in_sys_2 . eq) == 0
393
+ @testset " Conditional statements outside the blocks " begin
394
+ @mtkmodel C begin end
379
395
380
396
# Branching statement outside the begin blocks
381
397
@mtkmodel OutsideTheBlock begin
382
398
@structural_parameters begin
383
- condition = 2
399
+ condition = 0
384
400
end
401
+
385
402
@parameters begin
386
- a0
403
+ default_parameter
387
404
end
388
405
@components begin
389
- sys0 = C ()
406
+ default_sys = C ()
390
407
end
391
408
@equations begin
392
- a0 ~ 0
409
+ default_parameter ~ 0
393
410
end
394
411
395
412
if condition == 1
396
413
@parameters begin
397
- a1
414
+ if_parameter
398
415
end
399
416
@equations begin
400
- a1 ~ 0
417
+ if_parameter ~ 0
401
418
end
402
419
@components begin
403
- sys1 = C ()
420
+ if_sys = C ()
404
421
end
405
422
elseif condition == 2
406
423
@parameters begin
407
- a2
424
+ elseif_parameter
408
425
end
409
426
@equations begin
410
- a2 ~ 0
427
+ elseif_parameter ~ 0
411
428
end
412
429
@components begin
413
- sys2 = C ()
430
+ elseif_sys = C ()
414
431
end
415
432
else
416
433
@parameters begin
417
- a3
434
+ else_parameter
418
435
end
419
436
@equations begin
420
- a3 ~ 0
437
+ else_parameter ~ 0
421
438
end
422
439
@components begin
423
- sys3 = C ()
440
+ else_sys = C ()
424
441
end
425
442
end
426
443
end
427
444
428
- @named out_sys_1 = OutsideTheBlock (condition = 1 )
429
- out_sys_1 = complete (out_sys_1)
430
- @named out_sys_2 = OutsideTheBlock (condition = 2 )
431
- out_sys_2 = complete (out_sys_2)
432
- @named out_sys_3 = OutsideTheBlock (condition = 10 )
433
- out_sys_3 = complete (out_sys_3)
434
-
435
- @test nameof .(out_sys_1. systems) == [:sys1 , :sys0 ]
436
- @test nameof .(out_sys_2. systems) == [:sys2 , :sys0 ]
437
- @test nameof .(out_sys_3. systems) == [:sys3 , :sys0 ]
438
-
439
- @test Equation[out_sys_1. a1 ~ 0
440
- out_sys_1. a0 ~ 0 ] == equations (out_sys_1)
441
- @test Equation[out_sys_2. a2 ~ 0
442
- out_sys_1. a0 ~ 0 ] == equations (out_sys_2)
443
- @test Equation[out_sys_3. a3 ~ 0
444
- out_sys_1. a0 ~ 0 ] == equations (out_sys_3)
445
+ @named if_out_sys = OutsideTheBlock (condition = 1 )
446
+ if_out_sys = complete (if_out_sys)
447
+ @named elseif_out_sys = OutsideTheBlock (condition = 2 )
448
+ elseif_out_sys = complete (elseif_out_sys)
449
+ @named else_out_sys = OutsideTheBlock (condition = 10 )
450
+ else_out_sys = complete (else_out_sys)
451
+ @named ternary_out_sys = OutsideTheBlock (condition = 4 )
452
+ else_out_sys = complete (else_out_sys)
453
+
454
+ @test nameof .(parameters (if_out_sys)) == [:if_parameter , :default_parameter ]
455
+ @test nameof .(parameters (elseif_out_sys)) == [:elseif_parameter , :default_parameter ]
456
+ @test nameof .(parameters (else_out_sys)) == [:else_parameter , :default_parameter ]
457
+
458
+ @test nameof .(get_systems (if_out_sys)) == [:if_sys , :default_sys ]
459
+ @test nameof .(get_systems (elseif_out_sys)) == [:elseif_sys , :default_sys ]
460
+ @test nameof .(get_systems (else_out_sys)) == [:else_sys , :default_sys ]
461
+
462
+ @test Equation[if_out_sys. if_parameter ~ 0
463
+ if_out_sys. default_parameter ~ 0 ] == equations (if_out_sys)
464
+ @test Equation[elseif_out_sys. elseif_parameter ~ 0
465
+ elseif_out_sys. default_parameter ~ 0 ] == equations (elseif_out_sys)
466
+ @test Equation[else_out_sys. else_parameter ~ 0
467
+ else_out_sys. default_parameter ~ 0 ] == equations (else_out_sys)
468
+
469
+ @mtkmodel TernaryBranchingOutsideTheBlock begin
470
+ @structural_parameters begin
471
+ condition = true
472
+ end
473
+ condition ? begin
474
+ @parameters begin
475
+ ternary_parameter_true
476
+ end
477
+ @equations begin
478
+ ternary_parameter_true ~ 0
479
+ end
480
+ @components begin
481
+ ternary_sys_true = C ()
482
+ end
483
+ end : begin
484
+ @parameters begin
485
+ ternary_parameter_false
486
+ end
487
+ @equations begin
488
+ ternary_parameter_false ~ 0
489
+ end
490
+ @components begin
491
+ ternary_sys_false = C ()
492
+ end
493
+ end
494
+ end
495
+
496
+ @named ternary_true = TernaryBranchingOutsideTheBlock ()
497
+ ternary_true = complete (ternary_true)
498
+
499
+ @named ternary_false = TernaryBranchingOutsideTheBlock (condition = false )
500
+ ternary_false = complete (ternary_false)
501
+
502
+ @test nameof .(parameters (ternary_true)) == [:ternary_parameter_true ]
503
+ @test nameof .(parameters (ternary_false)) == [:ternary_parameter_false ]
504
+
505
+ @test nameof .(get_systems (ternary_true)) == [:ternary_sys_true ]
506
+ @test nameof .(get_systems (ternary_false)) == [:ternary_sys_false ]
507
+
508
+ @test Equation[ternary_true. ternary_parameter_true ~ 0 ] == equations (ternary_true)
509
+ @test Equation[ternary_false. ternary_parameter_false ~ 0 ] == equations (ternary_false)
445
510
end
0 commit comments