Skip to content

Commit cad3e26

Browse files
committed
More tests
1 parent d067cc3 commit cad3e26

File tree

2 files changed

+65
-2
lines changed

2 files changed

+65
-2
lines changed

src/MOI_wrapper/variable.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,10 +199,10 @@ function MOI.add_constraint(o::Optimizer, vi::MOI.VariableIndex, ::MOI.ZeroOne)
199199
allow_modification(o)
200200
v = var(o, vi)
201201
p_infeas = Ref{SCIP_Bool}()
202-
@SCIP_CALL SCIPchgVarType(o, v, SCIP_VARTYPE_BINARY, p_infeas)
203202
lb, ub = SCIPvarGetLbOriginal(v), SCIPvarGetUbOriginal(v)
204203
# Store old bounds for later recovery.
205204
o.binbounds[vi] = MOI.Interval(lb, ub)
205+
@SCIP_CALL SCIPchgVarType(o, v, SCIP_VARTYPE_BINARY, p_infeas)
206206
@SCIP_CALL SCIPchgVarLb(o, v, max(lb, 0.0))
207207
@SCIP_CALL SCIPchgVarUb(o, v, min(ub, 1.0))
208208
ci = MOI.ConstraintIndex{MOI.VariableIndex,MOI.ZeroOne}(vi.value)
@@ -370,7 +370,7 @@ function MOI.delete(
370370
if type == _kSCIP_LESS_AND_GREATER_THAN && S <: MOI.LessThan
371371
o.bound_types[vi] = _kSCIP_GREATER_THAN
372372
elseif type == _kSCIP_LESS_AND_GREATER_THAN && S <: MOI.GreaterThan
373-
o.bound_types[vi] = _kSCIP_LESS_AND_GREATER_THAN
373+
o.bound_types[vi] = _kSCIP_LESS_THAN
374374
else
375375
delete!(o.bound_types, vi)
376376
end

test/MOI_tests.jl

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1583,6 +1583,69 @@ function test_unsupported_nonlinear_operator()
15831583
return
15841584
end
15851585

1586+
function test_delete_variable_with_bounds()
1587+
for sets in (
1588+
(MOI.LessThan(1.0),),
1589+
(MOI.GreaterThan(1.0),),
1590+
(MOI.EqualTo(1.0),),
1591+
(MOI.Interval(1.0, 2.0),),
1592+
(MOI.GreaterThan(1.0), MOI.LessThan(2.0)),
1593+
)
1594+
model = SCIP.Optimizer()
1595+
x = MOI.add_variable(model)
1596+
for set in sets
1597+
MOI.add_constraint(model, x, set)
1598+
end
1599+
ret = MOI.get(model, MOI.ListOfConstraintTypesPresent())
1600+
@test length(ret) == length(sets)
1601+
for set in sets
1602+
(MOI.VariableIndex, typeof(set)) in ret
1603+
end
1604+
MOI.delete(model, x)
1605+
@test isempty(MOI.get(model, MOI.ListOfConstraintTypesPresent()))
1606+
end
1607+
return
1608+
end
1609+
1610+
function test_BoundAlreadySet()
1611+
model = SCIP.Optimizer()
1612+
x = MOI.add_variable(model)
1613+
MOI.add_constraint(model, x, MOI.GreaterThan(1.0))
1614+
MOI.add_constraint(model, x, MOI.LessThan(2.0))
1615+
@test_throws(
1616+
MOI.LowerBoundAlreadySet,
1617+
MOI.add_constraint(model, x, MOI.GreaterThan(1.0)),
1618+
)
1619+
@test_throws(
1620+
MOI.UpperBoundAlreadySet,
1621+
MOI.add_constraint(model, x, MOI.LessThan(1.0)),
1622+
)
1623+
return
1624+
end
1625+
1626+
function test_delete_bounds()
1627+
model = SCIP.Optimizer()
1628+
x = MOI.add_variable(model)
1629+
c_l = MOI.add_constraint(model, x, MOI.GreaterThan(1.0))
1630+
c_u = MOI.add_constraint(model, x, MOI.LessThan(2.0))
1631+
MOI.delete(model, c_u)
1632+
MOI.add_constraint(model, x, MOI.LessThan(3.0))
1633+
@test MOI.get(model, MOI.ConstraintSet(), c_u) == MOI.LessThan(3.0)
1634+
MOI.delete(model, c_l)
1635+
MOI.add_constraint(model, x, MOI.GreaterThan(-1.0))
1636+
@test MOI.get(model, MOI.ConstraintSet(), c_l) == MOI.GreaterThan(-1.0)
1637+
return
1638+
end
1639+
1640+
function test_get_binary_with_bounds()
1641+
model = SCIP.Optimizer()
1642+
x = MOI.add_variable(model)
1643+
c = MOI.add_constraint(model, x, MOI.Interval(0.5, 1.1))
1644+
MOI.add_constraint(model, x, MOI.ZeroOne())
1645+
@test MOI.get(model, MOI.ConstraintSet(), c) == MOI.Interval(0.5, 1.1)
1646+
return
1647+
end
1648+
15861649
end # module TestMOIWrapper
15871650

15881651
TestMOIWrapper.runtests()

0 commit comments

Comments
 (0)