Skip to content

Commit 5143f5c

Browse files
committed
added tests
1 parent 57d1b1f commit 5143f5c

File tree

1 file changed

+56
-2
lines changed

1 file changed

+56
-2
lines changed

test/basictests.jl

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,8 +193,7 @@ end
193193

194194
u0 = [1.0, 1.0]
195195
radius_update_schemes = [RadiusUpdateSchemes.Simple, RadiusUpdateSchemes.Hei,
196-
RadiusUpdateSchemes.Yuan,
197-
RadiusUpdateSchemes.Fan]
196+
RadiusUpdateSchemes.Yuan, RadiusUpdateSchemes.Fan, RadiusUpdateSchemes.Bastin]
198197

199198
for radius_update_scheme in radius_update_schemes
200199
sol = benchmark_immutable(ff, cu0, radius_update_scheme)
@@ -286,6 +285,18 @@ for p in 1.1:0.1:100.0
286285
@test ForwardDiff.derivative(g, p) 1 / (2 * sqrt(p))
287286
end
288287

288+
g = function (p)
289+
probN = NonlinearProblem{false}(f, csu0, p)
290+
sol = solve(probN, TrustRegion(radius_update_scheme = RadiusUpdateSchemes.Bastin),
291+
abstol = 1e-9)
292+
return sol.u[end]
293+
end
294+
295+
for p in 1.1:0.1:100.0
296+
@test g(p) sqrt(p)
297+
@test ForwardDiff.derivative(g, p) 1 / (2 * sqrt(p))
298+
end
299+
289300
# Scalar
290301
f, u0 = (u, p) -> u * u - p, 1.0
291302

@@ -344,6 +355,20 @@ for p in 1.1:0.1:100.0
344355
@test ForwardDiff.derivative(g, p) 1 / (2 * sqrt(p))
345356
end
346357

358+
g = function (p)
359+
probN = NonlinearProblem{false}(f, oftype(p, u0), p)
360+
sol = solve(probN, TrustRegion(radius_update_scheme = RadiusUpdateSchemes.Bastin),
361+
abstol = 1e-10)
362+
return sol.u
363+
end
364+
365+
@test ForwardDiff.derivative(g, 3.0) 1 / (2 * sqrt(3.0))
366+
367+
for p in 1.1:0.1:100.0
368+
@test g(p) sqrt(p)
369+
@test ForwardDiff.derivative(g, p) 1 / (2 * sqrt(p))
370+
end
371+
347372
f = (u, p) -> p[1] * u * u - p[2]
348373
t = (p) -> [sqrt(p[2] / p[1])]
349374
p = [0.9, 50.0]
@@ -379,6 +404,14 @@ end
379404
@test gnewton(p) [sqrt(p[2] / p[1])]
380405
@test ForwardDiff.jacobian(gnewton, p) ForwardDiff.jacobian(t, p)
381406

407+
gnewton = function (p)
408+
probN = NonlinearProblem{false}(f, 0.5, p)
409+
sol = solve(probN, TrustRegion(radius_update_scheme = RadiusUpdateSchemes.Bastin))
410+
return [sol.u]
411+
end
412+
@test gnewton(p) [sqrt(p[2] / p[1])]
413+
@test ForwardDiff.jacobian(gnewton, p) ForwardDiff.jacobian(t, p)
414+
382415
# Iterator interface
383416
f = (u, p) -> u * u - p
384417
g = function (p_range)
@@ -432,6 +465,11 @@ probN = NonlinearProblem(f, u0)
432465
@test solve(probN, TrustRegion(; radius_update_scheme = RadiusUpdateSchemes.Fan, autodiff = false)).u[end]
433466
sqrt(2.0)
434467

468+
@test solve(probN, TrustRegion(radius_update_scheme = RadiusUpdateSchemes.Bastin)).u[end]
469+
sqrt(2.0)
470+
@test solve(probN, TrustRegion(; radius_update_scheme = RadiusUpdateSchemes.Bastin, autodiff = false)).u[end]
471+
sqrt(2.0)
472+
435473
for u0 in [1.0, [1, 1.0]]
436474
local f, probN, sol
437475
f = (u, p) -> u .* u .- 2.0
@@ -475,6 +513,17 @@ u = g(p)
475513
f(u, p)
476514
@test all(abs.(f(u, p)) .< 1e-10)
477515

516+
g = function (p)
517+
probN = NonlinearProblem{false}(f, u0, p)
518+
sol = solve(probN, TrustRegion(radius_update_scheme = RadiusUpdateSchemes.Bastin),
519+
abstol = 1e-10)
520+
return sol.u
521+
end
522+
p = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
523+
u = g(p)
524+
f(u, p)
525+
@test all(abs.(f(u, p)) .< 1e-10)
526+
478527
# Test kwars in `TrustRegion`
479528
max_trust_radius = [10.0, 100.0, 1000.0]
480529
initial_trust_radius = [10.0, 1.0, 0.1]
@@ -542,6 +591,11 @@ for maxiters in maxiterations
542591
@test iip == oop
543592
end
544593

594+
for maxiters in maxiterations
595+
iip, oop = iip_oop(ff, ffiip, u0, RadiusUpdateSchemes.Bastin, maxiters)
596+
@test iip == oop
597+
end
598+
545599
# --- LevenbergMarquardt tests ---
546600

547601
function benchmark_immutable(f, u0)

0 commit comments

Comments
 (0)