@@ -25,6 +25,14 @@ for file in readdir("examples")
25
25
include (joinpath (@__DIR__ , " examples" , file))
26
26
end
27
27
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
+
28
36
function test_write_bool_model ()
29
37
model = MiniZinc. Model {Bool} ()
30
38
x = MOI. add_variable (model)
@@ -1172,6 +1180,7 @@ end
1172
1180
function test_model_filename ()
1173
1181
model = MOI. Utilities. Model {Int} ()
1174
1182
x, x_int = MOI. add_constrained_variable (model, MOI. Integer ())
1183
+ MOI. set (model, MOI. VariableName (), x, " x1" )
1175
1184
c1 = MOI. add_constraint (model, x, MOI. GreaterThan (1 ))
1176
1185
c2 = MOI. add_constraint (model, x, MOI. LessThan (3 ))
1177
1186
@test MOI. is_valid (model, x)
@@ -1188,14 +1197,15 @@ function test_model_filename()
1188
1197
@test MOI. get (solver, MOI. TerminationStatus ()) === MOI. OPTIMAL
1189
1198
@test MOI. get (solver, MOI. ResultCount ()) >= 1
1190
1199
@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 " )
1192
1201
rm (" test.mzn" )
1193
1202
return
1194
1203
end
1195
1204
1196
1205
function test_model_nonlinear_boolean ()
1197
1206
model = MOI. Utilities. Model {Int} ()
1198
1207
x = MOI. add_variables (model, 2 )
1208
+ MOI. set .(model, MOI. VariableName (), x, [" x1" , " x2" ])
1199
1209
MOI. add_constraint .(model, x, MOI. ZeroOne ())
1200
1210
for (f, c) in [(:|| , 1 ), (:&& , 0 )]
1201
1211
snf = MOI. ScalarNonlinearFunction (f, Any[x... ])
@@ -1210,17 +1220,25 @@ function test_model_nonlinear_boolean()
1210
1220
sol = round .(Bool, MOI. get (solver, MOI. VariablePrimal (), y))
1211
1221
@test (sol[1 ] || sol[2 ])
1212
1222
@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
+ )
1215
1231
rm (" test.mzn" )
1216
1232
return
1217
1233
end
1218
1234
1219
1235
function test_model_nonlinear_boolean_nested ()
1220
1236
model = MOI. Utilities. Model {Int} ()
1221
1237
x = MOI. add_variables (model, 2 )
1238
+ MOI. set .(model, MOI. VariableName (), x, [" x2" , " x3" ])
1222
1239
MOI. add_constraint .(model, x, MOI. ZeroOne ())
1223
1240
y = MOI. add_variable (model)
1241
+ MOI. set (model, MOI. VariableName (), y, " x1" )
1224
1242
MOI. add_constraint (model, y, MOI. Integer ())
1225
1243
MOI. add_constraint (model, y, MOI. Interval (0 , 10 ))
1226
1244
SNF (f:: Symbol , args... ) = MOI. ScalarNonlinearFunction (f, Any[args... ])
@@ -1238,15 +1256,23 @@ function test_model_nonlinear_boolean_nested()
1238
1256
@test sol[1 ] == 0
1239
1257
@test sol[2 ] == 1
1240
1258
@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
+ )
1243
1268
rm (" test.mzn" )
1244
1269
return
1245
1270
end
1246
1271
1247
1272
function test_model_nonlinear_boolean_jump ()
1248
1273
model = MOI. Utilities. Model {Int} ()
1249
1274
x = MOI. add_variables (model, 2 )
1275
+ MOI. set .(model, MOI. VariableName (), x, [" x1" , " x2" ])
1250
1276
MOI. add_constraint .(model, x, MOI. ZeroOne ())
1251
1277
for (f, c) in [(:|| , 1 ), (:&& , 0 )]
1252
1278
snf1 = MOI. ScalarNonlinearFunction (f, Any[x... ])
@@ -1262,15 +1288,22 @@ function test_model_nonlinear_boolean_jump()
1262
1288
sol = round .(Bool, MOI. get (solver, MOI. VariablePrimal (), y))
1263
1289
@test (sol[1 ] || sol[2 ])
1264
1290
@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
+ )
1267
1299
rm (" test.mzn" )
1268
1300
return
1269
1301
end
1270
1302
1271
1303
function test_model_nonlinear_boolean_nested_not ()
1272
1304
model = MOI. Utilities. Model {Int} ()
1273
1305
x = MOI. add_variables (model, 3 )
1306
+ MOI. set .(model, MOI. VariableName (), x, [" x1" , " x2" , " x3" ])
1274
1307
MOI. add_constraint .(model, x, MOI. ZeroOne ())
1275
1308
# x1 => !(x2 ⊻ x3)
1276
1309
snf1 = MOI. ScalarNonlinearFunction (:⊻ , Any[x[2 ], x[3 ]])
@@ -1285,15 +1318,22 @@ function test_model_nonlinear_boolean_nested_not()
1285
1318
y = [index_map[v] for v in x]
1286
1319
sol = round .(Bool, MOI. get (solver, MOI. VariablePrimal (), y))
1287
1320
@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
+ )
1290
1329
rm (" test.mzn" )
1291
1330
return
1292
1331
end
1293
1332
1294
1333
function test_model_nonlinear_bool_model ()
1295
1334
model = MOI. Utilities. Model {Bool} ()
1296
1335
x = MOI. add_variables (model, 3 )
1336
+ MOI. set .(model, MOI. VariableName (), x, [" x1" , " x2" , " x3" ])
1297
1337
# x1 <--> !(x2 <-- x3)
1298
1338
snf1 = MOI. ScalarNonlinearFunction (:(<-- ), Any[x[2 ], x[3 ]])
1299
1339
snf2 = MOI. ScalarNonlinearFunction (:! , Any[snf1])
@@ -1307,8 +1347,14 @@ function test_model_nonlinear_bool_model()
1307
1347
y = [index_map[v] for v in x]
1308
1348
sol = MOI. get (solver, MOI. VariablePrimal (), y)
1309
1349
@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
+ )
1312
1358
rm (" test.mzn" )
1313
1359
return
1314
1360
end
@@ -1317,8 +1363,10 @@ function test_model_nonlinear_bool_vector_arg()
1317
1363
model = MOI. Utilities. Model {Int} ()
1318
1364
x1 = MOI. add_variables (model, 3 )
1319
1365
MOI. add_constraint .(model, x1, MOI. ZeroOne ())
1366
+ MOI. set .(model, MOI. VariableName (), x1, [" x1" , " x2" , " x3" ])
1320
1367
x2 = MOI. add_variables (model, 3 )
1321
1368
MOI. add_constraint .(model, x2, MOI. ZeroOne ())
1369
+ MOI. set .(model, MOI. VariableName (), x2, [" x4" , " x5" , " x6" ])
1322
1370
# forall([exists(x1), exists(x2)])
1323
1371
snf1 = MOI. ScalarNonlinearFunction (:exists , Any[x1])
1324
1372
snf2 = MOI. ScalarNonlinearFunction (:exists , Any[x2])
@@ -1336,8 +1384,18 @@ function test_model_nonlinear_bool_vector_arg()
1336
1384
y2 = MOI. get (solver, MOI. VariablePrimal (), [index_map[v] for v in x2])
1337
1385
@test sum (y1) == 1
1338
1386
@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
+ )
1341
1399
rm (" test.mzn" )
1342
1400
return
1343
1401
end
@@ -1366,8 +1424,16 @@ function test_model_nonlinear_alldifferent_reified()
1366
1424
z_sol = MOI. get (solver, MOI. VariablePrimal (), index_map[z])
1367
1425
@test ! allunique (xy_sol)
1368
1426
@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
+ )
1371
1437
rm (" test.mzn" )
1372
1438
return
1373
1439
end
0 commit comments