26 int[] input = { 5, 11, 17 };
27 long[] output = ToInt64Vector(input);
28 Assert.Equal(3, output.Length);
29 Assert.Equal(5, output[0]);
30 Assert.Equal(11, output[1]);
31 Assert.Equal(17, output[2]);
38 Assert.NotNull(solver);
39 IntVar x = solver.MakeIntVar(3, 7,
"x");
40 Assert.Equal(3, x.Min());
41 Assert.Equal(7, x.Max());
42 Assert.Equal(
"x(3..7)", x.ToString());
49 Assert.NotNull(solver);
50 IntVar x = solver.MakeIntVar(3, 7,
"x");
51 Assert.Equal(
"x(3..7)", x.ToString());
55 Assert.Equal(
"(x(3..7) == 5)", c0.ToString());
57 Assert.Equal(
"-(Watch<x == 5>(0 .. 1))", e1.ToString());
59 Assert.Equal(
"Watch<x == 5>(0 .. 1)", e2.ToString());
61 Assert.Equal(
"IntSquare(Watch<x == 5>(0 .. 1))", e3.ToString());
65 Assert.Equal(
"(x(3..7) == 5)", c1.ToString());
67 Assert.Equal(
"(x(3..7) >= 5)", c2.ToString());
69 Assert.Equal(
"(x(3..7) >= 6)", c3.ToString());
71 Assert.Equal(
"(x(3..7) <= 5)", c4.ToString());
73 Assert.Equal(
"(x(3..7) <= 4)", c5.ToString());
75 Assert.Equal(
"(x(3..7) != 5)", c6.ToString());
77 Assert.Equal(
"FalseConstraint()", c7.ToString());
84 Assert.NotNull(solver);
85 IntVar x = solver.MakeIntVar(3, 13,
"x");
86 Assert.Equal(3, x.Min());
87 Assert.Equal(13, x.Max());
91 Assert.Equal(
"-(Watch<x == 7>(0 .. 1))", e1.ToString());
93 Assert.Equal(
"Watch<x == 7>(0 .. 1)", e2.ToString());
95 Assert.Equal(
"IntSquare(Watch<x == 7>(0 .. 1))", e3.ToString());
102 Assert.NotNull(solver);
103 IntVar x = solver.MakeIntVar(3, 13,
"x");
104 Assert.Equal(3, x.Min());
105 Assert.Equal(13, x.Max());
109 Assert.Equal(
"-(Watch<x >= 7>(0 .. 1))", e1.ToString());
111 Assert.Equal(
"Watch<x >= 7>(0 .. 1)", e2.ToString());
112 IntExpr e3 = (x >= 7).Square();
113 Assert.Equal(
"IntSquare(Watch<x >= 7>(0 .. 1))", e3.ToString());
120 Assert.NotNull(solver);
121 IntVar x = solver.MakeIntVar(3, 13,
"x");
122 Assert.Equal(3, x.Min());
123 Assert.Equal(13, x.Max());
126 Assert.Equal(
"(x(3..13) == 7)", c1.ToString());
130 Assert.Equal(
"(Watch<x == 7>(0 .. 1) + 1)", e2a.ToString());
132 Assert.Equal(
"(Watch<x == 7>(0 .. 1) + 1)", e2b.ToString());
135 Assert.Equal(
"(Watch<x == 7>(0 .. 1) + -1)", e2c.ToString());
137 Assert.Equal(
"Not(Watch<x == 7>(0 .. 1))", e2d.ToString());
140 Assert.Equal(
"(Watch<x == 7>(0 .. 1) * 2)", e2e.ToString());
142 Assert.Equal(
"(Watch<x == 7>(0 .. 1) * 2)", e2f.ToString());
145 Assert.Equal(
"(Watch<x == 7>(0 .. 1) div 4)", e2g.ToString());
149 Assert.Equal(
"(Watch<x == 7>(0 .. 1) == 1)", c8a.ToString());
151 Assert.Equal(
"(Watch<x == 7>(0 .. 1) == 1)", c8b.ToString());
154 Assert.Equal(
"(Watch<x == 7>(0 .. 1) != 1)", c8c.ToString());
156 Assert.Equal(
"(Watch<x == 7>(0 .. 1) != 1)", c8d.ToString());
159 Assert.Equal(
"(Watch<x == 7>(0 .. 1) >= 1)", c8e.ToString());
161 Assert.Equal(
"TrueConstraint()", c8f.ToString());
164 Assert.Equal(
"FalseConstraint()", c8g.ToString());
166 Assert.Equal(
"(Watch<x == 7>(0 .. 1) <= 0)", c8h.ToString());
169 Assert.Equal(
"TrueConstraint()", c8i.ToString());
171 Assert.Equal(
"(Watch<x == 7>(0 .. 1) >= 1)", c8j.ToString());
174 Assert.Equal(
"(Watch<x == 7>(0 .. 1) <= 0)", c8k.ToString());
176 Assert.Equal(
"FalseConstraint()", c8l.ToString());
183 Assert.NotNull(solver);
184 IntVar x = solver.MakeIntVar(3, 13,
"x");
185 Assert.Equal(3, x.Min());
186 Assert.Equal(13, x.Max());
189 Assert.Equal(
"(x(3..13) == 7)", c1.ToString());
191 IntVar y = solver.MakeIntVar(5, 17,
"y");
192 Assert.Equal(5, y.Min());
193 Assert.Equal(17, y.Max());
197 Assert.Equal(
"(Watch<x == 7>(0 .. 1) + y(5..17))", e3a.ToString());
199 Assert.Equal(
"(Watch<x == 7>(0 .. 1) + y(5..17))", e3b.ToString());
202 Assert.Equal(
"(Watch<x == 7>(0 .. 1) - y(5..17))", e3c.ToString());
204 Assert.Equal(
"(y(5..17) - Watch<x == 7>(0 .. 1))", e3d.ToString());
207 Assert.Equal(
"(Watch<x == 7>(0 .. 1) * y(5..17))", e3e.ToString());
209 Assert.Equal(
"(Watch<x == 7>(0 .. 1) * y(5..17))", e3f.ToString());
213 Assert.Equal(
"Watch<x == 7>(0 .. 1) == y(5..17)", c9a.ToString());
215 Assert.Equal(
"y(5..17) == Watch<x == 7>(0 .. 1)", c9b.ToString());
218 Assert.Equal(
"Watch<x == 7>(0 .. 1) != y(5..17)", c9c.ToString());
220 Assert.Equal(
"y(5..17) != Watch<x == 7>(0 .. 1)", c9d.ToString());
223 Assert.Equal(
"y(5..17) <= Watch<x == 7>(0 .. 1)", c9e.ToString());
225 Assert.Equal(
"Watch<x == 7>(0 .. 1) <= y(5..17)", c9f.ToString());
228 Assert.Equal(
"y(5..17) < Watch<x == 7>(0 .. 1)", c9g.ToString());
230 Assert.Equal(
"Watch<x == 7>(0 .. 1) < y(5..17)", c9h.ToString());
233 Assert.Equal(
"Watch<x == 7>(0 .. 1) <= y(5..17)", c9i.ToString());
235 Assert.Equal(
"y(5..17) <= Watch<x == 7>(0 .. 1)", c9j.ToString());
238 Assert.Equal(
"Watch<x == 7>(0 .. 1) < y(5..17)", c9k.ToString());
240 Assert.Equal(
"y(5..17) < Watch<x == 7>(0 .. 1)", c9l.ToString());
247 Assert.NotNull(solver);
248 IntVar x = solver.MakeIntVar(3, 13,
"x");
249 Assert.Equal(3, x.Min());
250 Assert.Equal(13, x.Max());
252 Assert.Equal(
"(x(3..13) == 7)", c1.ToString());
254 IntVar y = solver.MakeIntVar(5, 17,
"y");
255 Assert.Equal(5, y.Min());
256 Assert.Equal(17, y.Max());
260 Assert.Equal(
"(Watch<x == 7>(0 .. 1) + Watch<y == 11>(0 .. 1))", e11a.ToString());
262 Assert.Equal(
"(Watch<x == 7>(0 .. 1) + Watch<y == 11>(0 .. 1))", e11b.ToString());
264 Assert.Equal(
"(Watch<x == 7>(0 .. 1) - Watch<y == 11>(0 .. 1))", e11c.ToString());
266 Assert.Equal(
"(Watch<y == 11>(0 .. 1) - Watch<x == 7>(0 .. 1))", e11d.ToString());
268 Assert.Equal(
"(Watch<x == 7>(0 .. 1) * Watch<y == 11>(0 .. 1))", e11e.ToString());
270 Assert.Equal(
"(Watch<x == 7>(0 .. 1) * Watch<y == 11>(0 .. 1))", e11f.ToString());
274 Assert.Equal(
"Watch<x == 7>(0 .. 1) == Watch<y == 11>(0 .. 1)", c12a.ToString());
276 Assert.Equal(
"Watch<y == 11>(0 .. 1) == Watch<x == 7>(0 .. 1)", c12b.ToString());
278 Assert.Equal(
"Watch<x == 7>(0 .. 1) != Watch<y == 11>(0 .. 1)", c12c.ToString());
280 Assert.Equal(
"Watch<y == 11>(0 .. 1) != Watch<x == 7>(0 .. 1)", c12d.ToString());
282 Assert.Equal(
"Watch<y == 11>(0 .. 1) <= Watch<x == 7>(0 .. 1)", c12e.ToString());
284 Assert.Equal(
"Watch<x == 7>(0 .. 1) <= Watch<y == 11>(0 .. 1)", c12f.ToString());
286 Assert.Equal(
"Watch<y == 11>(0 .. 1) < Watch<x == 7>(0 .. 1)", c12g.ToString());
288 Assert.Equal(
"Watch<x == 7>(0 .. 1) < Watch<y == 11>(0 .. 1)", c12h.ToString());
290 Assert.Equal(
"Watch<x == 7>(0 .. 1) <= Watch<y == 11>(0 .. 1)", c12i.ToString());
292 Assert.Equal(
"Watch<y == 11>(0 .. 1) <= Watch<x == 7>(0 .. 1)", c12j.ToString());
294 Assert.Equal(
"Watch<x == 7>(0 .. 1) < Watch<y == 11>(0 .. 1)", c12k.ToString());
296 Assert.Equal(
"Watch<y == 11>(0 .. 1) < Watch<x == 7>(0 .. 1)", c12l.ToString());
303 Assert.NotNull(solver);
304 IntVar x = solver.MakeIntVar(3, 13,
"x");
305 Assert.Equal(3, x.Min());
306 Assert.Equal(13, x.Max());
308 Assert.Equal(
"(x(3..13) == 7)", c1.ToString());
310 IntVar y = solver.MakeIntVar(5, 17,
"y");
311 Assert.Equal(5, y.Min());
312 Assert.Equal(17, y.Max());
314 Assert.Equal(
"(y(5..17) == 11)", c2.ToString());
318 Assert.Equal(
"Watch<x == 7>(0 .. 1) == Watch<y == 11>(0 .. 1)", c10a.ToString());
321 Assert.Equal(
"Watch<x == 7>(0 .. 1) != Watch<y == 11>(0 .. 1)", c10b.ToString());
324 Assert.Equal(
"Watch<x == 7>(0 .. 1) <= Watch<y == 11>(0 .. 1)", c10c.ToString());
326 Assert.Equal(
"Watch<y == 11>(0 .. 1) <= Watch<x == 7>(0 .. 1)", c10d.ToString());
329 Assert.Equal(
"Watch<y == 11>(0 .. 1) < Watch<x == 7>(0 .. 1)", c10e.ToString());
331 Assert.Equal(
"Watch<x == 7>(0 .. 1) < Watch<y == 11>(0 .. 1)", c10f.ToString());
338 Assert.NotNull(solver);
339 IntVar x = solver.MakeIntVar(3, 13,
"x");
340 Assert.Equal(3, x.Min());
341 Assert.Equal(13, x.Max());
345 Assert.Equal(
"(Watch<x == 7>(0 .. 1) + 1)", e2a.ToString());
347 Assert.Equal(
"(Watch<x == 7>(0 .. 1) + 1)", e2b.ToString());
350 Assert.Equal(
"(Watch<x == 7>(0 .. 1) + -1)", e2c.ToString());
352 Assert.Equal(
"Not(Watch<x == 7>(0 .. 1))", e2d.ToString());
355 Assert.Equal(
"(Watch<x == 7>(0 .. 1) * 2)", e2e.ToString());
357 Assert.Equal(
"(Watch<x == 7>(0 .. 1) * 2)", e2f.ToString());
360 Assert.Equal(
"(Watch<x == 7>(0 .. 1) div 4)", e2g.ToString());
364 Assert.Equal(
"(Watch<x == 7>(0 .. 1) == 1)", c8a.ToString());
366 Assert.Equal(
"(Watch<x == 7>(0 .. 1) == 1)", c8b.ToString());
369 Assert.Equal(
"(Watch<x == 7>(0 .. 1) != 1)", c8c.ToString());
371 Assert.Equal(
"(Watch<x == 7>(0 .. 1) != 1)", c8d.ToString());
374 Assert.Equal(
"(Watch<x == 7>(0 .. 1) >= 1)", c8e.ToString());
376 Assert.Equal(
"TrueConstraint()", c8f.ToString());
379 Assert.Equal(
"FalseConstraint()", c8g.ToString());
381 Assert.Equal(
"(Watch<x == 7>(0 .. 1) <= 0)", c8h.ToString());
384 Assert.Equal(
"TrueConstraint()", c8i.ToString());
386 Assert.Equal(
"(Watch<x == 7>(0 .. 1) >= 1)", c8j.ToString());
389 Assert.Equal(
"(Watch<x == 7>(0 .. 1) <= 0)", c8k.ToString());
391 Assert.Equal(
"FalseConstraint()", c8l.ToString());
398 Assert.NotNull(solver);
399 IntVar x = solver.MakeIntVar(3, 13,
"x");
400 Assert.Equal(3, x.Min());
401 Assert.Equal(13, x.Max());
403 IntVar y = solver.MakeIntVar(5, 17,
"y");
404 Assert.Equal(5, y.Min());
405 Assert.Equal(17, y.Max());
409 Assert.Equal(
"(Watch<x == 7>(0 .. 1) + y(5..17))", e3a.ToString());
411 Assert.Equal(
"(Watch<x == 7>(0 .. 1) + y(5..17))", e3b.ToString());
414 Assert.Equal(
"(Watch<x == 7>(0 .. 1) - y(5..17))", e3c.ToString());
416 Assert.Equal(
"(y(5..17) - Watch<x == 7>(0 .. 1))", e3d.ToString());
419 Assert.Equal(
"(Watch<x == 7>(0 .. 1) * y(5..17))", e3e.ToString());
421 Assert.Equal(
"(Watch<x == 7>(0 .. 1) * y(5..17))", e3f.ToString());
425 Assert.Equal(
"Watch<x == 7>(0 .. 1) == y(5..17)", c9a.ToString());
427 Assert.Equal(
"y(5..17) == Watch<x == 7>(0 .. 1)", c9b.ToString());
430 Assert.Equal(
"Watch<x == 7>(0 .. 1) != y(5..17)", c9c.ToString());
432 Assert.Equal(
"y(5..17) != Watch<x == 7>(0 .. 1)", c9d.ToString());
435 Assert.Equal(
"y(5..17) <= Watch<x == 7>(0 .. 1)", c9e.ToString());
437 Assert.Equal(
"Watch<x == 7>(0 .. 1) <= y(5..17)", c9f.ToString());
440 Assert.Equal(
"y(5..17) < Watch<x == 7>(0 .. 1)", c9g.ToString());
442 Assert.Equal(
"Watch<x == 7>(0 .. 1) < y(5..17)", c9h.ToString());
445 Assert.Equal(
"Watch<x == 7>(0 .. 1) <= y(5..17)", c9i.ToString());
447 Assert.Equal(
"y(5..17) <= Watch<x == 7>(0 .. 1)", c9j.ToString());
450 Assert.Equal(
"Watch<x == 7>(0 .. 1) < y(5..17)", c9k.ToString());
452 Assert.Equal(
"y(5..17) < Watch<x == 7>(0 .. 1)", c9l.ToString());
459 Assert.NotNull(solver);
460 IntVar x = solver.MakeIntVar(3, 13,
"x");
461 Assert.Equal(3, x.Min());
462 Assert.Equal(13, x.Max());
464 IntVar y = solver.MakeIntVar(5, 17,
"y");
465 Assert.Equal(5, y.Min());
466 Assert.Equal(17, y.Max());
470 Assert.Equal(
"Watch<x == 7>(0 .. 1) == Watch<y == 11>(0 .. 1)", c10a.ToString());
473 Assert.Equal(
"Watch<x == 7>(0 .. 1) != Watch<y == 11>(0 .. 1)", c10b.ToString());
476 Assert.Equal(
"Watch<x == 7>(0 .. 1) <= Watch<y == 11>(0 .. 1)", c10c.ToString());
478 Assert.Equal(
"Watch<y == 11>(0 .. 1) <= Watch<x == 7>(0 .. 1)", c10d.ToString());
481 Assert.Equal(
"Watch<y == 11>(0 .. 1) < Watch<x == 7>(0 .. 1)", c10e.ToString());
483 Assert.Equal(
"Watch<x == 7>(0 .. 1) < Watch<y == 11>(0 .. 1)", c10f.ToString());
490 Assert.NotNull(solver);
491 IntVar x = solver.MakeIntVar(3, 13,
"x");
492 Assert.Equal(3, x.Min());
493 Assert.Equal(13, x.Max());
497 Assert.Equal(
"(Watch<x >= 7>(0 .. 1) + 1)", e2a.ToString());
499 Assert.Equal(
"(Watch<x >= 7>(0 .. 1) + 1)", e2b.ToString());
502 Assert.Equal(
"(Watch<x >= 7>(0 .. 1) + -1)", e2c.ToString());
504 Assert.Equal(
"Not(Watch<x >= 7>(0 .. 1))", e2d.ToString());
507 Assert.Equal(
"(Watch<x >= 7>(0 .. 1) * 2)", e2e.ToString());
509 Assert.Equal(
"(Watch<x >= 7>(0 .. 1) * 2)", e2f.ToString());
513 Assert.Equal(
"(Watch<x >= 7>(0 .. 1) == 1)", c8a.ToString());
515 Assert.Equal(
"(Watch<x >= 7>(0 .. 1) == 1)", c8b.ToString());
518 Assert.Equal(
"(Watch<x >= 7>(0 .. 1) != 1)", c8c.ToString());
520 Assert.Equal(
"(Watch<x >= 7>(0 .. 1) != 1)", c8d.ToString());
523 Assert.Equal(
"(Watch<x >= 7>(0 .. 1) >= 1)", c8e.ToString());
525 Assert.Equal(
"TrueConstraint()", c8f.ToString());
528 Assert.Equal(
"FalseConstraint()", c8g.ToString());
530 Assert.Equal(
"(Watch<x >= 7>(0 .. 1) <= 0)", c8h.ToString());
533 Assert.Equal(
"TrueConstraint()", c8i.ToString());
535 Assert.Equal(
"(Watch<x >= 7>(0 .. 1) >= 1)", c8j.ToString());
538 Assert.Equal(
"(Watch<x >= 7>(0 .. 1) <= 0)", c8k.ToString());
540 Assert.Equal(
"FalseConstraint()", c8l.ToString());
547 Assert.NotNull(solver);
548 IntVar x = solver.MakeIntVar(3, 13,
"x");
549 Assert.Equal(3, x.Min());
550 Assert.Equal(13, x.Max());
552 IntVar y = solver.MakeIntVar(5, 17,
"y");
553 Assert.Equal(5, y.Min());
554 Assert.Equal(17, y.Max());
558 Assert.Equal(
"(Watch<x >= 7>(0 .. 1) + y(5..17))", e3a.ToString());
560 Assert.Equal(
"(Watch<x >= 7>(0 .. 1) + y(5..17))", e3b.ToString());
563 Assert.Equal(
"(Watch<x >= 7>(0 .. 1) - y(5..17))", e3c.ToString());
565 Assert.Equal(
"(y(5..17) - Watch<x >= 7>(0 .. 1))", e3d.ToString());
568 Assert.Equal(
"(Watch<x >= 7>(0 .. 1) * y(5..17))", e3e.ToString());
570 Assert.Equal(
"(Watch<x >= 7>(0 .. 1) * y(5..17))", e3f.ToString());
574 Assert.Equal(
"Watch<x >= 7>(0 .. 1) == y(5..17)", c9a.ToString());
576 Assert.Equal(
"y(5..17) == Watch<x >= 7>(0 .. 1)", c9b.ToString());
579 Assert.Equal(
"Watch<x >= 7>(0 .. 1) != y(5..17)", c9c.ToString());
581 Assert.Equal(
"y(5..17) != Watch<x >= 7>(0 .. 1)", c9d.ToString());
584 Assert.Equal(
"y(5..17) <= Watch<x >= 7>(0 .. 1)", c9e.ToString());
586 Assert.Equal(
"Watch<x >= 7>(0 .. 1) <= y(5..17)", c9f.ToString());
589 Assert.Equal(
"y(5..17) < Watch<x >= 7>(0 .. 1)", c9g.ToString());
591 Assert.Equal(
"Watch<x >= 7>(0 .. 1) < y(5..17)", c9h.ToString());
594 Assert.Equal(
"Watch<x >= 7>(0 .. 1) <= y(5..17)", c9i.ToString());
596 Assert.Equal(
"y(5..17) <= Watch<x >= 7>(0 .. 1)", c9j.ToString());
599 Assert.Equal(
"Watch<x >= 7>(0 .. 1) < y(5..17)", c9k.ToString());
601 Assert.Equal(
"y(5..17) < Watch<x >= 7>(0 .. 1)", c9l.ToString());
608 Assert.NotNull(solver);
609 IntVar x = solver.MakeIntVar(3, 13,
"x");
610 Assert.Equal(3, x.Min());
611 Assert.Equal(13, x.Max());
613 IntVar y = solver.MakeIntVar(5, 17,
"y");
614 Assert.Equal(5, y.Min());
615 Assert.Equal(17, y.Max());
619 Assert.Equal(
"Watch<x >= 7>(0 .. 1) == Watch<y >= 11>(0 .. 1)", c10a.ToString());
622 Assert.Equal(
"Watch<x >= 7>(0 .. 1) != Watch<y >= 11>(0 .. 1)", c10b.ToString());
625 Assert.Equal(
"Watch<x >= 7>(0 .. 1) <= Watch<y >= 11>(0 .. 1)", c10c.ToString());
627 Assert.Equal(
"Watch<y >= 11>(0 .. 1) <= Watch<x >= 7>(0 .. 1)", c10d.ToString());
630 Assert.Equal(
"Watch<y >= 11>(0 .. 1) < Watch<x >= 7>(0 .. 1)", c10e.ToString());
632 Assert.Equal(
"Watch<x >= 7>(0 .. 1) < Watch<y >= 11>(0 .. 1)", c10f.ToString());
639 Assert.NotNull(solver);
640 IntVar x = solver.MakeIntVar(2, 17,
"x");
643 Assert.Equal(
"(x(2..17) + 5)", y.ToString());
650 Assert.NotNull(solver);
652 DisjunctiveConstraint disjunctive = intervals.Disjunctive(
"Sequence");
653 SequenceVar var = disjunctive.SequenceVar();
654 Assignment ass = solver.MakeAssignment();
656 ass.SetForwardSequence(var,
new int[] { 1, 3, 5 });
657 int[] seq = ass.ForwardSequence(var);
658 Assert.Equal(3, seq.Length);
659 Assert.Equal(1, seq[0]);
660 Assert.Equal(3, seq[1]);
661 Assert.Equal(5, seq[2]);
668 public SetMaxDemon(IntVar x)
672 public override void Run(
Solver s)
683 Assert.NotNull(solver);
684 IntVar x = solver.MakeIntVar(
new int[] { 2, 4, -1, 6, 11, 10 },
"x");
685 NetDemon demon =
new SetMaxDemon(x);
686 Assert.Equal(11, x.Max());
688 Assert.Equal(10, x.Max());
695 public SetMinAndMaxConstraint(
Solver solver, IntVar x) : base(solver)
699 public override void Post()
703 demon_ =
new SetMaxDemon(x_);
704 x_.WhenBound(demon_);
706 public override void InitialPropagate()
711 private Demon demon_;
718 Assert.NotNull(solver);
719 IntVar x = solver.MakeIntVar(
new int[] { 2, 4, -1, 6, 11, 10 },
"x");
720 Constraint ct =
new SetMinAndMaxConstraint(solver, x);
722 DecisionBuilder db = solver.MakePhase(x,
Solver.CHOOSE_FIRST_UNBOUND,
Solver.ASSIGN_MIN_VALUE);
724 Assert.Equal(-1, x.Min());
725 Assert.Equal(11, x.Max());
727 Assert.True(solver.NextSolution());
728 Assert.Equal(6, x.Min());
729 Assert.Equal(6, x.Max());
731 Assert.True(solver.NextSolution());
732 Assert.Equal(10, x.Min());
733 Assert.Equal(10, x.Max());
735 Assert.False(solver.NextSolution());
744 public DumbGreaterOrEqualToFive(
Solver solver, IntVar x) : base(solver)
748 public override void Post()
750 demon_ = solver().MakeConstraintInitialPropagateCallback(
this);
751 x_.WhenRange(demon_);
753 public override void InitialPropagate()
764 private Demon demon_;
771 Assert.NotNull(solver);
772 IntVar x = solver.MakeIntVar(
new int[] { 2, 4, -1, 6, 11, 10 },
"x");
773 Constraint ct =
new DumbGreaterOrEqualToFive(solver, x);
775 DecisionBuilder db = solver.MakePhase(x,
Solver.CHOOSE_FIRST_UNBOUND,
Solver.ASSIGN_MIN_VALUE);
777 Assert.True(solver.NextSolution());
778 Assert.Equal(6, x.Min());
786 Assert.NotNull(solver);
787 IntVar x = solver.MakeIntVar(
new int[] { 2, 4, -1, 6, 11, 10 },
"x");
789 foreach (
long value
in x.GetDomain())
793 Assert.Equal(count, x.Size());
798 public CountHoles(IntVar x)
803 public override void Run(
Solver s)
805 foreach (
long removed
in x_.GetHoles())
820 public RemoveThreeValues(
Solver solver, IntVar x) : base(solver)
824 public override void Post()
826 demon_ =
new CountHoles(x_);
827 x_.WhenDomain(demon_);
829 public override void InitialPropagate()
831 x_.RemoveValues(
new long[] { 3, 5, 7 });
835 return demon_.count();
838 private CountHoles demon_;
845 Assert.NotNull(solver);
846 IntVar x = solver.MakeIntVar(0, 10,
"x");
847 RemoveThreeValues ct =
new RemoveThreeValues(solver, x);
849 DecisionBuilder db = solver.MakePhase(x,
Solver.CHOOSE_FIRST_UNBOUND,
Solver.ASSIGN_MIN_VALUE);
851 Assert.Equal(3, ct.count());
855 void RunSearchLog(in SearchMonitor searchlog)
857 searchlog.EnterSearch();
858 searchlog.ExitSearch();
859 searchlog.AcceptSolution();
860 searchlog.AtSolution();
861 searchlog.BeginFail();
862 searchlog.NoMoreSolutions();
863 searchlog.BeginInitialPropagation();
864 searchlog.EndInitialPropagation();
871 Assert.NotNull(solver);
872 IntVar var = solver.MakeIntVar(1, 1,
"Variable");
873 OptimizeVar objective = solver.MakeMinimize(var, 1);
874 SearchMonitor searchlog = solver.MakeSearchLog(0);
875 RunSearchLog(in searchlog);
876 GC.KeepAlive(solver);
885 Assert.NotNull(solver);
886 IntVar var = solver.MakeIntVar(1, 1,
"Variable");
887 OptimizeVar objective = solver.MakeMinimize(var, 1);
889 SearchMonitor searchlog = solver.MakeSearchLog(0,
893 return "display callback...";
898 GC.WaitForPendingFinalizers();
900 RunSearchLog(in searchlog);
901 GC.KeepAlive(solver);
902 Assert.Equal(1, count);
911 Assert.NotNull(solver);
912 IntVar var = solver.MakeIntVar(1, 1,
"Variable");
913 OptimizeVar objective = solver.MakeMinimize(var, 1);
915 SearchMonitor searchlog = solver.MakeSearchLog(0,
920 return "OptimizeVar display callback";
925 GC.WaitForPendingFinalizers();
927 RunSearchLog(in searchlog);
928 GC.KeepAlive(solver);
929 Assert.Equal(1, count);
938 Assert.NotNull(solver);
939 IntVar var = solver.MakeIntVar(1, 1,
"Variable");
940 OptimizeVar objective = solver.MakeMinimize(var, 1);
942 SearchMonitor searchlog = solver.MakeSearchLog(0,
947 return "IntVar display callback";
952 GC.WaitForPendingFinalizers();
954 RunSearchLog(in searchlog);
955 GC.KeepAlive(solver);
956 Assert.Equal(1, count);