From 90d0649635f230ba450d4ffef8df259cba67387b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Wed, 22 May 2019 20:00:46 +0200 Subject: [PATCH] Fix names implementation for bridges --- src/Bridges/bridgeoptimizer.jl | 9 +++++++++ test/Bridges/bridgeoptimizer.jl | 4 +++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Bridges/bridgeoptimizer.jl b/src/Bridges/bridgeoptimizer.jl index 9865345c3c..518990e4ff 100644 --- a/src/Bridges/bridgeoptimizer.jl +++ b/src/Bridges/bridgeoptimizer.jl @@ -86,6 +86,8 @@ function MOI.empty!(b::AbstractBridgeOptimizer) empty!(b.bridges) empty!(b.constraint_types) empty!(b.single_variable_constraints) + empty!(b.con_to_name) + b.name_to_con = nothing end function MOI.supports(b::AbstractBridgeOptimizer, attr::Union{MOI.AbstractModelAttribute, @@ -146,6 +148,10 @@ function MOI.delete(b::AbstractBridgeOptimizer, ci::CI) end MOI.delete(b, bridge(b, ci)) _remove_bridge(b, ci) + b.name_to_con = nothing + if haskey(b.con_to_name, ci) + delete!(b.con_to_name, ci) + end else MOI.delete(b.model, ci) end @@ -379,6 +385,9 @@ function MOI.get(b::AbstractBridgeOptimizer, IdxT::Type{<:MOI.ConstraintIndex}, if ci == CI{Nothing, Nothing}(-1) error("Multiple constraints have the name $name.") elseif ci isa IdxT + if MOI.get(b.model, CI, name) !== nothing + error("Multiple constraints have the name $name.") + end return ci else return nothing diff --git a/test/Bridges/bridgeoptimizer.jl b/test/Bridges/bridgeoptimizer.jl index 06283f3cf5..f34b9fd924 100644 --- a/test/Bridges/bridgeoptimizer.jl +++ b/test/Bridges/bridgeoptimizer.jl @@ -13,7 +13,7 @@ struct UnknownConstraintAttribute <: MOI.AbstractConstraintAttribute end MOI.is_set_by_optimize(::UnknownConstraintAttribute) = true mock = MOIU.MockOptimizer(SimpleModel{Float64}()) -bridged_mock = MOIB.SplitInterval{Float64}(mock) +bridged_mock = MOIB.LessToGreater{Float64}(MOIB.SplitInterval{Float64}(mock)) @testset "Unsupported constraint attribute" begin attr = UnknownConstraintAttribute() @@ -50,6 +50,8 @@ MOI.empty!(bridged_mock) @testset "Name test" begin MOIT.nametest(bridged_mock) + # Test that names are deleted in `MOI.empty!` + MOIT.nametest(bridged_mock) end @testset "Copy test" begin