diff --git a/docs/src/submodules/Bridges/implementation.md b/docs/src/submodules/Bridges/implementation.md index ae821f0087..2a7d278963 100644 --- a/docs/src/submodules/Bridges/implementation.md +++ b/docs/src/submodules/Bridges/implementation.md @@ -79,7 +79,7 @@ julia> MOI.Bridges.runtests( """, ) Test Summary: | Pass Total Time -Bridges.runtests | 29 29 0.0s +Bridges.runtests | 30 30 0.0s ``` There are a number of other useful keyword arguments. @@ -123,5 +123,5 @@ Subject to: ScalarAffineFunction{Int64}-in-LessThan{Int64} (0) - (1) x <= (-1) Test Summary: | Pass Total Time -Bridges.runtests | 29 29 0.0s +Bridges.runtests | 30 30 0.0s ``` diff --git a/src/Bridges/Bridges.jl b/src/Bridges/Bridges.jl index f7c67308aa..b4bfee9b35 100644 --- a/src/Bridges/Bridges.jl +++ b/src/Bridges/Bridges.jl @@ -283,7 +283,7 @@ julia> MOI.Bridges.runtests( end, ) Test Summary: | Pass Total Time -Bridges.runtests | 32 32 0.8s +Bridges.runtests | 33 33 0.8s ``` """ function runtests(args...; kwargs...) @@ -303,17 +303,24 @@ function _runtests( model_eltype = eltype, print_inner_model::Bool = false, cannot_unbridge::Bool = false, + no_bridge_used::Bool = false, ) # Load model and bridge it inner = MOI.Utilities.UniversalFallback(MOI.Utilities.Model{model_eltype}()) model = _bridged_model(Bridge{eltype}, inner) input_fn(model) + Test.@testset "Bridge used" begin + _check_bridged(model; no_bridge_used) + end final_touch(model) # Should be able to call final_touch multiple times. final_touch(model) if print_inner_model print(inner) end + if no_bridge_used + return + end Test.@testset "Test outer bridged model appears like the input" begin # COV_EXCL_LINE test = MOI.Utilities.UniversalFallback(MOI.Utilities.Model{model_eltype}()) @@ -437,7 +444,7 @@ julia> MOI.Bridges.runtests( \"\"\", ) Test Summary: | Pass Total Time -Bridges.runtests | 32 32 0.0s +Bridges.runtests | 33 33 0.0s ``` """ function runtests( @@ -512,6 +519,15 @@ function _general_bridge_tests(bridge::B) where {B<:AbstractBridge} return end +function _check_bridged(model; no_bridge_used) + unused = + isempty(MOI.Bridges.Variable.bridges(model)) && + isempty(MOI.Bridges.Constraint.bridges(model)) && + isempty(MOI.Bridges.Objective.bridges(model)) + Test.@test unused == no_bridge_used + return +end + """ BridgeRequiresFiniteDomainError{ B<:AbstractBridge, diff --git a/test/Bridges/Constraint/IndicatorSOS1Bridge.jl b/test/Bridges/Constraint/IndicatorSOS1Bridge.jl index fe592488af..82cab6eb02 100644 --- a/test/Bridges/Constraint/IndicatorSOS1Bridge.jl +++ b/test/Bridges/Constraint/IndicatorSOS1Bridge.jl @@ -345,6 +345,7 @@ function test_runtests() [z, 2.0 * x * x] in Indicator{ACTIVATE_ON_ONE}(LessThan(2.0)) z in ZeroOne() """, + no_bridge_used = true, ) return end diff --git a/test/Bridges/Constraint/NumberConversionBridge.jl b/test/Bridges/Constraint/NumberConversionBridge.jl index b40908e08b..c8a4e6afdf 100644 --- a/test/Bridges/Constraint/NumberConversionBridge.jl +++ b/test/Bridges/Constraint/NumberConversionBridge.jl @@ -104,6 +104,7 @@ function test_runtests() variables: x ::Float64: [x, x] in Zeros(2) """, + no_bridge_used = true, ) # VectorAffineFunction MOI.Bridges.runtests( diff --git a/test/Bridges/Objective/VectorSlackBridge.jl b/test/Bridges/Objective/VectorSlackBridge.jl index 142007c4fa..3c6000ec2b 100644 --- a/test/Bridges/Objective/VectorSlackBridge.jl +++ b/test/Bridges/Objective/VectorSlackBridge.jl @@ -103,7 +103,8 @@ function test_runtests() """ variables: x maxobjective: [x] - """, + """; + no_bridge_used = true, ) return end