@@ -25,6 +25,14 @@ for file in readdir("examples")
2525 include (joinpath (@__DIR__ , " examples" , file))
2626end
2727
28+ function _test_file_contents (filename, args... )
29+ contents = read (filename, String)
30+ for arg in args
31+ @test occursin (arg, contents)
32+ end
33+ return
34+ end
35+
2836function test_write_bool_model ()
2937 model = MiniZinc. Model {Bool} ()
3038 x = MOI. add_variable (model)
@@ -1172,6 +1180,7 @@ end
11721180function test_model_filename ()
11731181 model = MOI. Utilities. Model {Int} ()
11741182 x, x_int = MOI. add_constrained_variable (model, MOI. Integer ())
1183+ MOI. set (model, MOI. VariableName (), x, " x1" )
11751184 c1 = MOI. add_constraint (model, x, MOI. GreaterThan (1 ))
11761185 c2 = MOI. add_constraint (model, x, MOI. LessThan (3 ))
11771186 @test MOI. is_valid (model, x)
@@ -1188,14 +1197,15 @@ function test_model_filename()
11881197 @test MOI. get (solver, MOI. TerminationStatus ()) === MOI. OPTIMAL
11891198 @test MOI. get (solver, MOI. ResultCount ()) >= 1
11901199 @test MOI. get (solver, MOI. VariablePrimal (), index_map[x]) in [1 , 2 , 3 ]
1191- @test read (" test.mzn" , String) == " var 1 .. 3: x1;\n solve satisfy;\n "
1200+ _test_file_contents (" test.mzn" , " var 1 .. 3: x1;\n " , " solve satisfy;\n " )
11921201 rm (" test.mzn" )
11931202 return
11941203end
11951204
11961205function test_model_nonlinear_boolean ()
11971206 model = MOI. Utilities. Model {Int} ()
11981207 x = MOI. add_variables (model, 2 )
1208+ MOI. set .(model, MOI. VariableName (), x, [" x1" , " x2" ])
11991209 MOI. add_constraint .(model, x, MOI. ZeroOne ())
12001210 for (f, c) in [(:|| , 1 ), (:&& , 0 )]
12011211 snf = MOI. ScalarNonlinearFunction (f, Any[x... ])
@@ -1210,17 +1220,25 @@ function test_model_nonlinear_boolean()
12101220 sol = round .(Bool, MOI. get (solver, MOI. VariablePrimal (), y))
12111221 @test (sol[1 ] || sol[2 ])
12121222 @test ! (sol[1 ] && sol[2 ])
1213- @test read (" test.mzn" , String) ==
1214- " var bool: x1;\n var bool: x2;\n constraint (x1 \\ / x2) = 1;\n constraint (x1 /\\ x2) = 0;\n solve satisfy;\n "
1223+ _test_file_contents (
1224+ " test.mzn" ,
1225+ " var bool: x1;\n " ,
1226+ " var bool: x2;\n " ,
1227+ " constraint (x1 \\ / x2) = 1;\n " ,
1228+ " constraint (x1 /\\ x2) = 0;\n " ,
1229+ " solve satisfy;\n " ,
1230+ )
12151231 rm (" test.mzn" )
12161232 return
12171233end
12181234
12191235function test_model_nonlinear_boolean_nested ()
12201236 model = MOI. Utilities. Model {Int} ()
12211237 x = MOI. add_variables (model, 2 )
1238+ MOI. set .(model, MOI. VariableName (), x, [" x2" , " x3" ])
12221239 MOI. add_constraint .(model, x, MOI. ZeroOne ())
12231240 y = MOI. add_variable (model)
1241+ MOI. set (model, MOI. VariableName (), y, " x1" )
12241242 MOI. add_constraint (model, y, MOI. Integer ())
12251243 MOI. add_constraint (model, y, MOI. Interval (0 , 10 ))
12261244 SNF (f:: Symbol , args... ) = MOI. ScalarNonlinearFunction (f, Any[args... ])
@@ -1238,15 +1256,23 @@ function test_model_nonlinear_boolean_nested()
12381256 @test sol[1 ] == 0
12391257 @test sol[2 ] == 1
12401258 @test sol[3 ] < 5
1241- @test read (" test.mzn" , String) ==
1242- " var 0 .. 10: x1;\n var bool: x2;\n var bool: x3;\n constraint (x2 < 1) = 1;\n constraint (x2 \\ / (x3 /\\ (x1 < 5))) >= 1;\n solve satisfy;\n "
1259+ _test_file_contents (
1260+ " test.mzn" ,
1261+ " var 0 .. 10: x1;\n " ,
1262+ " var bool: x2;\n " ,
1263+ " var bool: x3;\n " ,
1264+ " constraint (x2 < 1) = 1;\n " ,
1265+ " constraint (x2 \\ / (x3 /\\ (x1 < 5))) >= 1;\n " ,
1266+ " solve satisfy;\n " ,
1267+ )
12431268 rm (" test.mzn" )
12441269 return
12451270end
12461271
12471272function test_model_nonlinear_boolean_jump ()
12481273 model = MOI. Utilities. Model {Int} ()
12491274 x = MOI. add_variables (model, 2 )
1275+ MOI. set .(model, MOI. VariableName (), x, [" x1" , " x2" ])
12501276 MOI. add_constraint .(model, x, MOI. ZeroOne ())
12511277 for (f, c) in [(:|| , 1 ), (:&& , 0 )]
12521278 snf1 = MOI. ScalarNonlinearFunction (f, Any[x... ])
@@ -1262,15 +1288,22 @@ function test_model_nonlinear_boolean_jump()
12621288 sol = round .(Bool, MOI. get (solver, MOI. VariablePrimal (), y))
12631289 @test (sol[1 ] || sol[2 ])
12641290 @test ! (sol[1 ] && sol[2 ])
1265- @test read (" test.mzn" , String) ==
1266- " var bool: x1;\n var bool: x2;\n constraint ((x1 \\ / x2) - 1) = 0;\n constraint ((x1 /\\ x2) - 0) = 0;\n solve satisfy;\n "
1291+ _test_file_contents (
1292+ " test.mzn" ,
1293+ " var bool: x1;\n " ,
1294+ " var bool: x2;\n " ,
1295+ " constraint ((x1 \\ / x2) - 1) = 0;\n " ,
1296+ " constraint ((x1 /\\ x2) - 0) = 0;\n " ,
1297+ " solve satisfy;\n " ,
1298+ )
12671299 rm (" test.mzn" )
12681300 return
12691301end
12701302
12711303function test_model_nonlinear_boolean_nested_not ()
12721304 model = MOI. Utilities. Model {Int} ()
12731305 x = MOI. add_variables (model, 3 )
1306+ MOI. set .(model, MOI. VariableName (), x, [" x1" , " x2" , " x3" ])
12741307 MOI. add_constraint .(model, x, MOI. ZeroOne ())
12751308 # x1 => !(x2 ⊻ x3)
12761309 snf1 = MOI. ScalarNonlinearFunction (:⊻ , Any[x[2 ], x[3 ]])
@@ -1285,15 +1318,22 @@ function test_model_nonlinear_boolean_nested_not()
12851318 y = [index_map[v] for v in x]
12861319 sol = round .(Bool, MOI. get (solver, MOI. VariablePrimal (), y))
12871320 @test ifelse (sol[1 ], ! (sol[2 ] || sol[3 ]), true )
1288- @test read (" test.mzn" , String) ==
1289- " var bool: x1;\n var bool: x2;\n var bool: x3;\n constraint (x1 -> not((x2 xor x3))) = 1;\n solve satisfy;\n "
1321+ _test_file_contents (
1322+ " test.mzn" ,
1323+ " var bool: x1;\n " ,
1324+ " var bool: x2;\n " ,
1325+ " var bool: x3;\n " ,
1326+ " constraint (x1 -> not((x2 xor x3))) = 1;\n " ,
1327+ " solve satisfy;\n " ,
1328+ )
12901329 rm (" test.mzn" )
12911330 return
12921331end
12931332
12941333function test_model_nonlinear_bool_model ()
12951334 model = MOI. Utilities. Model {Bool} ()
12961335 x = MOI. add_variables (model, 3 )
1336+ MOI. set .(model, MOI. VariableName (), x, [" x1" , " x2" , " x3" ])
12971337 # x1 <--> !(x2 <-- x3)
12981338 snf1 = MOI. ScalarNonlinearFunction (:(<-- ), Any[x[2 ], x[3 ]])
12991339 snf2 = MOI. ScalarNonlinearFunction (:! , Any[snf1])
@@ -1307,8 +1347,14 @@ function test_model_nonlinear_bool_model()
13071347 y = [index_map[v] for v in x]
13081348 sol = MOI. get (solver, MOI. VariablePrimal (), y)
13091349 @test sol[1 ] == ! ifelse (sol[3 ], sol[2 ], true )
1310- @test read (" test.mzn" , String) ==
1311- " var bool: x1;\n var bool: x2;\n var bool: x3;\n constraint (x1 <-> not((x2 <- x3))) = true;\n solve satisfy;\n "
1350+ _test_file_contents (
1351+ " test.mzn" ,
1352+ " var bool: x1;\n " ,
1353+ " var bool: x2;\n " ,
1354+ " var bool: x3;\n " ,
1355+ " constraint (x1 <-> not((x2 <- x3))) = true;\n " ,
1356+ " solve satisfy;\n " ,
1357+ )
13121358 rm (" test.mzn" )
13131359 return
13141360end
@@ -1317,8 +1363,10 @@ function test_model_nonlinear_bool_vector_arg()
13171363 model = MOI. Utilities. Model {Int} ()
13181364 x1 = MOI. add_variables (model, 3 )
13191365 MOI. add_constraint .(model, x1, MOI. ZeroOne ())
1366+ MOI. set .(model, MOI. VariableName (), x1, [" x1" , " x2" , " x3" ])
13201367 x2 = MOI. add_variables (model, 3 )
13211368 MOI. add_constraint .(model, x2, MOI. ZeroOne ())
1369+ MOI. set .(model, MOI. VariableName (), x2, [" x4" , " x5" , " x6" ])
13221370 # forall([exists(x1), exists(x2)])
13231371 snf1 = MOI. ScalarNonlinearFunction (:exists , Any[x1])
13241372 snf2 = MOI. ScalarNonlinearFunction (:exists , Any[x2])
@@ -1336,8 +1384,18 @@ function test_model_nonlinear_bool_vector_arg()
13361384 y2 = MOI. get (solver, MOI. VariablePrimal (), [index_map[v] for v in x2])
13371385 @test sum (y1) == 1
13381386 @test sum (y2) == 1
1339- @test read (" test.mzn" , String) ==
1340- " var bool: x1;\n var bool: x2;\n var bool: x3;\n var bool: x4;\n var bool: x5;\n var bool: x6;\n constraint forall([exists([x1, x2, x3]), exists([x4, x5, x6])]) = 1;\n constraint count([x1, x2, x3, x4, x5, x6]) = 2;\n solve satisfy;\n "
1387+ _test_file_contents (
1388+ " test.mzn" ,
1389+ " var bool: x1;\n " ,
1390+ " var bool: x2;\n " ,
1391+ " var bool: x3;\n " ,
1392+ " var bool: x4;\n " ,
1393+ " var bool: x5;\n " ,
1394+ " var bool: x6;\n " ,
1395+ " constraint forall([exists([x1, x2, x3]), exists([x4, x5, x6])]) = 1;\n " ,
1396+ " constraint count([x1, x2, x3, x4, x5, x6]) = 2;\n " ,
1397+ " solve satisfy;\n " ,
1398+ )
13411399 rm (" test.mzn" )
13421400 return
13431401end
@@ -1366,8 +1424,16 @@ function test_model_nonlinear_alldifferent_reified()
13661424 z_sol = MOI. get (solver, MOI. VariablePrimal (), index_map[z])
13671425 @test ! allunique (xy_sol)
13681426 @test iszero (z_sol)
1369- @test read (" test.mzn" , String) ==
1370- " var bool: z;\n constraint bool_eq(z, false);\n var 1 .. 3: x;\n var 1 .. 3: y;\n constraint (z <-> alldifferent([x, y])) = 1;\n solve satisfy;\n include \" alldifferent.mzn\" ;\n "
1427+ _test_file_contents (
1428+ " test.mzn" ,
1429+ " var 1 .. 3: x;\n " ,
1430+ " var 1 .. 3: y;\n " ,
1431+ " var bool: z;\n " ,
1432+ " constraint bool_eq(z, false);\n " ,
1433+ " constraint (z <-> alldifferent([x, y])) = 1;\n " ,
1434+ " solve satisfy;\n " ,
1435+ " include \" alldifferent.mzn\" ;\n " ,
1436+ )
13711437 rm (" test.mzn" )
13721438 return
13731439end
0 commit comments