46 namespace Test {
namespace Float {
54 using namespace Gecode;
71 using namespace Gecode;
78 if (curPb->extendAssignement(*
this))
return;
93 for (
int i =
n;
i--; )
104 for (
int i=0;
i<
n;
i++)
105 os <<
"[" << a[
i].
min() <<
"," << a[
i].max() <<
"]" << ((
i!=n-1) ?
"," :
"}");
109 namespace Test {
namespace Float {
112 using namespace Gecode;
113 using namespace Gecode::Float;
129 using namespace Gecode;
130 using namespace Gecode::Float;
149 x(*this,n,Gecode::Float::Limits::
min,Gecode::Float::Limits::
max),
159 olog <<
ind(2) <<
"Initial: x[]=" <<
x
165 :
d(d0),
step(s),
x(*this,n,
d.
min(),
d.
max()), test(t), reified(true) {
169 olog <<
ind(2) <<
"Initial: x[]=" <<
x
175 : Gecode::
Space(share,s),
d(s.
d),
step(s.
step), test(s.test), reified(s.reified) {
179 b.
update(*
this, share, sr);
205 if ((
x[
i].
min() != a[
i].
min()) || (
x[
i].max() != a[
i].max()))
215 olog <<
ind(3) <<
"Posting reified propagator" << std::endl;
219 olog <<
ind(3) <<
"Posting propagator" << std::endl;
226 olog <<
ind(3) <<
"Fixpoint: " <<
x;
228 olog << std::endl <<
ind(3) <<
" --> " << x << std::endl;
238 olog <<
ind(4) <<
"x[" << i <<
"] ";
247 olog <<
" [" << n.
min() <<
"," << n.
max() <<
"]" << std::endl;
257 olog <<
ind(4) <<
"b = " << n << std::endl;
263 using namespace Gecode;
266 for (
int j=a.
size(); j--; )
268 if ((
x[j].
min() == a[j].
max()) || (
x[j].max() == a[j].min()))
281 using namespace Gecode;
296 using namespace Gecode;
297 using namespace Gecode::Float;
301 for (
int j=
x.
size(); j--; ) {
305 if (cutDirections[
i]) {
313 FloatNum m =
r.div_down(
r.add_down(
x[i].min(),
x[
i].max()),2);
325 using namespace Gecode;
329 assert((v >=
x[i].
min()) && (v <=
x[i].
max()));
334 assert((v <=
x[i].
max()) && (v >=
x[i].
min()));
341 using namespace Gecode;
355 i = (i+1) %
x.
size();
361 assert((v >= a[i].
max()) && (v <=
x[i].
max()));
368 assert((v <= a[i].
min()) && (v >=
x[i].
min()));
378 olog <<
ind(3) <<
"Testing fixpoint on copy" << std::endl;
381 delete c;
return false;
383 for (
int i=
x.
size(); i--; )
385 delete c;
return false;
388 delete c;
return false;
391 olog <<
ind(3) <<
"Finished testing fixpoint on copy" << std::endl;
404 switch (assigmentType) {
425 if (!testsubsumed)
return true;
432 #define CHECK_TEST(T,M) \
434 olog << ind(3) << "Check: " << (M) << std::endl; \
436 problem = (M); delete s; goto failed; \
440 #define START_TEST(T) \
443 olog << ind(2) << "Testing: " << (T) << std::endl; \
458 using namespace Gecode;
459 const char*
test =
"NONE";
460 const char* problem =
"NONE";
468 post(*search_s,search_s->x);
476 olog <<
ind(1) <<
"Assignment: " <<
a;
492 olog <<
ind(3) <<
"No copy" << std::endl;
498 olog <<
ind(3) <<
"Unshared copy" << std::endl;
507 olog <<
ind(3) <<
"Shared copy" << std::endl;
514 default: assert(
false);
525 START_TEST(
"Partial assignment (after posting)");
553 START_TEST(
"Partial assignment (before posting)");
573 if (!s->
prune(
a,testfix)) {
574 problem =
"No fixpoint";
590 START_TEST(
"Assignment reified (rewrite after post, <=>)");
600 START_TEST(
"Assignment reified (rewrite after post, =>)");
610 START_TEST(
"Assignment reified (rewrite after post, <=)");
620 START_TEST(
"Assignment reified (immediate rewrite, <=>)");
630 START_TEST(
"Assignment reified (immediate rewrite, =>)");
640 START_TEST(
"Assignment reified (immediate rewrite, <=)");
650 START_TEST(
"Assignment reified (before posting, <=>)");
666 START_TEST(
"Assignment reified (before posting, =>)");
680 START_TEST(
"Assignment reified (before posting, <=)");
696 START_TEST(
"Assignment reified (after posting, <=>)");
712 START_TEST(
"Assignment reified (after posting, =>)");
726 START_TEST(
"Assignment reified (after posting, <=)");
747 if (!s->
prune(
a,testfix)) {
748 problem =
"No fixpoint";
770 if (!s->
prune(
a,testfix)) {
771 problem =
"No fixpoint";
791 if (!s->
prune(
a,testfix)) {
792 problem =
"No fixpoint";
810 if (!search_s->failed()) {
820 for (
int i=
a.size();
i--; ) {
833 if (!search_s->failed()) {
840 if (e_s->next() != NULL) {
841 problem =
"Excess solutions";
853 olog <<
"FAILURE" << std::endl
854 <<
ind(1) <<
"Test: " <<
test << std::endl
855 <<
ind(1) <<
"Problem: " << problem << std::endl;
857 olog <<
ind(1) <<
"Assignment: " <<
a << std::endl;