Skip to content

Commit baa1cfe

Browse files
authored
Add test with zero in off-diagonal entry (#1235)
* Add test with zero in off-diagonal entry * Add docstring and test * Add test to Dict
1 parent 961bb55 commit baa1cfe

2 files changed

Lines changed: 56 additions & 1 deletion

File tree

src/Test/UnitTests/objectives.jl

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,51 @@ function solve_qp_edge_cases(model::MOI.ModelLike, config::TestConfig)
314314
end
315315
unittests["solve_qp_edge_cases"] = solve_qp_edge_cases
316316

317+
"""
318+
solve_qp_zero_offdiag(model::MOI.ModelLike, config::TestConfig)
319+
320+
Test quadratic program with a zero off-diagonal term.
321+
322+
If `config.solve=true` confirm that it solves correctly.
323+
"""
324+
function solve_qp_zero_offdiag(model::MOI.ModelLike, config::TestConfig)
325+
MOI.empty!(model)
326+
x = MOI.add_variables(model, 2)
327+
MOI.set(model, MOI.ObjectiveSense(), MOI.MIN_SENSE)
328+
vc1 = MOI.add_constraint(
329+
model,
330+
MOI.SingleVariable(x[1]),
331+
MOI.GreaterThan(1.0),
332+
)
333+
@test vc1.value == x[1].value
334+
vc2 = MOI.add_constraint(
335+
model,
336+
MOI.SingleVariable(x[2]),
337+
MOI.GreaterThan(2.0),
338+
)
339+
@test vc2.value == x[2].value
340+
MOI.set(
341+
model,
342+
MOI.ObjectiveFunction{MOI.ScalarQuadraticFunction{Float64}}(),
343+
MOI.ScalarQuadraticFunction(
344+
MOI.ScalarAffineTerm{Float64}[], # affine terms
345+
MOI.ScalarQuadraticTerm.(
346+
[2.0, 0.0, 2.0],
347+
[x[1], x[1], x[2]],
348+
[x[1], x[2], x[2]],
349+
), # quad
350+
0.0, # constant
351+
),
352+
)
353+
test_model_solution(
354+
model,
355+
config;
356+
objective_value = 5.0,
357+
variable_primal = [(x[1], 1.0), (x[2], 2.0)],
358+
)
359+
end
360+
unittests["solve_qp_zero_offdiag"] = solve_qp_zero_offdiag
361+
317362
"""
318363
solve_duplicate_terms_obj(model::MOI.ModelLike, config::TestConfig)
319364

test/Test/unit.jl

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ end
3535
"solve_duplicate_terms_scalar_affine",
3636
"solve_duplicate_terms_vector_affine",
3737
"solve_qp_edge_cases",
38+
"solve_qp_zero_offdiag",
3839
"solve_qcp_edge_cases",
3940
"solve_affine_deletion_edge_cases",
4041
"solve_duplicate_terms_obj",
@@ -233,6 +234,15 @@ end
233234
)
234235
MOIT.solve_qp_edge_cases(mock, config)
235236
end
237+
@testset "solve_qp_zero_offdiag" begin
238+
MOIU.set_mock_optimize!(mock,
239+
(mock::MOIU.MockOptimizer) -> MOIU.mock_optimize!(mock,
240+
MOI.OPTIMAL,
241+
(MOI.FEASIBLE_POINT, [1.0, 2.0])
242+
)
243+
)
244+
MOIT.solve_qp_zero_offdiag(mock, config)
245+
end
236246
@testset "solve_duplicate_terms_obj" begin
237247
MOIU.set_mock_optimize!(mock,
238248
(mock::MOIU.MockOptimizer) -> MOIU.mock_optimize!(mock,
@@ -513,7 +523,7 @@ end
513523
)
514524
MOIT.solve_farkas_variable_lessthan_max(mock, config)
515525
end
516-
526+
517527
@testset "solve_twice" begin
518528
MOIU.set_mock_optimize!(mock,
519529
(mock::MOIU.MockOptimizer) -> MOIU.mock_optimize!(

0 commit comments

Comments
 (0)