@@ -206,15 +206,37 @@ def test_set_params_is_transactional(base_lp_data):
206206
207207def test_param_value_validation (base_lp_data ):
208208 model = _model (base_lp_data )
209+ # float params accept ints and numpy numbers
209210 model .setParam ("TimeLimit" , 12 )
210211 assert model .getParam ("TimeLimit" ) == 12.0
212+ model .setParam ("TimeLimit" , np .float64 (30.0 ))
213+ assert model .getParam ("TimeLimit" ) == 30.0
211214 model .setParam ("OptimalityNorm" , "LINF" )
212215 assert model .getParam ("OptimalityNorm" ) == "linf"
213216
217+ # bool params accept real/numpy bools and 0/1 (coerced to a Python bool)
218+ model .setParam ("OutputFlag" , 1 )
219+ assert model .getParam ("OutputFlag" ) is True
220+ model .setParam ("OutputFlag" , 0 )
221+ assert model .getParam ("OutputFlag" ) is False
222+ model .setParam ("OutputFlag" , np .bool_ (True ))
223+ assert model .getParam ("OutputFlag" ) is True
224+
225+ # int params accept numpy ints and integer-valued floats (coerced to a Python int)
226+ model .setParam ("IterationLimit" , np .int64 (1000 ))
227+ assert model .getParam ("IterationLimit" ) == 1000 and isinstance (model .getParam ("IterationLimit" ), int )
228+ model .setParam ("IterationLimit" , 2000.0 )
229+ assert model .getParam ("IterationLimit" ) == 2000
230+
231+ # still-invalid inputs
214232 with pytest .raises (TypeError ):
215- model .setParam ("OutputFlag " , 1 )
233+ model .setParam ("IterationLimit " , False ) # bool is not an int here
216234 with pytest .raises (TypeError ):
217- model .setParam ("IterationLimit" , False )
235+ model .setParam ("IterationLimit" , 1.5 ) # non-integer float
236+ with pytest .raises (TypeError ):
237+ model .setParam ("OutputFlag" , "yes" ) # string is not a bool
238+ with pytest .raises (ValueError ):
239+ model .setParam ("OutputFlag" , 2 ) # only 0/1 allowed as int
218240 with pytest .raises (ValueError ):
219241 model .setParam ("IterationLimit" , - 1 )
220242 with pytest .raises (ValueError ):
@@ -261,7 +283,7 @@ def test_set_params_value_validation_is_transactional(base_lp_data):
261283 model = _model (base_lp_data )
262284 old_time_limit = model .getParam ("TimeLimit" )
263285 with pytest .raises (TypeError ):
264- model .setParams (TimeLimit = 123.0 , OutputFlag = 1 )
286+ model .setParams (TimeLimit = 123.0 , OutputFlag = "yes" ) # OutputFlag invalid
265287 assert model .getParam ("TimeLimit" ) == old_time_limit
266288
267289
0 commit comments