Skip to content

Commit 24cbe4a

Browse files
Merge pull request #454 from SciML/test_refactor
Refactor the tests a bit more
2 parents 14d42df + be218a6 commit 24cbe4a

File tree

5 files changed

+190
-138
lines changed

5 files changed

+190
-138
lines changed

.buildkite/pipeline.yml

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ steps:
3838
julia_args: "--threads=auto"
3939
agents:
4040
queue: "juliaecosystem"
41-
exclusive: true
4241
env:
4342
GROUP: 'SROCKC2WeakConvergence'
4443
timeout_in_minutes: 240
@@ -91,6 +90,37 @@ steps:
9190
# Don't run Buildkite if the commit message includes the text [skip tests]
9291
if: build.message !~ /\[skip tests\]/
9392

93+
- label: "WeakConvergence5"
94+
plugins:
95+
- JuliaCI/julia#v1:
96+
version: "1"
97+
- JuliaCI/julia-test#v1:
98+
coverage: false
99+
julia_args: "--threads=auto"
100+
agents:
101+
queue: "juliaecosystem"
102+
exclusive: true
103+
env:
104+
GROUP: 'WeakConvergence5'
105+
timeout_in_minutes: 240
106+
# Don't run Buildkite if the commit message includes the text [skip tests]
107+
if: build.message !~ /\[skip tests\]/
108+
109+
- label: "WeakConvergence6"
110+
plugins:
111+
- JuliaCI/julia#v1:
112+
version: "1"
113+
- JuliaCI/julia-test#v1:
114+
coverage: false
115+
julia_args: "--threads=auto"
116+
agents:
117+
queue: "juliaecosystem"
118+
env:
119+
GROUP: 'WeakConvergence6'
120+
timeout_in_minutes: 240
121+
# Don't run Buildkite if the commit message includes the text [skip tests]
122+
if: build.message !~ /\[skip tests\]/
123+
94124
- label: "WeakAdaptiveCPU"
95125
plugins:
96126
- JuliaCI/julia#v1:

test/runtests.jl

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,14 +85,21 @@ const is_APPVEYOR = Sys.iswindows() && haskey(ENV,"APPVEYOR")
8585

8686
if !is_APPVEYOR && GROUP == "WeakConvergence3"
8787
@time @safetestset "Roessler weak SRK (non-diagonal) Tests" begin include("weak_convergence/srk_weak_final_non_diagonal.jl") end
88-
@time @safetestset "Weak Stratonovich Tests" begin include("weak_convergence/weak_strat.jl") end
8988
end
9089

9190
if !is_APPVEYOR && GROUP == "WeakConvergence4"
9291
@time @safetestset "Weak Stratonovich (non-diagonal) Tests" begin include("weak_convergence/weak_strat_non_diagonal.jl") end
9392
@time @safetestset "SIE SME weak Tests" begin include("weak_convergence/SIE_SME.jl") end
9493
end
9594

95+
if !is_APPVEYOR && GROUP == "WeakConvergence5"
96+
@time @safetestset "Weak Stratonovich Tests" begin include("weak_convergence/weak_strat.jl") end
97+
end
98+
99+
if !is_APPVEYOR && GROUP == "WeakConvergence6"
100+
@time @safetestset "Roessler weak SRK diagonal Tests" begin include("weak_convergence/srk_weak_diagonal_final.jl") end
101+
end
102+
96103
if !is_APPVEYOR && GROUP == "OOPWeakConvergence"
97104
@time @safetestset "OOP Weak Convergence Tests" begin include("weak_convergence/oop_weak.jl") end
98105
@time @safetestset "Additive Weak Convergence Tests" begin include("weak_convergence/additive_weak.jl") end
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
"""
2+
Tests for https://arxiv.org/abs/1303.5103 with test problems as in the paper.
3+
DRI1, RI1, RI3, RI5, RI6, RDI1WM, RDI2WM, RDI3WM, RDI4WM
4+
"""
5+
6+
import Statistics # for mean values of trajectories
7+
import LinearAlgebra # for the normn
8+
using StochasticDiffEq
9+
using Test
10+
using Random
11+
using DiffEqDevTools
12+
#using DiffEqGPU
13+
seed = 103473
14+
function prob_func(prob, i, repeat)
15+
remake(prob,seed=seeds[i])
16+
end
17+
18+
"""
19+
Test Diagonal noise SDEs (iip), SIAM Journal on Numerical Analysis, 47 (2009), pp. 1713–1738
20+
"""
21+
22+
@info "Diagonal noise"
23+
24+
u₀ = [0.1,0.1]
25+
function f3!(du,u,p,t)
26+
du[1] = 3//2*u[1]
27+
du[2] = 3//2*u[2]
28+
end
29+
function g3!(du,u,p,t)
30+
du[1] = 1//10*u[1]
31+
du[2] = 1//10*u[2]
32+
end
33+
dts = 1 .//2 .^(3:-1:0)
34+
tspan = (0.0,1.0)
35+
36+
h3(z) = z^2 # == 1//10**exp(3//2*t) if h3(z) = z and == 1//100**exp(301//100*t) if h3(z) = z^2 )
37+
38+
prob = SDEProblem(f3!,g3!,u₀,tspan)
39+
ensemble_prob = EnsembleProblem(prob;
40+
output_func = (sol,i) -> (h3(sol[end][1]),false),
41+
prob_func = prob_func
42+
)
43+
44+
numtraj = Int(5e6)
45+
Random.seed!(seed)
46+
seeds = rand(UInt, numtraj)
47+
48+
sim = test_convergence(dts,ensemble_prob,DRI1(),
49+
save_everystep=false,trajectories=numtraj,save_start=false,adaptive=false,
50+
weak_timeseries_errors=false,weak_dense_errors=false,
51+
expected_value=1//100*exp(301//100)
52+
)
53+
@test -(sim.𝒪est[:weak_final]-2) < 0.3 # order is 2.91
54+
println("DRI1:", sim.𝒪est[:weak_final])
55+
56+
numtraj = Int(8e6)
57+
Random.seed!(seed)
58+
seeds = rand(UInt, numtraj)
59+
60+
sim = test_convergence(dts,ensemble_prob,DRI1NM(),
61+
save_everystep=false,trajectories=numtraj,save_start=false,adaptive=false,
62+
weak_timeseries_errors=false,weak_dense_errors=false,
63+
expected_value=1//100*exp(301//100)
64+
)
65+
@test abs(sim.𝒪est[:weak_final]-2) < 0.4 # order is 2.91
66+
println("DRI1NM:", sim.𝒪est[:weak_final])
67+
68+
sim = test_convergence(dts,ensemble_prob,RI1(),
69+
save_everystep=false,trajectories=numtraj,save_start=false,adaptive=false,
70+
weak_timeseries_errors=false,weak_dense_errors=false,
71+
expected_value=1//100*exp(301//100)
72+
)
73+
@test -(sim.𝒪est[:weak_final]-2) < 0.3 # order is 3.05
74+
println("RI1:", sim.𝒪est[:weak_final])
75+
76+
sim = test_convergence(dts,ensemble_prob,RI3(),
77+
save_everystep=false,trajectories=numtraj,save_start=false,adaptive=false,
78+
weak_timeseries_errors=false,weak_dense_errors=false,
79+
expected_value=1//100*exp(301//100)
80+
)
81+
@test -(sim.𝒪est[:weak_final]-2) < 0.3 # order is 2.77
82+
println("RI3:", sim.𝒪est[:weak_final])
83+
84+
sim = test_convergence(dts,ensemble_prob,RI5(),
85+
save_everystep=false,trajectories=numtraj,save_start=false,adaptive=false,
86+
weak_timeseries_errors=false,weak_dense_errors=false,
87+
expected_value=1//100*exp(301//100)
88+
)
89+
@test abs(sim.𝒪est[:weak_final]-2) < 0.45
90+
println("RI5:", sim.𝒪est[:weak_final])
91+
92+
93+
numtraj = Int(6e6)
94+
Random.seed!(seed)
95+
seeds = rand(UInt, numtraj)
96+
97+
sim = test_convergence(dts,ensemble_prob,RI6(),
98+
save_everystep=false,trajectories=numtraj,save_start=false,adaptive=false,
99+
weak_timeseries_errors=false,weak_dense_errors=false,
100+
expected_value=1//100*exp(301//100)
101+
)
102+
@test abs(sim.𝒪est[:weak_final]-2) < 0.5 # order is 1.55
103+
println("R6:", sim.𝒪est[:weak_final])
104+
105+
106+
numtraj = Int(4e6)
107+
Random.seed!(seed)
108+
seeds = rand(UInt, numtraj)
109+
110+
sim = test_convergence(dts,ensemble_prob,RDI1WM(),
111+
save_everystep=false,trajectories=numtraj,save_start=false,adaptive=false,
112+
weak_timeseries_errors=false,weak_dense_errors=false,
113+
expected_value=1//100*exp(301//100)
114+
)
115+
@test abs(sim.𝒪est[:weak_final]-1) < 0.5 # order is 1.44
116+
println("RDI1WM:", sim.𝒪est[:weak_final])
117+
118+
119+
numtraj = Int(6e6)
120+
Random.seed!(seed)
121+
seeds = rand(UInt, numtraj)
122+
123+
sim = test_convergence(dts,ensemble_prob,RDI2WM(),
124+
save_everystep=false,trajectories=numtraj,save_start=false,adaptive=false,
125+
weak_timeseries_errors=false,weak_dense_errors=false,
126+
expected_value=1//100*exp(301//100)
127+
)
128+
@test abs(sim.𝒪est[:weak_final]-2) < 0.5 # order is 1.55
129+
println("RDI2WM:", sim.𝒪est[:weak_final])
130+
131+
132+
numtraj = Int(5e4)
133+
Random.seed!(seed)
134+
seeds = rand(UInt, numtraj)
135+
136+
sim = test_convergence(dts,ensemble_prob,RDI3WM(),
137+
save_everystep=false,trajectories=numtraj,save_start=false,adaptive=false,
138+
weak_timeseries_errors=false,weak_dense_errors=false,
139+
expected_value=1//100*exp(301//100)
140+
)
141+
@test -(sim.𝒪est[:weak_final]-2) < 0.3 # order is 2.84
142+
println("RDI3WM:", sim.𝒪est[:weak_final])
143+
144+
sim = test_convergence(dts,ensemble_prob,RDI4WM(),
145+
save_everystep=false,trajectories=numtraj,save_start=false,adaptive=false,
146+
weak_timeseries_errors=false,weak_dense_errors=false,
147+
expected_value=1//100*exp(301//100)
148+
)
149+
@test -(sim.𝒪est[:weak_final]-2) < 0.3 # order is 2.91
150+
println("RDI4WM:", sim.𝒪est[:weak_final])

test/weak_convergence/srk_weak_final.jl

Lines changed: 0 additions & 135 deletions
Original file line numberDiff line numberDiff line change
@@ -276,138 +276,3 @@ sim = test_convergence(dts,ensemble_prob,RDI4WM(),
276276
)
277277
@test -(sim.𝒪est[:weak_final]-2) < 0.3
278278
println("RDI4WM:", sim.𝒪est[:weak_final])
279-
280-
281-
"""
282-
Test Diagonal noise SDEs (iip), SIAM Journal on Numerical Analysis, 47 (2009), pp. 1713–1738
283-
"""
284-
285-
@info "Diagonal noise"
286-
287-
u₀ = [0.1,0.1]
288-
function f3!(du,u,p,t)
289-
du[1] = 3//2*u[1]
290-
du[2] = 3//2*u[2]
291-
end
292-
function g3!(du,u,p,t)
293-
du[1] = 1//10*u[1]
294-
du[2] = 1//10*u[2]
295-
end
296-
dts = 1 .//2 .^(3:-1:0)
297-
tspan = (0.0,1.0)
298-
299-
h3(z) = z^2 # == 1//10**exp(3//2*t) if h3(z) = z and == 1//100**exp(301//100*t) if h3(z) = z^2 )
300-
301-
prob = SDEProblem(f3!,g3!,u₀,tspan)
302-
ensemble_prob = EnsembleProblem(prob;
303-
output_func = (sol,i) -> (h3(sol[end][1]),false),
304-
prob_func = prob_func
305-
)
306-
307-
numtraj = Int(5e6)
308-
Random.seed!(seed)
309-
seeds = rand(UInt, numtraj)
310-
311-
sim = test_convergence(dts,ensemble_prob,DRI1(),
312-
save_everystep=false,trajectories=numtraj,save_start=false,adaptive=false,
313-
weak_timeseries_errors=false,weak_dense_errors=false,
314-
expected_value=1//100*exp(301//100)
315-
)
316-
@test -(sim.𝒪est[:weak_final]-2) < 0.3 # order is 2.91
317-
println("DRI1:", sim.𝒪est[:weak_final])
318-
319-
numtraj = Int(8e6)
320-
Random.seed!(seed)
321-
seeds = rand(UInt, numtraj)
322-
323-
sim = test_convergence(dts,ensemble_prob,DRI1NM(),
324-
save_everystep=false,trajectories=numtraj,save_start=false,adaptive=false,
325-
weak_timeseries_errors=false,weak_dense_errors=false,
326-
expected_value=1//100*exp(301//100)
327-
)
328-
@test abs(sim.𝒪est[:weak_final]-2) < 0.4 # order is 2.91
329-
println("DRI1NM:", sim.𝒪est[:weak_final])
330-
331-
sim = test_convergence(dts,ensemble_prob,RI1(),
332-
save_everystep=false,trajectories=numtraj,save_start=false,adaptive=false,
333-
weak_timeseries_errors=false,weak_dense_errors=false,
334-
expected_value=1//100*exp(301//100)
335-
)
336-
@test -(sim.𝒪est[:weak_final]-2) < 0.3 # order is 3.05
337-
println("RI1:", sim.𝒪est[:weak_final])
338-
339-
sim = test_convergence(dts,ensemble_prob,RI3(),
340-
save_everystep=false,trajectories=numtraj,save_start=false,adaptive=false,
341-
weak_timeseries_errors=false,weak_dense_errors=false,
342-
expected_value=1//100*exp(301//100)
343-
)
344-
@test -(sim.𝒪est[:weak_final]-2) < 0.3 # order is 2.77
345-
println("RI3:", sim.𝒪est[:weak_final])
346-
347-
sim = test_convergence(dts,ensemble_prob,RI5(),
348-
save_everystep=false,trajectories=numtraj,save_start=false,adaptive=false,
349-
weak_timeseries_errors=false,weak_dense_errors=false,
350-
expected_value=1//100*exp(301//100)
351-
)
352-
@test abs(sim.𝒪est[:weak_final]-2) < 0.45
353-
println("RI5:", sim.𝒪est[:weak_final])
354-
355-
356-
numtraj = Int(6e6)
357-
Random.seed!(seed)
358-
seeds = rand(UInt, numtraj)
359-
360-
sim = test_convergence(dts,ensemble_prob,RI6(),
361-
save_everystep=false,trajectories=numtraj,save_start=false,adaptive=false,
362-
weak_timeseries_errors=false,weak_dense_errors=false,
363-
expected_value=1//100*exp(301//100)
364-
)
365-
@test abs(sim.𝒪est[:weak_final]-2) < 0.5 # order is 1.55
366-
println("R6:", sim.𝒪est[:weak_final])
367-
368-
369-
numtraj = Int(4e6)
370-
Random.seed!(seed)
371-
seeds = rand(UInt, numtraj)
372-
373-
sim = test_convergence(dts,ensemble_prob,RDI1WM(),
374-
save_everystep=false,trajectories=numtraj,save_start=false,adaptive=false,
375-
weak_timeseries_errors=false,weak_dense_errors=false,
376-
expected_value=1//100*exp(301//100)
377-
)
378-
@test abs(sim.𝒪est[:weak_final]-1) < 0.5 # order is 1.44
379-
println("RDI1WM:", sim.𝒪est[:weak_final])
380-
381-
382-
numtraj = Int(6e6)
383-
Random.seed!(seed)
384-
seeds = rand(UInt, numtraj)
385-
386-
sim = test_convergence(dts,ensemble_prob,RDI2WM(),
387-
save_everystep=false,trajectories=numtraj,save_start=false,adaptive=false,
388-
weak_timeseries_errors=false,weak_dense_errors=false,
389-
expected_value=1//100*exp(301//100)
390-
)
391-
@test abs(sim.𝒪est[:weak_final]-2) < 0.5 # order is 1.55
392-
println("RDI2WM:", sim.𝒪est[:weak_final])
393-
394-
395-
numtraj = Int(5e4)
396-
Random.seed!(seed)
397-
seeds = rand(UInt, numtraj)
398-
399-
sim = test_convergence(dts,ensemble_prob,RDI3WM(),
400-
save_everystep=false,trajectories=numtraj,save_start=false,adaptive=false,
401-
weak_timeseries_errors=false,weak_dense_errors=false,
402-
expected_value=1//100*exp(301//100)
403-
)
404-
@test -(sim.𝒪est[:weak_final]-2) < 0.3 # order is 2.84
405-
println("RDI3WM:", sim.𝒪est[:weak_final])
406-
407-
sim = test_convergence(dts,ensemble_prob,RDI4WM(),
408-
save_everystep=false,trajectories=numtraj,save_start=false,adaptive=false,
409-
weak_timeseries_errors=false,weak_dense_errors=false,
410-
expected_value=1//100*exp(301//100)
411-
)
412-
@test -(sim.𝒪est[:weak_final]-2) < 0.3 # order is 2.91
413-
println("RDI4WM:", sim.𝒪est[:weak_final])

test/weak_convergence/weak_srockc2.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ Random.seed!(100)
1616
dts = 1 .//2 .^(7:-1:3) #14->7 good plot
1717

1818
println("SROCKC2")
19-
@time sim = test_convergence(dts,prob,SROCKC2(),save_everystep=false,trajectories=Int(5e6),
19+
@time sim = test_convergence(dts,prob_sde_linear_iip,SROCKC2(),save_everystep=false,trajectories=Int(5e6),
2020
weak_timeseries_errors=false)
2121
@show sim.𝒪est[:weak_final]
2222
@test abs(sim.𝒪est[:weak_final]-2) < 0.35

0 commit comments

Comments
 (0)