@@ -1170,10 +1170,11 @@ void expectSymbolicIntegerLexMin(
11701170
11711171 PWMAFunction expectedLexmin =
11721172 parsePWMAF (/* numInputs=*/ poly.getNumSymbolVars (),
1173- /* numOutputs=*/ poly.getNumDimVars (), expectedLexminRepr);
1173+ /* numOutputs=*/ poly.getNumDimVars (), expectedLexminRepr,
1174+ /* numSymbols=*/ poly.getNumSymbolVars ());
11741175
11751176 PresburgerSet expectedUnboundedDomain = parsePresburgerSetFromPolyStrings (
1176- poly.getNumSymbolVars (), expectedUnboundedDomainRepr );
1177+ /* numDims= */ 0 , expectedUnboundedDomainRepr, poly.getNumSymbolVars ());
11771178
11781179 SymbolicLexMin result = poly.findSymbolicIntegerLexMin ();
11791180
@@ -1200,114 +1201,116 @@ void expectSymbolicIntegerLexMin(
12001201TEST (IntegerPolyhedronTest, findSymbolicIntegerLexMin) {
12011202 expectSymbolicIntegerLexMin (" (x)[a] : (x - a >= 0)" ,
12021203 {
1203- {" (a) : ()" , {{1 , 0 }}}, // a
1204+ {" ()[a] : ()" , {{1 , 0 }}}, // a
12041205 });
12051206
12061207 expectSymbolicIntegerLexMin (
12071208 " (x)[a, b] : (x - a >= 0, x - b >= 0)" ,
12081209 {
1209- {" (a, b) : (a - b >= 0)" , {{1 , 0 , 0 }}}, // a
1210- {" (a, b) : (b - a - 1 >= 0)" , {{0 , 1 , 0 }}}, // b
1210+ {" ()[ a, b] : (a - b >= 0)" , {{1 , 0 , 0 }}}, // a
1211+ {" ()[ a, b] : (b - a - 1 >= 0)" , {{0 , 1 , 0 }}}, // b
12111212 });
12121213
12131214 expectSymbolicIntegerLexMin (
12141215 " (x)[a, b, c] : (x -a >= 0, x - b >= 0, x - c >= 0)" ,
12151216 {
1216- {" (a, b, c) : (a - b >= 0, a - c >= 0)" , {{1 , 0 , 0 , 0 }}}, // a
1217- {" (a, b, c) : (b - a - 1 >= 0, b - c >= 0)" , {{0 , 1 , 0 , 0 }}}, // b
1218- {" (a, b, c) : (c - a - 1 >= 0, c - b - 1 >= 0)" , {{0 , 0 , 1 , 0 }}}, // c
1217+ {" ()[a, b, c] : (a - b >= 0, a - c >= 0)" , {{1 , 0 , 0 , 0 }}}, // a
1218+ {" ()[a, b, c] : (b - a - 1 >= 0, b - c >= 0)" , {{0 , 1 , 0 , 0 }}}, // b
1219+ {" ()[a, b, c] : (c - a - 1 >= 0, c - b - 1 >= 0)" ,
1220+ {{0 , 0 , 1 , 0 }}}, // c
12191221 });
12201222
12211223 expectSymbolicIntegerLexMin (" (x, y)[a] : (x - a >= 0, x + y >= 0)" ,
12221224 {
1223- {" (a) : ()" , {{1 , 0 }, {-1 , 0 }}}, // (a, -a)
1225+ {" ()[a] : ()" , {{1 , 0 }, {-1 , 0 }}}, // (a, -a)
12241226 });
12251227
12261228 expectSymbolicIntegerLexMin (
12271229 " (x, y)[a] : (x - a >= 0, x + y >= 0, y >= 0)" ,
12281230 {
1229- {" (a) : (a >= 0)" , {{1 , 0 }, {0 , 0 }}}, // (a, 0)
1230- {" (a) : (-a - 1 >= 0)" , {{1 , 0 }, {-1 , 0 }}}, // (a, -a)
1231+ {" ()[a] : (a >= 0)" , {{1 , 0 }, {0 , 0 }}}, // (a, 0)
1232+ {" ()[a] : (-a - 1 >= 0)" , {{1 , 0 }, {-1 , 0 }}}, // (a, -a)
12311233 });
12321234
12331235 expectSymbolicIntegerLexMin (
12341236 " (x, y)[a, b, c] : (x - a >= 0, y - b >= 0, c - x - y >= 0)" ,
12351237 {
1236- {" (a, b, c) : (c - a - b >= 0)" ,
1238+ {" ()[ a, b, c] : (c - a - b >= 0)" ,
12371239 {{1 , 0 , 0 , 0 }, {0 , 1 , 0 , 0 }}}, // (a, b)
12381240 });
12391241
12401242 expectSymbolicIntegerLexMin (
12411243 " (x, y, z)[a, b, c] : (c - z >= 0, b - y >= 0, x + y + z - a == 0)" ,
12421244 {
1243- {" (a, b, c) : ()" ,
1245+ {" ()[ a, b, c] : ()" ,
12441246 {{1 , -1 , -1 , 0 }, {0 , 1 , 0 , 0 }, {0 , 0 , 1 , 0 }}}, // (a - b - c, b, c)
12451247 });
12461248
12471249 expectSymbolicIntegerLexMin (
12481250 " (x)[a, b] : (a >= 0, b >= 0, x >= 0, a + b + x - 1 >= 0)" ,
12491251 {
1250- {" (a, b) : (a >= 0, b >= 0, a + b - 1 >= 0)" , {{0 , 0 , 0 }}}, // 0
1251- {" (a, b) : (a == 0, b == 0)" , {{0 , 0 , 1 }}}, // 1
1252+ {" ()[ a, b] : (a >= 0, b >= 0, a + b - 1 >= 0)" , {{0 , 0 , 0 }}}, // 0
1253+ {" ()[ a, b] : (a == 0, b == 0)" , {{0 , 0 , 1 }}}, // 1
12521254 });
12531255
12541256 expectSymbolicIntegerLexMin (
12551257 " (x)[a, b] : (1 - a >= 0, a >= 0, 1 - b >= 0, b >= 0, 1 - x >= 0, x >= "
12561258 " 0, a + b + x - 1 >= 0)" ,
12571259 {
1258- {" (a, b) : (1 - a >= 0, a >= 0, 1 - b >= 0, b >= 0, a + b - 1 >= 0)" ,
1259- {{0 , 0 , 0 }}}, // 0
1260- {" (a, b) : (a == 0, b == 0)" , {{0 , 0 , 1 }}}, // 1
1260+ {" ()[a, b] : (1 - a >= 0, a >= 0, 1 - b >= 0, b >= 0, a + b - 1 >= "
1261+ " 0)" ,
1262+ {{0 , 0 , 0 }}}, // 0
1263+ {" ()[a, b] : (a == 0, b == 0)" , {{0 , 0 , 1 }}}, // 1
12611264 });
12621265
12631266 expectSymbolicIntegerLexMin (
12641267 " (x, y, z)[a, b] : (x - a == 0, y - b == 0, x >= 0, y >= 0, z >= 0, x + "
12651268 " y + z - 1 >= 0)" ,
12661269 {
1267- {" (a, b) : (a >= 0, b >= 0, 1 - a - b >= 0)" ,
1270+ {" ()[ a, b] : (a >= 0, b >= 0, 1 - a - b >= 0)" ,
12681271 {{1 , 0 , 0 }, {0 , 1 , 0 }, {-1 , -1 , 1 }}}, // (a, b, 1 - a - b)
1269- {" (a, b) : (a >= 0, b >= 0, a + b - 2 >= 0)" ,
1272+ {" ()[ a, b] : (a >= 0, b >= 0, a + b - 2 >= 0)" ,
12701273 {{1 , 0 , 0 }, {0 , 1 , 0 }, {0 , 0 , 0 }}}, // (a, b, 0)
12711274 });
12721275
12731276 expectSymbolicIntegerLexMin (" (x)[a, b] : (x - a == 0, x - b >= 0)" ,
12741277 {
1275- {" (a, b) : (a - b >= 0)" , {{1 , 0 , 0 }}}, // a
1278+ {" ()[ a, b] : (a - b >= 0)" , {{1 , 0 , 0 }}}, // a
12761279 });
12771280
12781281 expectSymbolicIntegerLexMin (
12791282 " (q)[a] : (a - 1 - 3*q == 0, q >= 0)" ,
12801283 {
1281- {" (a) : (a - 1 - 3*(a floordiv 3) == 0, a >= 0)" ,
1284+ {" ()[a] : (a - 1 - 3*(a floordiv 3) == 0, a >= 0)" ,
12821285 {{0 , 1 , 0 }}}, // a floordiv 3
12831286 });
12841287
12851288 expectSymbolicIntegerLexMin (
12861289 " (r, q)[a] : (a - r - 3*q == 0, q >= 0, 1 - r >= 0, r >= 0)" ,
12871290 {
1288- {" (a) : (a - 0 - 3*(a floordiv 3) == 0, a >= 0)" ,
1291+ {" ()[a] : (a - 0 - 3*(a floordiv 3) == 0, a >= 0)" ,
12891292 {{0 , 0 , 0 }, {0 , 1 , 0 }}}, // (0, a floordiv 3)
1290- {" (a) : (a - 1 - 3*(a floordiv 3) == 0, a >= 0)" ,
1293+ {" ()[a] : (a - 1 - 3*(a floordiv 3) == 0, a >= 0)" ,
12911294 {{0 , 0 , 1 }, {0 , 1 , 0 }}}, // (1 a floordiv 3)
12921295 });
12931296
12941297 expectSymbolicIntegerLexMin (
12951298 " (r, q)[a] : (a - r - 3*q == 0, q >= 0, 2 - r >= 0, r - 1 >= 0)" ,
12961299 {
1297- {" (a) : (a - 1 - 3*(a floordiv 3) == 0, a >= 0)" ,
1300+ {" ()[a] : (a - 1 - 3*(a floordiv 3) == 0, a >= 0)" ,
12981301 {{0 , 0 , 1 }, {0 , 1 , 0 }}}, // (1, a floordiv 3)
1299- {" (a) : (a - 2 - 3*(a floordiv 3) == 0, a >= 0)" ,
1302+ {" ()[a] : (a - 2 - 3*(a floordiv 3) == 0, a >= 0)" ,
13001303 {{0 , 0 , 2 }, {0 , 1 , 0 }}}, // (2, a floordiv 3)
13011304 });
13021305
13031306 expectSymbolicIntegerLexMin (
13041307 " (r, q)[a] : (a - r - 3*q == 0, q >= 0, r >= 0)" ,
13051308 {
1306- {" (a) : (a - 3*(a floordiv 3) == 0, a >= 0)" ,
1309+ {" ()[a] : (a - 3*(a floordiv 3) == 0, a >= 0)" ,
13071310 {{0 , 0 , 0 }, {0 , 1 , 0 }}}, // (0, a floordiv 3)
1308- {" (a) : (a - 1 - 3*(a floordiv 3) == 0, a >= 0)" ,
1311+ {" ()[a] : (a - 1 - 3*(a floordiv 3) == 0, a >= 0)" ,
13091312 {{0 , 0 , 1 }, {0 , 1 , 0 }}}, // (1, a floordiv 3)
1310- {" (a) : (a - 2 - 3*(a floordiv 3) == 0, a >= 0)" ,
1313+ {" ()[a] : (a - 2 - 3*(a floordiv 3) == 0, a >= 0)" ,
13111314 {{0 , 0 , 2 }, {0 , 1 , 0 }}}, // (2, a floordiv 3)
13121315 });
13131316
@@ -1323,11 +1326,11 @@ TEST(IntegerPolyhedronTest, findSymbolicIntegerLexMin) {
13231326 // What's the lexmin solution using exactly g true vars?
13241327 " g - x - y - z - w == 0)" ,
13251328 {
1326- {" (g) : (g - 1 == 0)" ,
1329+ {" ()[g] : (g - 1 == 0)" ,
13271330 {{0 , 0 }, {0 , 1 }, {0 , 0 }, {0 , 0 }}}, // (0, 1, 0, 0)
1328- {" (g) : (g - 2 == 0)" ,
1331+ {" ()[g] : (g - 2 == 0)" ,
13291332 {{0 , 0 }, {0 , 0 }, {0 , 1 }, {0 , 1 }}}, // (0, 0, 1, 1)
1330- {" (g) : (g - 3 == 0)" ,
1333+ {" ()[g] : (g - 3 == 0)" ,
13311334 {{0 , 0 }, {0 , 1 }, {0 , 1 }, {0 , 1 }}}, // (0, 1, 1, 1)
13321335 });
13331336
@@ -1340,19 +1343,19 @@ TEST(IntegerPolyhedronTest, findSymbolicIntegerLexMin) {
13401343 // According to Bezout's lemma, 14x + 35y can take on all multiples
13411344 // of 7 and no other values. So the solution exists iff r - a is a
13421345 // multiple of 7.
1343- {" (a, r) : (a >= 0, r - a - 7*((r - a) floordiv 7) == 0)" });
1346+ {" ()[ a, r] : (a >= 0, r - a - 7*((r - a) floordiv 7) == 0)" });
13441347
13451348 // The lexmins are unbounded.
13461349 expectSymbolicIntegerLexMin (" (x, y)[a] : (9*x - 4*y - 2*a >= 0)" , {},
1347- {" (a) : ()" });
1350+ {" ()[a] : ()" });
13481351
13491352 // Test cases adapted from isl.
13501353 expectSymbolicIntegerLexMin (
13511354 // a = 2b - 2(c - b), c - b >= 0.
13521355 // So b is minimized when c = b.
13531356 " (b, c)[a] : (a - 4*b + 2*c == 0, c - b >= 0)" ,
13541357 {
1355- {" (a) : (a - 2*(a floordiv 2) == 0)" ,
1358+ {" ()[a] : (a - 2*(a floordiv 2) == 0)" ,
13561359 {{0 , 1 , 0 }, {0 , 1 , 0 }}}, // (a floordiv 2, a floordiv 2)
13571360 });
13581361
@@ -1362,7 +1365,7 @@ TEST(IntegerPolyhedronTest, findSymbolicIntegerLexMin) {
13621365 " (b)[a] : (255 - b >= 0, b >= 0, a - 512*b - 1 >= 0, 512*b -a + 509 >= "
13631366 " 0, b + 7 - 16*((8 + b) floordiv 16) >= 0)" ,
13641367 {
1365- {" (a) : (255 - (a floordiv 512) >= 0, a >= 0, a - 512*(a floordiv "
1368+ {" ()[a] : (255 - (a floordiv 512) >= 0, a >= 0, a - 512*(a floordiv "
13661369 " 512) - 1 >= 0, 512*(a floordiv 512) - a + 509 >= 0, (a floordiv "
13671370 " 512) + 7 - 16*((8 + (a floordiv 512)) floordiv 16) >= 0)" ,
13681371 {{0 , 1 , 0 , 0 }}}, // (a floordiv 2, a floordiv 2)
@@ -1375,7 +1378,8 @@ TEST(IntegerPolyhedronTest, findSymbolicIntegerLexMin) {
13751378 " 2*N - 3*K + a - b >= 0, 4*N - K + 1 - 3*b >= 0, b - N >= 0, a - x - 1 "
13761379 " >= 0)" ,
13771380 {{
1378- " (K, N, x, y) : (x + 6 - 2*N >= 0, 2*N - 5 - x >= 0, x + 1 -3*K + N "
1381+ " ()[K, N, x, y] : (x + 6 - 2*N >= 0, 2*N - 5 - x >= 0, x + 1 -3*K + "
1382+ " N "
13791383 " >= 0, N + K - 2 - x >= 0, x - 4 >= 0)" ,
13801384 {{0 , 0 , 1 , 0 , 1 }, {0 , 1 , 0 , 0 , 0 }} // (1 + x, N)
13811385 }});
0 commit comments