@@ -15,6 +15,22 @@ sol = solve(prob, Tsit5())
15
15
i4 = findfirst (== (4.0 ), sol[:t ])
16
16
@test sol. u[i4 + 1 ][1 ] > 10.0
17
17
18
+ # callback
19
+ cb = ModelingToolkit. SymbolicDiscreteCallback ([t ~ 0 ],
20
+ (f = affect1!, sts = [], pars = [],
21
+ ctx = [1 ]))
22
+ cb1 = ModelingToolkit. SymbolicDiscreteCallback ([t ~ 0 ], (affect1!, [], [], [1 ]))
23
+ @test ModelingToolkit. affects (cb) isa ModelingToolkit. FunctionalAffect
24
+ @test cb == cb1
25
+ @test ModelingToolkit. SymbolicDiscreteCallback (cb) === cb # passthrough
26
+
27
+ cb = ModelingToolkit. SymbolicContinuousCallback ([t ~ 0 ],
28
+ (f = affect1!, sts = [], pars = [],
29
+ ctx = [1 ]))
30
+ cb1 = ModelingToolkit. SymbolicContinuousCallback ([t ~ 0 ], (affect1!, [], [], [1 ]))
31
+ @test cb == cb1
32
+ @test ModelingToolkit. SymbolicContinuousCallback (cb) === cb # passthrough
33
+
18
34
# named tuple
19
35
sys1 = ODESystem (eqs, t, [u], [], name = :sys ,
20
36
discrete_events = [
202
218
balls = compose (balls, [ball1, ball2])
203
219
204
220
@test ModelingToolkit. has_discrete_events (balls)
221
+ @test length (ModelingToolkit. affects (ModelingToolkit. discrete_events (balls))) == 2
205
222
206
223
prob = ODEProblem (balls, [ball1. x => 10.0 , ball1. v => 0 , ball2. x => 10.0 , ball2. v => 0 ],
207
224
(0 , 3.0 ))
252
269
continuous_events = [[y ~ 0 ] => (bb_affect!, [v], [], nothing )])
253
270
254
271
bb_sys = structural_simplify (bb_model)
272
+ @test ModelingToolkit. affects (ModelingToolkit. continuous_events (bb_sys)) isa
273
+ ModelingToolkit. FunctionalAffect
274
+
255
275
u0 = [v => 0.0 , y => 50.0 ]
256
276
257
277
bb_prob = ODEProblem (bb_sys, u0, (0 , 15.0 ))
0 commit comments