Generated on Thu Jan 16 2025 00:00:00 for Gecode by doxygen 1.14.0
dom.cpp
Go to the documentation of this file.
1/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2/*
3 * Main authors:
4 * Guido Tack <tack@gecode.org>
5 *
6 * Copyright:
7 * Guido Tack, 2005
8 *
9 * This file is part of Gecode, the generic constraint
10 * development environment:
11 * http://www.gecode.org
12 *
13 * Permission is hereby granted, free of charge, to any person obtaining
14 * a copy of this software and associated documentation files (the
15 * "Software"), to deal in the Software without restriction, including
16 * without limitation the rights to use, copy, modify, merge, publish,
17 * distribute, sublicense, and/or sell copies of the Software, and to
18 * permit persons to whom the Software is furnished to do so, subject to
19 * the following conditions:
20 *
21 * The above copyright notice and this permission notice shall be
22 * included in all copies or substantial portions of the Software.
23 *
24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
28 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
29 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 *
32 */
33
34#include <gecode/minimodel.hh>
35
36#include "test/set.hh"
37
38using namespace Gecode;
39
40namespace Test { namespace Set {
41
43 namespace Dom {
44
50
51 static const int d1r[4][2] = {
52 {-4,-3},{-1,-1},{1,1},{3,5}
53 };
54 static IntSet d1(d1r,4);
55
56 static const int d1cr[5][2] = {
58 {-2,-2},{0,0},{2,2},
60 };
61 static IntSet d1c(d1cr,5);
62
63 static IntSet ds_33(-3,3);
64
65 static const int d2r[2][2] = {
67 };
68 static IntSet ds_33c(d2r,2);
69
70 namespace {
71 static int minSymDiff(const SetAssignment& x, int i, const IntSet& is) {
73 CountableSetRanges xr00(x.lub, x[i]);
74 IntSetRanges xr10(is);
75 DiffA a(xr00,xr10);
77 CountableSetRanges xr01(x.lub, x[i]);
78 IntSetRanges xr11(is);
79 DiffB b(xr11,xr01);
81 return u() ? u.min() : Gecode::Set::Limits::max+1;
82 }
83 template<class I>
84 static bool in(int i, I& c, bool eq=false) {
85 if (eq && i==Gecode::Set::Limits::max+1)
86 return true;
88 return Iter::Ranges::subset(s,c);
89 }
90 }
91
93 class DomRange : public SetTest {
94 private:
96 IntSet is;
97 public:
99 DomRange(SetRelType srt0, int n) :
100 SetTest("Dom::Range::"+str(srt0)+"::"+str(n),n,ds_33,(n == 1)),
101 srt(srt0), is(srt == Gecode::SRT_CMPL ? ds_33c: ds_33) {}
102
103 virtual bool solution(const SetAssignment& x) const {
104 for (int i=x.size(); i--; ) {
105 CountableSetRanges xr(x.lub, x[i]);
106 IntSetRanges dr(is);
107 switch (srt) {
108 case SRT_EQ:
109 if (!Iter::Ranges::equal(xr, dr))
110 return false;
111 break;
112 case SRT_LQ:
113 if (!((!xr()) || in(minSymDiff(x,i,is),dr,true)))
114 return false;
115 break;
116 case SRT_LE:
117 if (!(xr() ? in(minSymDiff(x,i,is),dr) : dr()))
118 return false;
119 break;
120 case SRT_GQ:
121 if (!((!dr()) || in(minSymDiff(x,i,is),xr,true)))
122 return false;
123 break;
124 case SRT_GR:
125 if (!(dr() ? in(minSymDiff(x,i,is),xr) : xr()))
126 return false;
127 break;
128 case SRT_NQ:
129 if (Iter::Ranges::equal(xr, dr))
130 return false;
131 break;
132 case SRT_SUB:
133 if (!Iter::Ranges::subset(xr, dr))
134 return false;
135 break;
136 case SRT_SUP:
137 if (!Iter::Ranges::subset(dr, xr))
138 return false;
139 break;
140 case SRT_DISJ:
141 {
143 inter(xr, dr);
144 if (inter())
145 return false;
146 }
147 break;
148 case SRT_CMPL:
149 {
151 if (!Iter::Ranges::equal(xr,drc))
152 return false;
153 }
154 break;
155 default: GECODE_NEVER;
156 }
157 }
158 return true;
159 }
160
161 virtual void post(Space& home, SetVarArray& x, IntVarArray&) {
162 if (x.size() == 1)
163 Gecode::dom(home, x[0], srt, is);
164 else
165 Gecode::dom(home, x, srt, is);
166 }
167
168 virtual void post(Space& home, SetVarArray& x, IntVarArray&, Reify r) {
169 assert(x.size() == 1);
170 if (Base::rand(2) != 0) {
171 Gecode::dom(home, x[0], srt, is, r);
172 } else {
173 switch (r.mode()) {
174 case Gecode::RM_EQV:
175 Gecode::rel(home, Gecode::dom(x[0], srt, is) == r.var()); break;
176 case Gecode::RM_IMP:
177 Gecode::rel(home, Gecode::dom(x[0], srt, is) << r.var()); break;
178 case Gecode::RM_PMI:
179 Gecode::rel(home, Gecode::dom(x[0], srt, is) >> r.var()); break;
180 default: GECODE_NEVER;
181 }
182 }
183 }
184 };
185
187 class DomIntRange : public SetTest {
188 private:
190 public:
193 : SetTest("Dom::IntRange::"+str(srt0)+"::"+str(n),1,ds_33,n==1),
194 srt(srt0) {}
195
196 virtual bool solution(const SetAssignment& x) const {
197 for (int i=x.size(); i--; ) {
198 CountableSetRanges xr(x.lub, x[i]);
199 IntSet is(-3,-1);
200 IntSetRanges dr(is);
201 switch (srt) {
202 case SRT_EQ:
203 if (!Iter::Ranges::equal(xr, dr))
204 return false;
205 break;
206 case SRT_LQ:
207 if (!((!xr()) || in(minSymDiff(x,i,is),dr,true)))
208 return false;
209 break;
210 case SRT_LE:
211 if (!(xr() ? in(minSymDiff(x,i,is),dr) : dr()))
212 return false;
213 break;
214 case SRT_GQ:
215 if (!((!dr()) || in(minSymDiff(x,i,is),xr,true)))
216 return false;
217 break;
218 case SRT_GR:
219 if (!(dr() ? in(minSymDiff(x,i,is),xr) : xr()))
220 return false;
221 break;
222 case SRT_NQ:
223 if (!(!Iter::Ranges::equal(xr, dr)))
224 return false;
225 break;
226 case SRT_SUB:
227 if (!(Iter::Ranges::subset(xr, dr)))
228 return false;
229 break;
230 case SRT_SUP:
231 if (!(Iter::Ranges::subset(dr, xr)))
232 return false;
233 break;
234 case SRT_DISJ:
235 {
237 inter(xr, dr);
238 if (inter())
239 return false;
240 }
241 break;
242 case SRT_CMPL:
243 {
245 if (!Iter::Ranges::equal(xr,drc))
246 return false;
247 }
248 break;
249 default: GECODE_NEVER;
250 }
251 }
252 return true;
253 }
254
255 virtual void post(Space& home, SetVarArray& x, IntVarArray&) {
256 if (x.size() == 1)
257 Gecode::dom(home, x[0], srt, -3, -1);
258 else
259 Gecode::dom(home, x, srt, -3, -1);
260 }
261
262 virtual void post(Space& home, SetVarArray& x, IntVarArray&, Reify r) {
263 assert(x.size() == 1);
264 if (Base::rand(2) != 0) {
265 Gecode::dom(home, x[0], srt, -3, -1, r);
266 } else {
267 switch (r.mode()) {
268 case Gecode::RM_EQV:
269 Gecode::rel(home, Gecode::dom(x[0], srt, -3, -1) == r.var()); break;
270 case Gecode::RM_IMP:
271 Gecode::rel(home, Gecode::dom(x[0], srt, -3, -1) << r.var()); break;
272 case Gecode::RM_PMI:
273 Gecode::rel(home, Gecode::dom(x[0], srt, -3, -1) >> r.var()); break;
274 default: GECODE_NEVER;
275 }
276 }
277 }
278 };
279
281 class DomInt : public SetTest {
282 private:
284 public:
287 SetTest("Dom::Int::"+str(srt0)+"::"+str(n),n,ds_33,n==1),
288 srt(srt0) {}
289
290 virtual bool solution(const SetAssignment& x) const {
291 IntSet is(-3,-3);
292 for (int i=x.size(); i--; ) {
293 CountableSetRanges xr(x.lub, x[i]);
294 IntSetRanges dr(is);
295 switch (srt) {
296 case SRT_EQ:
297 if (!Iter::Ranges::equal(xr, dr))
298 return false;
299 break;
300 case SRT_LQ:
301 if (!((!xr()) || in(minSymDiff(x,i,is),dr,true)))
302 return false;
303 break;
304 case SRT_LE:
305 if (!(xr() ? in(minSymDiff(x,i,is),dr) : dr()))
306 return false;
307 break;
308 case SRT_GQ:
309 if (!((!dr()) || in(minSymDiff(x,i,is),xr,true)))
310 return false;
311 break;
312 case SRT_GR:
313 if (!(dr() ? in(minSymDiff(x,i,is),xr) : xr()))
314 return false;
315 break;
316 case SRT_NQ:
317 if (Iter::Ranges::equal(xr, dr))
318 return false;
319 break;
320 case SRT_SUB:
321 if (!(Iter::Ranges::subset(xr, dr)))
322 return false;
323 break;
324 case SRT_SUP:
325 if (!(Iter::Ranges::subset(dr, xr)))
326 return false;
327 break;
328 case SRT_DISJ:
329 {
331 inter(xr, dr);
332
333 if (inter())
334 return false;
335 break;
336 }
337 case SRT_CMPL:
338 {
340
341 if (!Iter::Ranges::equal(xr,drc))
342 return false;
343 break;
344 }
345 default: GECODE_NEVER;
346 }
347 }
348 return true;
349 }
350
351 virtual void post(Space& home, SetVarArray& x, IntVarArray&) {
352 if (x.size() == 1)
353 Gecode::dom(home, x[0], srt, -3);
354 else
355 Gecode::dom(home, x, srt, -3);
356 }
357
358 virtual void post(Space& home, SetVarArray& x, IntVarArray&, Reify r) {
359 assert(x.size() == 1);
360 if (Base::rand(2) != 0) {
361 Gecode::dom(home, x[0], srt, -3, r);
362 } else {
363 switch (r.mode()) {
364 case Gecode::RM_EQV:
365 Gecode::rel(home, Gecode::dom(x[0], srt, -3) == r.var()); break;
366 case Gecode::RM_IMP:
367 Gecode::rel(home, Gecode::dom(x[0], srt, -3) << r.var()); break;
368 case Gecode::RM_PMI:
369 Gecode::rel(home, Gecode::dom(x[0], srt, -3) >> r.var()); break;
370 default: GECODE_NEVER;
371 }
372 }
373 }
374 };
375
377 class DomDom : public SetTest {
378 private:
381 public:
384 SetTest("Dom::Dom::"+str(srt0)+"::"+str(n),n,d1,(n == 1)),
385 srt(srt0), is(srt == Gecode::SRT_CMPL ? d1c: d1) {}
386
387 virtual bool solution(const SetAssignment& x) const {
388 for (int i=x.size(); i--; ) {
389 CountableSetRanges xr(x.lub, x[i]);
390 IntSetRanges dr(is);
391 switch (srt) {
392 case SRT_EQ:
393 if (!Iter::Ranges::equal(xr, dr))
394 return false;
395 break;
396 case SRT_LQ:
397 if (!((!xr()) || in(minSymDiff(x,i,is),dr,true)))
398 return false;
399 break;
400 case SRT_LE:
401 if (!(xr() ? in(minSymDiff(x,i,is),dr) : dr()))
402 return false;
403 break;
404 case SRT_GQ:
405 if (!((!dr()) || in(minSymDiff(x,i,is),xr,true)))
406 return false;
407 break;
408 case SRT_GR:
409 if (!(dr() ? in(minSymDiff(x,i,is),xr) : xr()))
410 return false;
411 break;
412 case SRT_NQ:
413 if (Iter::Ranges::equal(xr, dr))
414 return false;
415 break;
416 case SRT_SUB:
417 if (!Iter::Ranges::subset(xr, dr))
418 return false;
419 break;
420 case SRT_SUP:
421 if (!Iter::Ranges::subset(dr, xr))
422 return false;
423 break;
424 case SRT_DISJ:
425 {
427 inter(xr, dr);
428 if (inter())
429 return false;
430 }
431 break;
432 case SRT_CMPL:
433 {
435 if (!Iter::Ranges::equal(xr,drc))
436 return false;
437 }
438 break;
439 default: GECODE_NEVER;
440 }
441 }
442 return true;
443 }
444
445 virtual void post(Space& home, SetVarArray& x, IntVarArray&) {
446 if (x.size() == 1)
447 Gecode::dom(home, x[0], srt, is);
448 else
449 Gecode::dom(home, x, srt, is);
450 }
451
452 virtual void post(Space& home, SetVarArray& x, IntVarArray&, Reify r) {
453 assert(x.size() == 1);
454 Gecode::dom(home, x[0], srt, is, r);
455 }
456 };
457
459 class CardRange : public SetTest {
460 public:
463 : SetTest("Dom::CardRange::"+str(n),n,d1,false) {}
464
465 virtual bool solution(const SetAssignment& x) const {
466 for (int i=x.size(); i--; ) {
467 CountableSetRanges xr(x.lub, x[i]);
468 unsigned int card = Iter::Ranges::size(xr);
469 if ((card < 2) || (card > 3))
470 return false;
471 }
472 return true;
473 }
474
475 virtual void post(Space& home, SetVarArray& x, IntVarArray&) {
476 if (x.size() == 1)
477 Gecode::cardinality(home, x[0], 2, 3);
478 else
479 Gecode::cardinality(home, x, 2, 3);
480 }
481 };
482
503
524
545
566
569
570}}}
571
572// STATISTICS: test-set
Range iterator for integer sets.
Definition int.hh:292
Integer sets.
Definition int.hh:174
Integer variable array.
Definition int.hh:772
Range iterator for computing set difference.
Range iterator for computing intersection (binary)
int min(void) const
Return smallest value of range.
Range iterator for singleton range.
Range iterator for computing union (binary)
Reification specification.
Definition int.hh:891
Set variable array
Definition set.hh:573
A complement iterator spezialized for the BndSet limits.
Definition var-imp.hpp:293
Computation spaces.
Definition core.hpp:1744
static Gecode::Support::RandomGenerator rand
Random number generator.
Definition test.hh:134
Range iterator producing subsets of an IntSet.
Definition set.hh:99
Test for cardinality range
Definition dom.cpp:459
virtual void post(Space &home, SetVarArray &x, IntVarArray &)
Post constraint on x.
Definition dom.cpp:475
CardRange(int n)
Create and register test.
Definition dom.cpp:462
virtual bool solution(const SetAssignment &x) const
Test whether x is solution
Definition dom.cpp:465
Test for equality with a domain
Definition dom.cpp:377
virtual bool solution(const SetAssignment &x) const
Test whether x is solution
Definition dom.cpp:387
virtual void post(Space &home, SetVarArray &x, IntVarArray &, Reify r)
Post reified constraint on x for b.
Definition dom.cpp:452
DomDom(Gecode::SetRelType srt0, int n)
Create and register test.
Definition dom.cpp:383
virtual void post(Space &home, SetVarArray &x, IntVarArray &)
Post constraint on x.
Definition dom.cpp:445
Test for equality with an integer range
Definition dom.cpp:187
virtual void post(Space &home, SetVarArray &x, IntVarArray &)
Post constraint on x.
Definition dom.cpp:255
virtual void post(Space &home, SetVarArray &x, IntVarArray &, Reify r)
Post reified constraint on x for b.
Definition dom.cpp:262
DomIntRange(Gecode::SetRelType srt0, int n)
Create and register test.
Definition dom.cpp:192
virtual bool solution(const SetAssignment &x) const
Test whether x is solution
Definition dom.cpp:196
Test for equality with an integer
Definition dom.cpp:281
virtual void post(Space &home, SetVarArray &x, IntVarArray &, Reify r)
Post reified constraint on x for b.
Definition dom.cpp:358
virtual void post(Space &home, SetVarArray &x, IntVarArray &)
Post constraint on x.
Definition dom.cpp:351
DomInt(Gecode::SetRelType srt0, int n)
Create and register test.
Definition dom.cpp:286
virtual bool solution(const SetAssignment &x) const
Test whether x is solution
Definition dom.cpp:290
Test for equality with a range
Definition dom.cpp:93
virtual void post(Space &home, SetVarArray &x, IntVarArray &, Reify r)
Post reified constraint on x for b.
Definition dom.cpp:168
virtual void post(Space &home, SetVarArray &x, IntVarArray &)
Post constraint on x.
Definition dom.cpp:161
virtual bool solution(const SetAssignment &x) const
Test whether x is solution
Definition dom.cpp:103
DomRange(SetRelType srt0, int n)
Create and register test.
Definition dom.cpp:99
Generate all set assignments.
Definition set.hh:142
static std::string str(Gecode::SetRelType srt)
Map set relation to string.
Definition set.hpp:46
SetTest(const std::string &s, int a, const Gecode::IntSet &d, bool r=false, int w=0)
Constructor.
Definition set.hh:304
void rel(Home home, FloatVar x0, FloatRelType frt, FloatVar x1)
Post propagator for .
Definition rel.cpp:68
@ RM_IMP
Implication for reification.
Definition int.hh:877
@ RM_PMI
Inverse implication for reification.
Definition int.hh:884
@ RM_EQV
Equivalence for reification (default)
Definition int.hh:870
SetRelType
Common relation types for sets.
Definition set.hh:649
@ SRT_GQ
Greater or equal ( )
Definition set.hh:658
@ SRT_CMPL
Complement.
Definition set.hh:655
@ SRT_GR
Greater ( )
Definition set.hh:659
@ SRT_LQ
Less or equal ( )
Definition set.hh:656
@ SRT_NQ
Disequality ( )
Definition set.hh:651
@ SRT_LE
Less ( )
Definition set.hh:657
@ SRT_EQ
Equality ( )
Definition set.hh:650
@ SRT_SUP
Superset ( )
Definition set.hh:653
@ SRT_DISJ
Disjoint ( )
Definition set.hh:654
@ SRT_SUB
Subset ( )
Definition set.hh:652
bool subset(I &i, J &j)
Check whether range iterator i is subset of range iterator j.
unsigned int size(I &i)
Size of all ranges of range iterator i.
bool equal(I &i, J &j)
Check whether range iterators i and j are equal.
const int min
Smallest allowed integer in integer set.
Definition set.hh:99
const int max
Largest allowed integer in integer set.
Definition set.hh:97
Gecode toplevel namespace
void dom(Home home, FloatVar x, FloatVal n)
Propagates .
Definition dom.cpp:40
SetExpr inter(const SetVarArgs &)
Intersection of set variables.
Definition set-expr.cpp:696
LinIntExpr cardinality(const SetExpr &)
Cardinality of set expression.
Definition set-expr.cpp:817
Post propagator for SetVar x
Definition set.hh:773
Tests for domain constraints
Definition dom.cpp:43
DomIntRange _domintrange_sup1(SRT_SUP, 1)
DomIntRange _domintrange_nq1(SRT_NQ, 1)
DomInt _domint_nq1(SRT_NQ, 1)
DomRange _domrange_le1(SRT_LE, 1)
DomIntRange _domintrange_sub2(SRT_SUB, 2)
DomInt _domint_gr1(SRT_GR, 1)
DomIntRange _domintrange_eq1(SRT_EQ, 1)
DomDom _domdom_lq1(SRT_LQ, 1)
DomRange _domrange_gr1(SRT_GR, 1)
DomInt _domint_lq1(SRT_LQ, 1)
DomRange _domrange_sup2(SRT_SUP, 2)
DomDom _domdom_eq1(SRT_EQ, 1)
DomDom _domdom_cmpl1(SRT_CMPL, 1)
DomIntRange _domintrange_gq2(SRT_GQ, 2)
DomDom _domdom_gq1(SRT_GQ, 1)
DomIntRange _domintrange_disj1(SRT_DISJ, 1)
DomRange _domrange_disj1(SRT_DISJ, 1)
DomDom _domdom_disj1(SRT_DISJ, 1)
DomIntRange _domintrange_gq1(SRT_GQ, 1)
DomInt _domint_gr2(SRT_GR, 2)
DomDom _domdom_gq2(SRT_GQ, 2)
DomInt _domint_lq2(SRT_LQ, 2)
DomInt _domint_disj2(SRT_DISJ, 2)
DomRange _domrange_gq1(SRT_GQ, 1)
DomIntRange _domintrange_gr1(SRT_GR, 1)
DomRange _domrange_lq2(SRT_LQ, 2)
DomRange _domrange_gq2(SRT_GQ, 2)
DomDom _domdom_nq1(SRT_NQ, 1)
DomRange _domrange_gr2(SRT_GR, 2)
DomRange _domrange_eq1(SRT_EQ, 1)
DomRange _domrange_nq2(SRT_NQ, 2)
DomInt _domint_le2(SRT_LE, 2)
DomInt _domint_sup2(SRT_SUP, 2)
DomIntRange _domintrange_nq2(SRT_NQ, 2)
DomIntRange _domintrange_gr2(SRT_GR, 2)
DomRange _domrange_lq1(SRT_LQ, 1)
DomIntRange _domintrange_sub1(SRT_SUB, 1)
DomRange _domrange_sub1(SRT_SUB, 1)
DomIntRange _domintrange_cmpl2(SRT_CMPL, 2)
DomRange _domrange_cmpl1(SRT_CMPL, 1)
DomInt _domint_eq1(SRT_EQ, 1)
DomIntRange _domintrange_le1(SRT_LE, 1)
DomDom _domdom_gr1(SRT_GR, 1)
DomInt _domint_sup1(SRT_SUP, 1)
DomDom _domdom_le1(SRT_LE, 1)
DomRange _domrange_cmpl2(SRT_CMPL, 2)
DomRange _domrange_disj2(SRT_DISJ, 2)
DomInt _domint_nq2(SRT_NQ, 2)
DomInt _domint_cmpl1(SRT_CMPL, 1)
DomInt _domint_gq1(SRT_GQ, 1)
DomDom _domdom_sub2(SRT_SUB, 2)
DomIntRange _domintrange_lq2(SRT_LQ, 2)
DomDom _domdom_eq2(SRT_EQ, 2)
DomRange _domrange_sup1(SRT_SUP, 1)
DomRange _domrange_nq1(SRT_NQ, 1)
DomDom _domdom_le2(SRT_LE, 2)
DomInt _domint_eq2(SRT_EQ, 2)
DomIntRange _domintrange_lq1(SRT_LQ, 1)
DomRange _domrange_le2(SRT_LE, 2)
CardRange _cr2(2)
DomDom _domdom_sub1(SRT_SUB, 1)
DomDom _domdom_gr2(SRT_GR, 2)
DomDom _domdom_lq2(SRT_LQ, 2)
DomDom _domdom_sup1(SRT_SUP, 1)
DomIntRange _domintrange_disj2(SRT_DISJ, 2)
DomInt _domint_gq2(SRT_GQ, 2)
DomRange _domrange_eq2(SRT_EQ, 2)
DomDom _domdom_nq2(SRT_NQ, 2)
DomInt _domint_disj1(SRT_DISJ, 1)
DomInt _domint_le1(SRT_LE, 1)
DomRange _domrange_sub2(SRT_SUB, 2)
DomInt _domint_sub1(SRT_SUB, 1)
DomIntRange _domintrange_le2(SRT_LE, 2)
DomInt _domint_cmpl2(SRT_CMPL, 2)
DomDom _domdom_disj2(SRT_DISJ, 2)
CardRange _cr1(1)
DomInt _domint_sub2(SRT_SUB, 2)
DomDom _domdom_cmpl2(SRT_CMPL, 2)
DomIntRange _domintrange_eq2(SRT_EQ, 2)
DomIntRange _domintrange_cmpl1(SRT_CMPL, 1)
DomDom _domdom_sup2(SRT_SUP, 2)
DomIntRange _domintrange_sup2(SRT_SUP, 2)
Testing finite sets.
Definition set.cpp:42
General test support.
Definition afc.cpp:39
Region r
Definition region.cpp:65
#define GECODE_NEVER
Assert that this command is never executed.
Definition macros.hpp:56