@@ -172,3 +172,51 @@ function setup_test(
172172 )
173173 return
174174end
175+
176+ """
177+ test_cpsat_CountGreaterThan(model::MOI.ModelLike, config::Config)
178+
179+ Add a VectorOfVariables-in-CountGreaterThan constraint.
180+ """
181+ function test_cpsat_CountGreaterThan (
182+ model:: MOI.ModelLike ,
183+ config:: Config{T} ,
184+ ) where {T}
185+ @requires MOI. supports_constraint (
186+ model,
187+ MOI. VectorOfVariables,
188+ MOI. CountGreaterThan,
189+ )
190+ @requires MOI. supports_add_constrained_variable (model, MOI. Integer)
191+ @requires _supports (config, MOI. optimize!)
192+ c, _ = MOI. add_constrained_variable (model, MOI. Integer ())
193+ y, _ = MOI. add_constrained_variable (model, MOI. Integer ())
194+ x = [MOI. add_constrained_variable (model, MOI. Integer ())[1 ] for _ in 1 : 3 ]
195+ MOI. add_constraint (
196+ model,
197+ MOI. VectorOfVariables ([c; y; x]),
198+ MOI. CountGreaterThan (5 ),
199+ )
200+ MOI. optimize! (model)
201+ c_val = round (Int, MOI. get (model, MOI. VariablePrimal (), c))
202+ y_val = round (Int, MOI. get (model, MOI. VariablePrimal (), y))
203+ x_val = round .(Int, MOI. get .(model, MOI. VariablePrimal (), x))
204+ @test c_val > sum (x_val[i] == y_val for i in 1 : length (x))
205+ return
206+ end
207+
208+ function setup_test (
209+ :: typeof (test_cpsat_CountGreaterThan),
210+ model:: MOIU.MockOptimizer ,
211+ :: Config{T} ,
212+ ) where {T}
213+ MOIU. set_mock_optimize! (
214+ model,
215+ (mock:: MOIU.MockOptimizer ) -> MOIU. mock_optimize! (
216+ mock,
217+ MOI. OPTIMAL,
218+ (MOI. FEASIBLE_POINT, T[2 , 4 , 0 , 4 , 0 ]),
219+ ),
220+ )
221+ return
222+ end
0 commit comments