Skip to content

Commit 57f31ca

Browse files
Use public APIs for FunctionMap keyword validation
Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
1 parent e5489fa commit 57f31ca

2 files changed

Lines changed: 19 additions & 6 deletions

File tree

lib/OrdinaryDiffEqFunctionMap/src/algorithms.jl

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,15 @@ FunctionMap{scale_by_time}() where {scale_by_time} = FunctionMap{scale_by_time,
1717
trivial_limiter!
1818
)
1919
function FunctionMap(; scale_by_time = false, step_limiter = trivial_limiter!, kwargs...)
20-
kwargs_nt = values(kwargs)
2120
old_kw = Symbol("step_limiter!")
22-
if haskey(kwargs_nt, old_kw)
21+
if haskey(kwargs, old_kw)
2322
if step_limiter === trivial_limiter!
24-
step_limiter = get(kwargs_nt, old_kw, trivial_limiter!)
23+
step_limiter = get(kwargs, old_kw, trivial_limiter!)
2524
end
2625
end
27-
extra_kwargs = Base.structdiff(kwargs_nt, NamedTuple{(old_kw,)})
28-
if !isempty(extra_kwargs)
29-
throw(ArgumentError("Unsupported keyword argument(s): $(keys(extra_kwargs))"))
26+
unsupported_kwargs = filter(!=(old_kw), keys(kwargs))
27+
if !isempty(unsupported_kwargs)
28+
throw(ArgumentError("Unsupported keyword argument(s): $(unsupported_kwargs)"))
3029
end
3130

3231
return FunctionMap{scale_by_time, typeof(step_limiter)}(step_limiter)

lib/OrdinaryDiffEqFunctionMap/test/discrete_algorithm_test.jl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,3 +63,17 @@ end
6363

6464
@test sol3.u == [[0, 0], [1, 1], [2, 3], [3, 6], [4, 10], [5, 15]]
6565
end
66+
67+
@testset "FunctionMap keyword validation" begin
68+
current_limiter!(u, integrator, p, t) = nothing
69+
legacy_limiter!(u, integrator, p, t) = nothing
70+
71+
@test FunctionMap(step_limiter = current_limiter!).step_limiter! === current_limiter!
72+
@test FunctionMap(; step_limiter! = legacy_limiter!).step_limiter! === legacy_limiter!
73+
@test_throws ArgumentError("Unsupported keyword argument(s): (:unsupported,)") FunctionMap(
74+
unsupported = true
75+
)
76+
@test_throws ArgumentError(
77+
"Unsupported keyword argument(s): (:unsupported, :also_unsupported)"
78+
) FunctionMap(unsupported = true, also_unsupported = true)
79+
end

0 commit comments

Comments
 (0)