@@ -595,6 +595,7 @@ function test_double_deletion_scalar()
595595 @test ! MOI. Bridges. is_bridged (model, b2. constraint)
596596 MOI. delete (model, x)
597597 @test ! MOI. is_valid (model, x)
598+ @test MOI. is_empty (model)
598599 return
599600end
600601
@@ -614,6 +615,7 @@ function test_double_deletion_vector()
614615 @test ! MOI. Bridges. is_bridged (model, b2. constraint)
615616 MOI. delete (model, x)
616617 @test all (vi -> ! MOI. is_valid (model, vi), x)
618+ @test MOI. is_empty (model)
617619 return
618620end
619621
@@ -1464,7 +1466,7 @@ function test_BridgeRequiresFiniteDomainError()
14641466end
14651467
14661468MOI. Utilities. @model (
1467- Model2817 ,
1469+ Model2817a ,
14681470 (),
14691471 (),
14701472 (MOI. Nonnegatives,),
@@ -1476,19 +1478,26 @@ MOI.Utilities.@model(
14761478);
14771479
14781480function MOI. supports_constraint (
1479- :: Model2817 ,
1481+ :: Model2817a ,
14801482 :: Type{MOI.VariableIndex} ,
14811483 :: Type{S} ,
14821484) where {S<: MOI.AbstractScalarSet }
14831485 return false
14841486end
14851487
1486- function test_issue_2817 ()
1487- model = MOI. Bridges. full_bridge_optimizer (Model2817 {Float64} (), Float64);
1488- x, _ = MOI. add_constrained_variable (model, MOI. Interval (0.0 , 1.0 ));
1488+ function test_issue_2817a ()
1489+ inner = Model2817a {Float64} ()
1490+ model = MOI. Bridges. full_bridge_optimizer (inner, Float64);
1491+ x, c = MOI. add_constrained_variable (model, MOI. Interval (0.0 , 1.0 ));
1492+ @test isa (
1493+ model. constraint_map[c],
1494+ MOI. Bridges. Constraint. IntervalToHyperRectangleBridge,
1495+ )
14891496 MOI. delete (model, x)
14901497 @test ! MOI. is_valid (model, x)
14911498 @test MOI. is_empty (model)
1499+ @test MOI. is_empty (inner)
1500+ @test isempty (model. constraint_map)
14921501 return
14931502end
14941503
@@ -1513,11 +1522,51 @@ function MOI.supports_constraint(
15131522end
15141523
15151524function test_issue_2817b ()
1516- model = MOI. instantiate (Model2817b{Float64}; with_bridge_type = Float64)
1517- y, _ = MOI. add_constrained_variables (model, MOI. Nonpositives (1 ))
1518- MOI. delete (model, y)
1519- @test ! MOI. is_valid (model, y[1 ])
1525+ inner = Model2817b {Float64} ()
1526+ model = MOI. Bridges. full_bridge_optimizer (inner, Float64);
1527+ x, c = MOI. add_constrained_variables (model, MOI. Nonpositives (1 ))
1528+ @test isa (model. constraint_map[c], MOI. Bridges. Constraint. ScalarizeBridge)
1529+ MOI. delete (model, x)
1530+ @test ! MOI. is_valid (model, x[1 ])
1531+ @test MOI. is_empty (model)
1532+ @test MOI. is_empty (inner)
1533+ @test isempty (model. constraint_map)
1534+ return
1535+ end
1536+
1537+ MOI. Utilities. @model (
1538+ Model2817c,
1539+ (),
1540+ (MOI. GreaterThan, MOI. LessThan,),
1541+ (),
1542+ (),
1543+ (),
1544+ (MOI. ScalarAffineFunction,),
1545+ (),
1546+ ()
1547+ );
1548+
1549+ function MOI. supports_constraint (
1550+ :: Model2817c ,
1551+ :: Type{MOI.VariableIndex} ,
1552+ :: Type{S} ,
1553+ ) where {S<: Union{MOI.ZeroOne,MOI.Semiinteger,MOI.Semicontinuous} }
1554+ return false
1555+ end
1556+
1557+ function test_issue_2817c ()
1558+ inner = Model2817c {Float64} ()
1559+ model = MOI. Bridges. full_bridge_optimizer (inner, Float64);
1560+ x, c = MOI. add_constrained_variable (model, MOI. Semiinteger (2.0 , 3.0 ))
1561+ @test isa (
1562+ model. constraint_map[c],
1563+ MOI. Bridges. Constraint. SemiToBinaryBridge,
1564+ )
1565+ MOI. delete (model, x)
1566+ @test ! MOI. is_valid (model, x)
15201567 @test MOI. is_empty (model)
1568+ @test MOI. is_empty (inner)
1569+ @test isempty (model. constraint_map)
15211570 return
15221571end
15231572
0 commit comments