@@ -397,6 +397,49 @@ function test_RelativeEntropyEpiConeSquare()
397397 return
398398end
399399
400+ function test_is_feasible ()
401+ @test Convex. is_feasible ([1.0 , 0.0 ], MOI. Nonnegatives (2 ), 0.0 )
402+ @test ! Convex. is_feasible ([- 1.0 , 0.0 ], MOI. Nonnegatives (2 ), 0.0 )
403+ @test Convex. is_feasible ([- 1.0 , 0.0 ], MOI. Nonpositives (2 ), 0.0 )
404+ @test ! Convex. is_feasible ([1.0 , 0.0 ], MOI. Nonpositives (2 ), 0.0 )
405+ @test Convex. is_feasible ([1e-5 , 0.0 ], MOI. Zeros (2 ), 1e-5 )
406+ @test ! Convex. is_feasible ([1e-5 , 0.0 ], MOI. Zeros (2 ), 0.0 )
407+ @test Convex. is_feasible ([5.0 , 3.0 , 4.0 ], MOI. SecondOrderCone (3 ), 0.0 )
408+ set = MOI. PositiveSemidefiniteConeSquare (2 )
409+ @test Convex. is_feasible ([1.0 0.0 ; 0.0 1.0 ], set, 0.0 )
410+ @test ! Convex. is_feasible ([- 1.0 0.0 ; 0.0 1.0 ], set, 0.0 )
411+ @test ! Convex. is_feasible ([1.0 1e-6 ; 0.0 1.0 ], set, 0.0 )
412+ set = MOI. NormSpectralCone (2 , 2 )
413+ @test Convex. is_feasible ([1.0 , 1.0 , 0.0 , 0.0 , 1.0 ], set, 0.0 ) === missing
414+ return
415+ end
416+
417+ function test_distance_to_set_matrix ()
418+ x = Variable (2 , 2 )
419+ y = Variable ()
420+ fix! (x, [1 0 ; 0 1 ])
421+ # Constraint has a fixed `Matrix` value.
422+ model = minimize (y, [sum (x; dims = 1 ) <= 1 , y >= 1 ])
423+ solve! (model, SCS. Optimizer; silent = true )
424+ @test ≈ (model. optval, 1.0 ; atol = 1e-3 )
425+ return
426+ end
427+
428+ function test_distance_to_set_undefined ()
429+ t = Variable ()
430+ fix! (t, 2 )
431+ x = Variable (2 , 2 )
432+ fix! (x, [1 0 ; 0 1 ])
433+ y = Variable ()
434+ # This constraint is fixed, and `MOI.distance_to_set` is not defined for it,
435+ # but it should still work without erroring.
436+ c = Convex. Constraint (vcat (t, vec (x)), MOI. NormSpectralCone (2 , 2 ))
437+ model = minimize (y, [c, y >= 1 ])
438+ solve! (model, SCS. Optimizer; silent = true )
439+ @test ≈ (model. optval, 1.0 ; atol = 1e-4 )
440+ return
441+ end
442+
400443end # TestConstraints
401444
402445TestConstraints. runtests ()
0 commit comments