@@ -647,4 +647,43 @@ function test__optimizer_for_precompile_tools()
647647 return
648648end
649649
650+ function test_value_symmetric ()
651+ inner = MOI. Utilities. MockOptimizer (
652+ MOI. Utilities. UniversalFallback (MOI. Utilities. Model {Float64} ()),
653+ )
654+ model = direct_model (inner)
655+ @variable (model, x[i in 1 : 2 , j in 1 : 2 ], Symmetric, start = i + j)
656+ Y = LinearAlgebra. Symmetric (1.0 .* x)
657+ @test_throws OptimizeNotCalled value (x)
658+ @test_throws OptimizeNotCalled value (Y)
659+ @test value (start_value, x) == LinearAlgebra. Symmetric ([2 3 ; 3 4 ])
660+ @test value (start_value, Y) == LinearAlgebra. Symmetric ([2 3 ; 3 4 ])
661+ optimize! (model)
662+ MOI. set (inner, MOI. TerminationStatus (), MOI. OPTIMAL)
663+ MOI. set .(inner, MOI. VariablePrimal (), index .(x), [3 4 ; 4 5 ])
664+ @test value (x) == LinearAlgebra. Symmetric ([3 4 ; 4 5 ])
665+ @test value (Y) == LinearAlgebra. Symmetric ([3 4 ; 4 5 ])
666+ @test_throws MOI. ResultIndexBoundsError value (x; result = 2 )
667+ @test_throws MOI. ResultIndexBoundsError value (Y; result = 2 )
668+ return
669+ end
670+
671+ function test_value_hermitian ()
672+ inner = MOI. Utilities. MockOptimizer (
673+ MOI. Utilities. UniversalFallback (MOI. Utilities. Model {Float64} ()),
674+ )
675+ model = direct_model (inner)
676+ H = [1 2 + 3im ; 2 - 3im 4 ]
677+ @variable (model, x[i in 1 : 2 , j in 1 : 2 ], Hermitian, start = H[i, j])
678+ @test_throws OptimizeNotCalled value (x)
679+ @test value (start_value, x) == LinearAlgebra. Hermitian (H)
680+ optimize! (model)
681+ MOI. set (inner, MOI. TerminationStatus (), MOI. OPTIMAL)
682+ y = index .(all_variables (model))
683+ MOI. set .(inner, MOI. VariablePrimal (), y, [3 , 4 , 5 , 6 ])
684+ @test value (x) == LinearAlgebra. Hermitian ([3 4 + 6im ; 4 - 6im 5 ])
685+ @test_throws MOI. ResultIndexBoundsError value (x; result = 2 )
686+ return
687+ end
688+
650689end # module
0 commit comments