Skip to content

Commit 6a28d75

Browse files
committed
Add more tests
1 parent d151ce6 commit 6a28d75

File tree

3 files changed

+67
-3
lines changed

3 files changed

+67
-3
lines changed

src/Bridges/bridge_optimizer.jl

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1160,7 +1160,11 @@ function _modify_bridged_function(
11601160
change::MOI.AbstractFunctionModification,
11611161
)
11621162
if is_bridged(b, ci_or_obj)
1163-
MOI.modify(recursive_model(b), bridge(b, ci_or_obj), change)
1163+
try
1164+
MOI.modify(recursive_model(b), bridge(b, ci_or_obj), change)
1165+
catch
1166+
MOI.throw_modify_not_allowed(ci_or_obj, change)
1167+
end
11641168
else
11651169
MOI.modify(b.model, ci_or_obj, change)
11661170
end
@@ -1877,6 +1881,18 @@ function modify_bridged_change(
18771881
return
18781882
end
18791883

1884+
function modify_bridged_change(
1885+
b::AbstractBridgeOptimizer,
1886+
ci_or_obj,
1887+
change::MOI.ScalarQuadraticCoefficientChange,
1888+
)
1889+
return MOI.throw_modify_not_allowed(
1890+
ci_or_obj,
1891+
change,
1892+
"Cannot bridge `ScalarQuadraticCoefficientChange`.",
1893+
)
1894+
end
1895+
18801896
function MOI.modify(
18811897
b::AbstractBridgeOptimizer,
18821898
ci::MOI.ConstraintIndex,
@@ -1886,7 +1902,11 @@ function MOI.modify(
18861902
modify_bridged_change(b, ci, change)
18871903
else
18881904
if is_bridged(b, ci)
1889-
call_in_context(MOI.modify, b, ci, change)
1905+
try
1906+
call_in_context(MOI.modify, b, ci, change)
1907+
catch
1908+
MOI.throw_modify_not_allowed(ci, change)
1909+
end
18901910
else
18911911
MOI.modify(b.model, ci, change)
18921912
end

src/Test/test_modification.jl

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1016,7 +1016,7 @@ function test_modification_incorrect_VariableIndex(
10161016
return
10171017
end
10181018

1019-
function test_modification_scalarquadraticcoefficientchange(
1019+
function test_modification_objective_scalarquadraticcoefficientchange(
10201020
model::MOI.ModelLike,
10211021
config::Config{T},
10221022
) where {T}
@@ -1036,3 +1036,23 @@ function test_modification_scalarquadraticcoefficientchange(
10361036
@test MOI.get(model, attr) T(1) * x * x + T(4) * x * y
10371037
return
10381038
end
1039+
1040+
function test_modification_constraint_scalarquadraticcoefficientchange(
1041+
model::MOI.ModelLike,
1042+
config::Config{T},
1043+
) where {T}
1044+
F, S = MOI.ScalarQuadraticFunction{T}, MOI.LessThan{T}
1045+
@requires MOI.supports_constraint(model, F, S)
1046+
@requires _supports(config, MOI.modify)
1047+
@requires _supports(config, MOI.ScalarQuadraticCoefficientChange)
1048+
x = MOI.add_variable(model)
1049+
y = MOI.add_variable(model)
1050+
f = T(1) * x * x + T(1) * x * x - T(1) * x * y + T(2) * y * y - T(1) * x * y
1051+
c = MOI.add_constraint(model, f, MOI.LessThan(T(1)))
1052+
@test MOI.get(model, MOI.ConstraintFunction(), c) f
1053+
g = T(1) * x * x + T(-3) * x * y + T(2) * y * y
1054+
MOI.modify(model, c, MOI.ScalarQuadraticCoefficientChange(x, x, T(2)))
1055+
MOI.modify(model, c, MOI.ScalarQuadraticCoefficientChange(x, y, -T(3)))
1056+
@test MOI.get(model, MOI.ConstraintFunction(), c) g
1057+
return
1058+
end

test/Bridges/bridge_optimizer.jl

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1038,6 +1038,30 @@ function test_deleting_all_variables_in_bridged_functionize_objective()
10381038
return
10391039
end
10401040

1041+
function test_modify_objective_scalar_quadratic_coefficient_change()
1042+
T = Float64
1043+
inner = MOI.Utilities.UniversalFallback(MOI.Utilities.Model{T}())
1044+
model = MOI.Bridges.Objective.Slack{T}(inner)
1045+
x = MOI.add_variable(model)
1046+
MOI.set(model, MOI.ObjectiveSense(), MOI.MIN_SENSE)
1047+
attr = MOI.ObjectiveFunction{MOI.ScalarQuadraticFunction{T}}()
1048+
MOI.set(model, attr, T(1) * x * x + T(2) * x + T(3))
1049+
change = MOI.ScalarQuadraticCoefficientChange(x, x, T(4))
1050+
@test_throws MOI.ModifyObjectiveNotAllowed MOI.modify(model, attr, change)
1051+
return
1052+
end
1053+
1054+
function test_modify_constraint_scalar_quadratic_coefficient_change()
1055+
T = Float64
1056+
inner = MOI.Utilities.UniversalFallback(MOI.Utilities.Model{T}())
1057+
model = MOI.Bridges.Constraint.QuadtoSOC{T}(inner)
1058+
x = MOI.add_variable(model)
1059+
c = MOI.add_constraint(model, T(1) * x * x + T(2) * x, MOI.LessThan(T(1)))
1060+
change = MOI.ScalarQuadraticCoefficientChange(x, x, T(4))
1061+
@test_throws MOI.ModifyConstraintNotAllowed MOI.modify(model, c, change)
1062+
return
1063+
end
1064+
10411065
end # module
10421066

10431067
TestBridgeOptimizer.runtests()

0 commit comments

Comments
 (0)