public void ConstraintConstructor() { Solver solver = new Solver("Solver"); IntVar x = solver.MakeIntVar(3, 7, "x"); Assert.Equal("x(3..7)", x.ToString()); // Unary operator Constraint c0 = (x == 5); Assert.Equal("(x(3..7) == 5)", c0.ToString()); IntExpr e1 = -c0; Assert.Equal("-(Watch<x == 5>(0 .. 1))", e1.ToString()); IntExpr e2 = c0.Abs(); Assert.Equal("Watch<x == 5>(0 .. 1)", e2.ToString()); IntExpr e3 = c0.Square(); Assert.Equal("IntSquare(Watch<x == 5>(0 .. 1))", e3.ToString()); // Relational operator with a scalar Constraint c1 = x == 5; Assert.Equal("(x(3..7) == 5)", c1.ToString()); Constraint c2 = x >= 5; Assert.Equal("(x(3..7) >= 5)", c2.ToString()); Constraint c3 = x > 5; Assert.Equal("(x(3..7) >= 6)", c3.ToString()); Constraint c4 = x <= 5; Assert.Equal("(x(3..7) <= 5)", c4.ToString()); Constraint c5 = x < 5; Assert.Equal("(x(3..7) <= 4)", c5.ToString()); Constraint c6 = x != 5; Assert.Equal("(x(3..7) != 5)", c6.ToString()); Constraint c7 = x == 2; Assert.Equal("FalseConstraint()", c7.ToString()); }
static void ConstraintWithExprTest() { Console.WriteLine("TestConstraintWithExpr"); Solver solver = new Solver("test"); IntVar x = solver.MakeIntVar(0, 10, "x"); IntVar y = solver.MakeIntVar(0, 10, "y"); Constraint c1 = x == 2; Constraint c2 = y == 3; IntExpr e2a = c1 + 1; Console.WriteLine(e2a.ToString()); IntExpr e2b = 1 + c1; Console.WriteLine(e2b.ToString()); IntExpr e2c = c1 - 1; Console.WriteLine(e2c.ToString()); IntExpr e2d = 1 - c1; Console.WriteLine(e2d.ToString()); IntExpr e2e = c1 * 2; Console.WriteLine(e2e.ToString()); IntExpr e2f = 2 * c1; Console.WriteLine(e2f.ToString()); IntExpr e3a = c1 + y; Console.WriteLine(e3a.ToString()); IntExpr e3b = y + c1; Console.WriteLine(e3b.ToString()); IntExpr e3c = c1 - y; Console.WriteLine(e3c.ToString()); IntExpr e3d = y - c1; Console.WriteLine(e3d.ToString()); IntExpr e3e = c1 * y; Console.WriteLine(e3e.ToString()); IntExpr e3f = y * c1; Console.WriteLine(e3f.ToString()); IntExpr e4 = -c1; Console.WriteLine(e4.ToString()); IntExpr e5 = c1 / 4; Console.WriteLine(e5.ToString()); IntExpr e6 = c1.Abs(); Console.WriteLine(e6.ToString()); IntExpr e7 = c1.Square(); Console.WriteLine(e7.ToString()); Constraint c8a = c1 == 1; Console.WriteLine(c8a.ToString()); Constraint c8b = 1 == c1; Console.WriteLine(c8b.ToString()); Constraint c8c = c1 != 1; Console.WriteLine(c8c.ToString()); Constraint c8d = 1 != c1; Console.WriteLine(c8d.ToString()); Constraint c8e = c1 >= 1; Console.WriteLine(c8e.ToString()); Constraint c8f = 1 >= c1; Console.WriteLine(c8f.ToString()); Constraint c8g = c1 > 1; Console.WriteLine(c8g.ToString()); Constraint c8h = 1 > c1; Console.WriteLine(c8h.ToString()); Constraint c8i = c1 <= 1; Console.WriteLine(c8i.ToString()); Constraint c8j = 1 <= c1; Console.WriteLine(c8j.ToString()); Constraint c8k = c1 < 1; Console.WriteLine(c8k.ToString()); Constraint c8l = 1 < c1; Console.WriteLine(c8l.ToString()); Constraint c9a = c1 == y; Console.WriteLine(c9a.ToString()); Constraint c9b = y == c1; Console.WriteLine(c9b.ToString()); Constraint c9c = c1 != y; Console.WriteLine(c9c.ToString()); Constraint c9d = y != c1; Console.WriteLine(c9d.ToString()); Constraint c9e = c1 >= y; Console.WriteLine(c9e.ToString()); Constraint c9f = y >= c1; Console.WriteLine(c9f.ToString()); Constraint c9g = c1 > y; Console.WriteLine(c9g.ToString()); Constraint c9h = y > c1; Console.WriteLine(c9h.ToString()); Constraint c9i = c1 <= y; Console.WriteLine(c9i.ToString()); Constraint c9j = y <= c1; Console.WriteLine(c9j.ToString()); Constraint c9k = c1 < y; Console.WriteLine(c9k.ToString()); Constraint c9l = y < c1; Console.WriteLine(c9l.ToString()); Constraint c10a = c1 == c2; Console.WriteLine(c10a.ToString()); Constraint c10c = c1 != c2; Console.WriteLine(c10c.ToString()); Constraint c10e = c1 >= c2; Console.WriteLine(c10e.ToString()); Constraint c10g = c1 > c2; Console.WriteLine(c10g.ToString()); Constraint c10i = c1 <= c2; Console.WriteLine(c10i.ToString()); Constraint c10k = c1 < c2; Console.WriteLine(c10k.ToString()); IntExpr e11a = c1 + (y == 2); Console.WriteLine(e11a.ToString()); IntExpr e11b = (y == 2) + c1; Console.WriteLine(e11b.ToString()); IntExpr e11c = c1 - (y == 2); Console.WriteLine(e11c.ToString()); IntExpr e11d = (y == 2) - c1; Console.WriteLine(e11d.ToString()); IntExpr e11e = c1 * (y == 2); Console.WriteLine(e11e.ToString()); IntExpr e11f = (y == 2) * c1; Console.WriteLine(e11f.ToString()); Constraint c12a = c1 == (y == 2); Console.WriteLine(c12a.ToString()); Constraint c12b = (y == 2) == c1; Console.WriteLine(c12b.ToString()); Constraint c12c = c1 != (y == 2); Console.WriteLine(c12c.ToString()); Constraint c12d = (y == 2) != c1; Console.WriteLine(c12d.ToString()); Constraint c12e = c1 >= (y == 2); Console.WriteLine(c12e.ToString()); Constraint c12f = (y == 2) >= c1; Console.WriteLine(c12f.ToString()); Constraint c12g = c1 > (y == 2); Console.WriteLine(c12g.ToString()); Constraint c12h = (y == 2) > c1; Console.WriteLine(c12h.ToString()); Constraint c12i = c1 <= (y == 2); Console.WriteLine(c12i.ToString()); Constraint c12j = (y == 2) <= c1; Console.WriteLine(c12j.ToString()); Constraint c12k = c1 < (y == 2); Console.WriteLine(c12k.ToString()); Constraint c12l = (y == 2) < c1; Console.WriteLine(c12l.ToString()); }