Generated on Tue Feb 11 2025 17:33:26 for Gecode by doxygen 1.12.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) {}
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 }
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 }
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) {}
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 }
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 }
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) {}
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 }
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 }
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) {}
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 }
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 }
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) {}
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 }
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
struct Gecode::@603::NNF::@65::@66 b
For binary nodes (and, or, eqv)
union Gecode::@603::NNF::@65 u
Union depending on nodetype t.
int n
Number of negative literals for node type.
struct Gecode::@603::NNF::@65::@67 a
For atomic nodes.
Node * x
Pointer to corresponding Boolean expression node.
int size(void) const
Return size of array (number of elements)
Definition array.hpp:1607
Range iterator for integer sets.
Definition int.hh:292
Integer sets.
Definition int.hh:174
Integer variable array.
Definition int.hh:763
Range iterator for computing set difference.
Range iterator for computing intersection (binary)
Range iterator for singleton range.
Range iterator for computing union (binary)
Reification specification.
Definition int.hh:876
Set variable array
Definition set.hh:570
A complement iterator spezialized for the BndSet limits.
Definition var-imp.hpp:293
Computation spaces.
Definition core.hpp:1742
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
Base class for tests with set constraints
Definition set.hh:273
static std::string str(Gecode::SetRelType srt)
Map set relation to string.
Definition set.hpp:46
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:862
@ RM_PMI
Inverse implication for reification.
Definition int.hh:869
@ RM_EQV
Equivalence for reification (default)
Definition int.hh:855
SetRelType
Common relation types for sets.
Definition set.hh:643
@ SRT_GQ
Greater or equal ( )
Definition set.hh:652
@ SRT_CMPL
Complement.
Definition set.hh:649
@ SRT_GR
Greater ( )
Definition set.hh:653
@ SRT_LQ
Less or equal ( )
Definition set.hh:650
@ SRT_NQ
Disequality ( )
Definition set.hh:645
@ SRT_LE
Less ( )
Definition set.hh:651
@ SRT_EQ
Equality ( )
Definition set.hh:644
@ SRT_SUP
Superset ( )
Definition set.hh:647
@ SRT_DISJ
Disjoint ( )
Definition set.hh:648
@ SRT_SUB
Subset ( )
Definition set.hh:646
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
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)
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