@@ -160,7 +160,7 @@ integ = init(ODEProblem((u, p, t) -> u, 0.0, (0.0, 1.0)), Tsit5(), saveat = _sav
160
160
save_end = false )
161
161
add_tstop! (integ, 2.0 )
162
162
solve! (integ)
163
- @test integ. sol. t == _saveat
163
+ @test integ. sol. t == _saveat[ 1 : end - 1 ]
164
164
165
165
# Catch save for maxiters
166
166
ode = ODEProblem ((u, p, t) -> u, 1.0 , (0.0 , 1.0 ))
@@ -187,3 +187,28 @@ prob = ODEProblem(SIR!, [0.99, 0.01, 0.0], (t_obs[1], t_obs[end]), [0.20, 0.15])
187
187
sol = solve (prob, DP5 (), reltol = 1e-6 , abstol = 1e-6 , saveat = t_obs)
188
188
@test maximum (sol) <= 1
189
189
@test minimum (sol) >= 0
190
+
191
+ @testset " Proper save_start and save_end behavior" begin
192
+ function f2 (du, u, p, t)
193
+ du[1 ] = - cos (u[1 ]) * u[1 ]
194
+ end
195
+ prob = ODEProblem (f2, [10 ], (0.0 , 0.4 ))
196
+
197
+ @test solve (prob, Tsit5 (); saveat = 0 : .1 : .4 ). t == [0.0 ; 0.1 ; 0.2 ; 0.3 ; 0.4 ]
198
+ @test solve (prob, Tsit5 (); saveat = 0 : .1 : .4 , save_start = true , save_end = true ). t == [0.0 ; 0.1 ; 0.2 ; 0.3 ; 0.4 ]
199
+ @test solve (prob, Tsit5 (); saveat = 0 : .1 : .4 , save_start = false , save_end = false ). t == [0.1 ; 0.2 ; 0.3 ]
200
+
201
+ ts = solve (prob, Tsit5 ()). t
202
+ @test 0.0 in ts
203
+ @test 0.4 in ts
204
+ ts = solve (prob, Tsit5 (); save_start = true , save_end = true ). t
205
+ @test 0.0 in ts
206
+ @test 0.4 in ts
207
+ ts = solve (prob, Tsit5 (); save_start = false , save_end = false ). t
208
+ @test 0.0 ∉ ts
209
+ @test 0.4 ∉ ts
210
+
211
+ @test solve (prob, Tsit5 (); saveat = [.2 ]). t == [0.2 ]
212
+ @test solve (prob, Tsit5 (); saveat = [.2 ], save_start = true , save_end = true ). t == [0.0 ; 0.2 ; 0.4 ]
213
+ @test solve (prob, Tsit5 (); saveat = [.2 ], save_start = false , save_end = false ). t == [0.2 ]
214
+ end
0 commit comments