46 namespace Test {
namespace Set {
51 static_cast<unsigned int>(
pow(static_cast<double>(2.0),
64 static_cast<unsigned int>(
pow(static_cast<double>(2.0),
73 :
n(n0), dsv(new
CountableSet[
n]), ir(_withInt, d0), done(false), lub(d0),
112 for (
int i=0;
i<
n;
i++) {
115 os << icsv << ((i!=n-1) ?
"," :
"}");
122 namespace Test {
namespace Set {
126 :
d(d0), y(*this, i,
d),
127 withInt(i),
r(Gecode::BoolVar(*this, 0, 1),Gecode::
RM_EQV),
128 reified(false), test(t) {
129 using namespace Gecode;
134 dom(*
this,
x[0],_x[0]);
138 olog <<
ind(2) <<
"Initial: x[]=" <<
x;
139 olog <<
" y[]=" <<
y;
146 :
d(d0),
x(*this, n, Gecode::
IntSet::empty,
d),
y(*this, i,
d),
150 olog <<
ind(2) <<
"Initial: x[]=" <<
x;
151 olog <<
" y[]=" <<
y;
158 : Gecode::
Space(share,s),
d(s.
d), withInt(s.withInt),
159 reified(s.reified), test(s.test) {
164 b.
update(*
this, share, sr);
178 olog <<
ind(3) <<
"Posting reified propagator" << std::endl;
182 olog <<
ind(3) <<
"Posting propagator" << std::endl;
189 olog <<
ind(3) <<
"Fixpoint: x[]=" <<
x
190 <<
" y[]=" <<
y << std::endl;
193 <<
" y[]=" <<
y << std::endl;
203 olog <<
ind(4) <<
"x[" << i <<
"] ";
216 olog << is << std::endl;
224 olog <<
ind(4) << cmin <<
" <= #(x[" << i <<
"]) <= " << cmax
233 olog <<
ind(4) <<
"y[" << i <<
"] ";
242 olog <<
" " << n << std::endl;
252 olog <<
ind(4) <<
"b = " << n << std::endl;
258 for (
int i=a.
size();
i--; ) {
285 using namespace Gecode;
292 for (
int j=0; j<
v; j++, ++diffV) {}
298 using namespace Gecode;
305 for (
int j=0; j<
v; j++, ++interV) {}
315 olog <<
ind(3) <<
"Testing fixpoint on copy" << std::endl;
318 delete c;
return false;
322 if (
x[
i].glbSize() != c->
x[
i].glbSize() ||
323 x[
i].lubSize() != c->
x[
i].lubSize() ||
324 x[
i].cardMin() != c->
x[
i].cardMin() ||
325 x[
i].cardMax() != c->
x[
i].cardMax()) {
331 delete c;
return false;
334 delete c;
return false;
337 olog <<
ind(3) <<
"Finished testing fixpoint on copy" << std::endl;
344 using namespace Gecode;
345 bool setsAssigned =
true;
346 for (
int j=
x.
size(); j--; )
348 setsAssigned =
false;
351 bool intsAssigned =
true;
352 for (
int j=
y.
size(); j--; )
354 intsAssigned =
false;
362 }
else if (setsAssigned) {
368 if (setsAssigned ||
i>=
x.
size()) {
379 if (a.
ints()[
i] <
y[
i].max()) {
382 assert((v > a.
ints()[
i]) && (v <=
y[
i].
max()));
387 if (a.
ints()[
i] >
y[
i].min()) {
390 assert((v < a.
ints()[
i]) && (v >=
y[
i].
min()));
399 if (it.
width() > skip) {
401 if (v == a.
ints()[
i]) {
402 if (it.
width() == 1) {
404 }
else if (v < it.
max()) {
449 if (
x[i].cardMin() < aisize) {
450 unsigned int newc =
x[
i].cardMin() + 1 +
452 assert( newc >
x[i].cardMin() );
453 assert( newc <= aisize );
458 if (
x[i].cardMax() > aisize) {
459 unsigned int newc =
x[
i].cardMax() - 1 -
461 assert( newc <
x[i].cardMax() );
462 assert( newc >= aisize );
480 #define CHECK_TEST(T,M) \
482 olog << ind(3) << "Check: " << (M) << std::endl; \
484 problem = (M); delete s; goto failed; \
488 #define START_TEST(T) \
491 olog << ind(2) << "Testing: " << (T) << std::endl; \
497 using namespace Gecode;
498 const char*
test =
"NONE";
499 const char* problem =
"NONE";
504 bool is_sol = solution(
a);
506 olog <<
ind(1) <<
"Assignment: " <<
a
507 << (is_sol ?
" (solution)" :
" (no solution)")
518 olog <<
ind(3) <<
"No copy" << std::endl;
524 olog <<
ind(3) <<
"Unshared copy" << std::endl;
533 olog <<
ind(3) <<
"Unshared copy" << std::endl;
540 default: assert(
false);
570 problem =
"No fixpoint";
585 START_TEST(
"Assignment reified (rewrite after post, <=>)");
595 START_TEST(
"Assignment reified (rewrite after post, =>)");
605 START_TEST(
"Assignment reified (rewrite after post, <=)");
616 START_TEST(
"Assignment reified (rewrite failure, <=>)");
625 START_TEST(
"Assignment reified (rewrite failure, =>)");
639 START_TEST(
"Assignment reified (rewrite failure, <=)");
652 START_TEST(
"Assignment reified (immediate rewrite, <=>)");
662 START_TEST(
"Assignment reified (immediate rewrite, =>)");
672 START_TEST(
"Assignment reified (immediate rewrite, <=)");
682 START_TEST(
"Assignment reified (immediate failure, <=>)");
691 START_TEST(
"Assignment reified (immediate failure, =>)");
705 START_TEST(
"Assignment reified (immediate failure, <=)");
719 START_TEST(
"Assignment reified (before posting, <=>)");
734 START_TEST(
"Assignment reified (before posting, =>)");
749 START_TEST(
"Assignment reified (before posting, <=)");
764 START_TEST(
"Assignment reified (after posting, <=>)");
779 START_TEST(
"Assignment reified (after posting, =>)");
794 START_TEST(
"Assignment reified (after posting, <=)");
816 problem =
"No fixpoint";
837 problem =
"No fixpoint";
858 problem =
"No fixpoint";
879 olog <<
"FAILURE" << std::endl
880 <<
ind(1) <<
"Test: " <<
test << std::endl
881 <<
ind(1) <<
"Problem: " << problem << std::endl;
883 olog <<
ind(1) <<
"Assignment: " <<
a << std::endl;