Skip to content

Commit fc13ecd

Browse files
test: add tests for parse_variable
1 parent 73daad1 commit fc13ecd

File tree

1 file changed

+98
-1
lines changed

1 file changed

+98
-1
lines changed

test/variable_utils.jl

Lines changed: 98 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using ModelingToolkit, Test
2-
using ModelingToolkit: value, vars
2+
using ModelingToolkit: value, vars, parse_variable
33
using SymbolicUtils: <
4+
45
@parameters α β δ
56
expr = (((1 / β - 1) + δ) / α)^(1 /- 1))
67
ref = sort([β, δ, α], lt = <ₑ)
@@ -41,3 +42,99 @@ ts = collect_ivs([eq])
4142
res = vars(fn([x, y], z))
4243
@test length(res) == 3
4344
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

Comments
 (0)