@@ -12,6 +12,7 @@ import Test
1212import OptimalControl
1313import CTDirect
1414import CTSolvers
15+ import CTBase
1516
1617const VERBOSE = isdefined (Main, :TestOptions ) ? Main. TestOptions. VERBOSE : true
1718const SHOWTIMING = isdefined (Main, :TestOptions ) ? Main. TestOptions. SHOWTIMING : true
@@ -94,6 +95,50 @@ function test_kwarg_extraction()
9495 result = OptimalControl. _extract_kwarg (kw, CTDirect. AbstractDiscretizer)
9596 Test. @test result isa Nothing
9697 end
98+ # ====================================================================
99+ # UNIT TESTS - Action Kwarg Extraction (aliases)
100+ # ====================================================================
101+
102+ Test. @testset " Action Kwarg Extraction" begin
103+ Test. @testset " Extracts primary name" begin
104+ kw = pairs ((; initial_guess= 42 , display= false ))
105+ val, rest = OptimalControl. _extract_action_kwarg (kw, (:initial_guess , :init , :i ), nothing )
106+ Test. @test val == 42
107+ Test. @test haskey (rest, :display )
108+ Test. @test ! haskey (rest, :initial_guess )
109+ end
110+
111+ Test. @testset " Extracts alias 1" begin
112+ kw = pairs ((; init= 42 , display= false ))
113+ val, rest = OptimalControl. _extract_action_kwarg (kw, (:initial_guess , :init , :i ), nothing )
114+ Test. @test val == 42
115+ Test. @test haskey (rest, :display )
116+ Test. @test ! haskey (rest, :init )
117+ end
118+
119+ Test. @testset " Extracts alias 2" begin
120+ kw = pairs ((; i= 42 , display= false ))
121+ val, rest = OptimalControl. _extract_action_kwarg (kw, (:initial_guess , :init , :i ), nothing )
122+ Test. @test val == 42
123+ Test. @test haskey (rest, :display )
124+ Test. @test ! haskey (rest, :i )
125+ end
126+
127+ Test. @testset " Returns default when not found" begin
128+ kw = pairs ((; display= false ))
129+ val, rest = OptimalControl. _extract_action_kwarg (kw, (:initial_guess , :init , :i ), :my_default )
130+ Test. @test val === :my_default
131+ Test. @test haskey (rest, :display )
132+ end
133+
134+ Test. @testset " Throws on multiple aliases present" begin
135+ kw = pairs ((; init= 42 , i= 43 ))
136+ Test. @test_throws CTBase. IncorrectArgument OptimalControl. _extract_action_kwarg (kw, (:initial_guess , :init , :i ), nothing )
137+
138+ kw2 = pairs ((; initial_guess= 42 , init= 43 , i= 44 ))
139+ Test. @test_throws CTBase. IncorrectArgument OptimalControl. _extract_action_kwarg (kw2, (:initial_guess , :init , :i ), nothing )
140+ end
141+ end
97142 end
98143end
99144
0 commit comments