|
1 | 1 | using ModelingToolkit, Test
|
2 |
| -using ModelingToolkit: value, vars |
| 2 | +using ModelingToolkit: value, vars, parse_variable |
3 | 3 | using SymbolicUtils: <ₑ
|
| 4 | + |
4 | 5 | @parameters α β δ
|
5 | 6 | expr = (((1 / β - 1) + δ) / α)^(1 / (α - 1))
|
6 | 7 | ref = sort([β, δ, α], lt = <ₑ)
|
@@ -41,3 +42,99 @@ ts = collect_ivs([eq])
|
41 | 42 | res = vars(fn([x, y], z))
|
42 | 43 | @test length(res) == 3
|
43 | 44 | end
|
| 45 | + |
| 46 | +@testset "parse_variable" begin |
| 47 | + @mtkmodel Lorenz begin |
| 48 | + @variables begin |
| 49 | + x(t) |
| 50 | + y(t) |
| 51 | + z(t) |
| 52 | + end |
| 53 | + @parameters begin |
| 54 | + σ |
| 55 | + ρ |
| 56 | + β |
| 57 | + end |
| 58 | + @equations begin |
| 59 | + D(D(x)) ~ σ * (y - x) |
| 60 | + D(y) ~ x * (ρ - z) - y |
| 61 | + D(z) ~ x * y - β * z |
| 62 | + end |
| 63 | + end |
| 64 | + @mtkmodel ArrSys begin |
| 65 | + @variables begin |
| 66 | + x(t)[1:2] |
| 67 | + end |
| 68 | + @parameters begin |
| 69 | + p[1:2, 1:2] |
| 70 | + end |
| 71 | + @equations begin |
| 72 | + D(D(x)) ~ p * x |
| 73 | + end |
| 74 | + end |
| 75 | + @mtkmodel Outer begin |
| 76 | + @components begin |
| 77 | + 😄 = Lorenz() |
| 78 | + arr = ArrSys() |
| 79 | + end |
| 80 | + end |
| 81 | + |
| 82 | + @mtkbuild sys = Outer() |
| 83 | + for (str, var) in [ |
| 84 | + # unicode system, scalar variable |
| 85 | + ("😄.x", sys.😄.x), |
| 86 | + ("😄.x(t)", sys.😄.x), |
| 87 | + ("😄₊x", sys.😄.x), |
| 88 | + ("😄₊x(t)", sys.😄.x), |
| 89 | + # derivative |
| 90 | + ("D(😄.x)", D(sys.😄.x)), |
| 91 | + ("D(😄.x(t))", D(sys.😄.x)), |
| 92 | + ("D(😄₊x)", D(sys.😄.x)), |
| 93 | + ("D(😄₊x(t))", D(sys.😄.x)), |
| 94 | + # other derivative |
| 95 | + ("😄.xˍt", D(sys.😄.x)), |
| 96 | + ("😄.x(t)ˍt", D(sys.😄.x)), |
| 97 | + ("😄₊xˍt", D(sys.😄.x)), |
| 98 | + ("😄₊x(t)ˍt", D(sys.😄.x)), |
| 99 | + # scalar parameter |
| 100 | + ("😄.σ", sys.😄.σ), |
| 101 | + ("😄₊σ", sys.😄.σ), |
| 102 | + # array variable |
| 103 | + ("arr.x", sys.arr.x), |
| 104 | + ("arr₊x", sys.arr.x), |
| 105 | + ("arr.x(t)", sys.arr.x), |
| 106 | + ("arr₊x(t)", sys.arr.x), |
| 107 | + # getindex |
| 108 | + ("arr.x[1]", sys.arr.x[1]), |
| 109 | + ("arr₊x[1]", sys.arr.x[1]), |
| 110 | + ("arr.x(t)[1]", sys.arr.x[1]), |
| 111 | + ("arr₊x(t)[1]", sys.arr.x[1]), |
| 112 | + # derivative |
| 113 | + ("D(arr.x(t))", D(sys.arr.x)), |
| 114 | + ("D(arr₊x(t))", D(sys.arr.x)), |
| 115 | + ("D(arr.x[1])", D(sys.arr.x[1])), |
| 116 | + ("D(arr₊x[1])", D(sys.arr.x[1])), |
| 117 | + ("D(arr.x(t)[1])", D(sys.arr.x[1])), |
| 118 | + ("D(arr₊x(t)[1])", D(sys.arr.x[1])), |
| 119 | + # other derivative |
| 120 | + ("arr.xˍt", D(sys.arr.x)), |
| 121 | + ("arr₊xˍt", D(sys.arr.x)), |
| 122 | + ("arr.xˍt(t)", D(sys.arr.x)), |
| 123 | + ("arr₊xˍt(t)", D(sys.arr.x)), |
| 124 | + ("arr.xˍt[1]", D(sys.arr.x[1])), |
| 125 | + ("arr₊xˍt[1]", D(sys.arr.x[1])), |
| 126 | + ("arr.xˍt(t)[1]", D(sys.arr.x[1])), |
| 127 | + ("arr₊xˍt(t)[1]", D(sys.arr.x[1])), |
| 128 | + ("arr.x(t)ˍt", D(sys.arr.x)), |
| 129 | + ("arr₊x(t)ˍt", D(sys.arr.x)), |
| 130 | + ("arr.x(t)ˍt[1]", D(sys.arr.x[1])), |
| 131 | + ("arr₊x(t)ˍt[1]", D(sys.arr.x[1])), |
| 132 | + # array parameter |
| 133 | + ("arr.p", sys.arr.p), |
| 134 | + ("arr₊p", sys.arr.p), |
| 135 | + ("arr.p[1, 2]", sys.arr.p[1, 2]), |
| 136 | + ("arr₊p[1, 2]", sys.arr.p[1, 2]) |
| 137 | + ] |
| 138 | + isequal(parse_variable(sys, str), var) |
| 139 | + end |
| 140 | +end |
0 commit comments