Skip to content

Commit d8ef5d2

Browse files
authored
Fix assumption about variable ordering in tests (#69)
1 parent 94ccee7 commit d8ef5d2

File tree

1 file changed

+81
-15
lines changed

1 file changed

+81
-15
lines changed

test/runtests.jl

Lines changed: 81 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,14 @@ for file in readdir("examples")
2525
include(joinpath(@__DIR__, "examples", file))
2626
end
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+
2836
function test_write_bool_model()
2937
model = MiniZinc.Model{Bool}()
3038
x = MOI.add_variable(model)
@@ -1172,6 +1180,7 @@ end
11721180
function 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;\nsolve satisfy;\n"
1200+
_test_file_contents("test.mzn", "var 1 .. 3: x1;\n", "solve satisfy;\n")
11921201
rm("test.mzn")
11931202
return
11941203
end
11951204

11961205
function 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;\nvar bool: x2;\nconstraint (x1 \\/ x2) = 1;\nconstraint (x1 /\\ x2) = 0;\nsolve 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
12171233
end
12181234

12191235
function 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;\nvar bool: x2;\nvar bool: x3;\nconstraint (x2 < 1) = 1;\nconstraint (x2 \\/ (x3 /\\ (x1 < 5))) >= 1;\nsolve 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
12451270
end
12461271

12471272
function 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;\nvar bool: x2;\nconstraint ((x1 \\/ x2) - 1) = 0;\nconstraint ((x1 /\\ x2) - 0) = 0;\nsolve 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
12691301
end
12701302

12711303
function 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;\nvar bool: x2;\nvar bool: x3;\nconstraint (x1 -> not((x2 xor x3))) = 1;\nsolve 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
12921331
end
12931332

12941333
function 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;\nvar bool: x2;\nvar bool: x3;\nconstraint (x1 <-> not((x2 <- x3))) = true;\nsolve 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
13141360
end
@@ -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;\nvar bool: x2;\nvar bool: x3;\nvar bool: x4;\nvar bool: x5;\nvar bool: x6;\nconstraint forall([exists([x1, x2, x3]), exists([x4, x5, x6])]) = 1;\nconstraint count([x1, x2, x3, x4, x5, x6]) = 2;\nsolve 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
13431401
end
@@ -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;\nconstraint bool_eq(z, false);\nvar 1 .. 3: x;\nvar 1 .. 3: y;\nconstraint (z <-> alldifferent([x, y])) = 1;\nsolve satisfy;\ninclude \"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
13731439
end

0 commit comments

Comments
 (0)