diff --git a/src/Bridges/Variable/flip_sign.jl b/src/Bridges/Variable/flip_sign.jl index 63441338df..0b3a92c17e 100644 --- a/src/Bridges/Variable/flip_sign.jl +++ b/src/Bridges/Variable/flip_sign.jl @@ -48,6 +48,9 @@ function MOI.delete(model::MOI.ModelLike, bridge::FlipSignBridge, i::IndexInVect end # Attributes, Bridge acting as a constraint +function MOI.get(model::MOI.ModelLike, attr::MOI.ConstraintSet, bridge::FlipSignBridge{T, S1}) where {T, S1<:MOI.AbstractVectorSet} + return S1(length(bridge.flipped_variables)) +end function MOI.get(model::MOI.ModelLike, attr::Union{MOI.ConstraintPrimal, MOI.ConstraintDual}, diff --git a/test/Bridges/Variable/flip_sign.jl b/test/Bridges/Variable/flip_sign.jl index ed359a0fa4..cb552c3798 100644 --- a/test/Bridges/Variable/flip_sign.jl +++ b/test/Bridges/Variable/flip_sign.jl @@ -31,6 +31,49 @@ config = MOIT.TestConfig() x, y_flipped, z, s = MOI.get(mock, MOI.ListOfVariableIndices()) @test MOI.get(mock, MOI.VariablePrimalStart(), y_flipped) == -1 @test MOI.get(bridged_mock, MOI.VariablePrimalStart(), y) == 1 + + var_names = ["x", "y", "z", "w"] + MOI.set(mock, MOI.VariableName(), MOI.get(mock, MOI.ListOfVariableIndices()), var_names) + con_w = MOI.get(mock, MOI.ListOfConstraintIndices{MathOptInterface.VectorOfVariables, MathOptInterface.Zeros}())[1] + con_yz = MOI.get(mock, MOI.ListOfConstraintIndices{MathOptInterface.VectorOfVariables, MathOptInterface.Nonnegatives}()) + con_ex = MOI.get(mock, MOI.ListOfConstraintIndices{MathOptInterface.VectorAffineFunction{Float64}, MathOptInterface.Zeros}())[1] + + MOI.set(mock, MOI.ConstraintName(), con_w, "cw") + MOI.set(mock, MOI.ConstraintName(), con_yz[1], "cy") + MOI.set(mock, MOI.ConstraintName(), con_yz[2], "cz") + MOI.set(mock, MOI.ConstraintName(), con_ex, "cex") + + MOI.set(bridged_mock, MOI.VariableName(), MOI.get(bridged_mock, MOI.ListOfVariableIndices())[4], "v") + con_v = MOI.get(bridged_mock, MOI.ListOfConstraintIndices{MathOptInterface.VectorOfVariables, MathOptInterface.Nonpositives}())[1] + MOI.set(bridged_mock, MOI.ConstraintName(), con_v, "cv") + + @testset "Test Mock model" begin + s = """ + variables: x, y, z, w + cw: [w] in MathOptInterface.Zeros(1) + cy: [y] in MathOptInterface.Nonnegatives(1) + cz: [z] in MathOptInterface.Nonnegatives(1) + cex: [1*x + -1*w + 4.0, -1*y + 3.0, 1*x + 1*z + -12.0] in MathOptInterface.Zeros(3) + minobjective: 3*x + -2*y + -4*z + """ + model = MOIU.Model{Float64}() + MOIU.loadfromstring!(model, s) + MOIU.test_models_equal(mock, model, var_names, ["cw", "cy", "cz", "cex"]) + end + + @testset "Test Bridged model" begin + s = """ + variables: x, z, w, v + cv: [v] in MathOptInterface.Nonpositives(1) + cw: [w] in MathOptInterface.Zeros(1) + cz: [z] in MathOptInterface.Nonnegatives(1) + cex: [1*x + -1*w + 4.0, 1*v + 3.0, 1*x + 1*z + -12.0] in MathOptInterface.Zeros(3) + minobjective: 3*x + 2*v + -4*z + """ + model = MOIU.Model{Float64}() + MOIU.loadfromstring!(model, s) + MOIU.test_models_equal(bridged_mock, model, ["x", "z", "w", "v"], ["cv", "cw", "cz", "cex"]) + end end @testset "lin4" begin