43namespace Test {
namespace Float {
56 if ((
dsv[i].max() <
d.
max()) || (i == 0))
74 if ((
dsv[i].max() <
d.
max()) || (i == 0)) {
76 if ((
dsv[i].max() >=
d.
max()) && (i == 0))
return;
90 for (
int i =
n; i--; )
101 for (
int i=0; i<
n; i++)
102 os <<
"[" <<
a[i].min() <<
"," <<
a[i].max() <<
"]" << ((i!=
n-1) ?
"," :
"}");
106namespace Test {
namespace Float {
117 Base::rand(
static_cast<unsigned int>(Int::Limits::max)),
118 static_cast<FloatNum>(Int::Limits::max)
134 Base::rand(
static_cast<unsigned int>(Int::Limits::max)),
135 static_cast<FloatNum>(Int::Limits::max)
147 test(
t), reified(false) {
156 olog <<
ind(2) <<
"Initial: x[]=" <<
x
162 : d(d0), step(s),
x(*this,
n,d.min(),d.max()), test(
t), reified(true) {
166 olog <<
ind(2) <<
"Initial: x[]=" <<
x
172 :
Gecode::
Space(s), d(s.d), step(s.step), test(s.test), reified(s.reified) {
198 for (
int i =
x.
size(); i--; )
204 for (
int i=
x.
size(); i--; )
212 for (
int i=
x.
size(); i--; )
213 if ((
x[i].min() <
a[i].min()) && (
x[i].max() >
a[i].max()))
223 olog <<
ind(3) <<
"Posting reified propagator" << std::endl;
227 olog <<
ind(3) <<
"Posting propagator" << std::endl;
234 olog <<
ind(3) <<
"Fixpoint: " <<
x;
236 olog << std::endl <<
ind(3) <<
" --> " <<
x << std::endl;
246 olog <<
ind(4) <<
"x[" << i <<
"] ";
255 olog <<
" [" <<
n.min() <<
"," <<
n.max() <<
"]" << std::endl;
265 olog <<
ind(4) <<
"b = " <<
n << std::endl;
272 int i = skip ?
static_cast<int>(
Base::rand(
a.size())) : -1;
274 for (
int j=
a.size(); j--; )
276 if ((
x[j].min() ==
a[j].max()) || (
x[j].max() ==
a[j].min()))
281 rel(j, FRT_EQ,
a[j]);
293 i = (i+1) %
x.
size();
297 rel(i, FRT_LQ, nextafter(
x[i].min(),
x[i].max()));
299 rel(i, FRT_GQ, nextafter(
x[i].max(),
x[i].min()));
309 for (
int j=
x.
size(); j--; ) {
310 if (!
x[j].
assigned() && (
x[j].size() >
x[i].size())) i = j;
313 if (cutDirections[i]) {
314 FloatNum m =
r.div_up(
r.add_up(
x[i].min(),
x[i].max()),2);
321 FloatNum m =
r.div_down(
r.add_down(
x[i].min(),
x[i].max()),2);
337 assert((v >=
x[i].min()) && (v <=
x[i].max()));
342 assert((v <=
x[i].max()) && (v >=
x[i].min()));
353 i = (i+1) %
x.
size();
363 i = (i+1) %
x.
size();
367 if (
a[i].max() <
x[i].max()) {
371 assert((v >=
a[i].max()) && (v <=
x[i].max()));
376 if (
a[i].min() >
x[i].min()) {
380 assert((v <=
a[i].min()) && (v >=
x[i].min()));
390 olog <<
ind(3) <<
"Testing fixpoint on copy" << std::endl;
393 delete c;
return false;
395 for (
int i=
x.
size(); i--; )
396 if (
x[i].size() !=
c->x[i].size()) {
397 delete c;
return false;
400 delete c;
return false;
403 olog <<
ind(3) <<
"Finished testing fixpoint on copy" << std::endl;
421 switch (assigmentType) {
442 if (!testsubsumed)
return true;
443 if (
const_cast<TestSpace&
>(ts).propagators() == 0)
return true;
449#define CHECK_TEST(T,M) \
451 olog << ind(3) << "Check: " << (M) << std::endl; \
453 problem = (M); delete s; goto failed; \
457#define START_TEST(T) \
460 olog << ind(2) << "Testing: " << (T) << std::endl; \
476 const char* test =
"NONE";
477 const char* problem =
"NONE";
485 post(*search_s,search_s->
x);
486 branch(*search_s,search_s->
x,FLOAT_VAR_NONE(),FLOAT_VAL_SPLIT_MIN());
493 olog <<
ind(1) <<
"Assignment: " <<
a;
506 switch (Base::rand(2)) {
509 olog <<
ind(3) <<
"No copy" << std::endl;
515 olog <<
ind(3) <<
"Copy" << std::endl;
516 if (s->
status() != SS_FAILED) {
522 default: assert(
false);
533 START_TEST(
"Partial assignment (after posting)");
548 START_TEST(
"Assignment (after posting, disable)");
563 START_TEST(
"Partial assignment (after posting, disable)");
593 START_TEST(
"Partial assignment (before posting)");
613 if (!s->
prune(
a,testfix)) {
614 problem =
"No fixpoint";
627 if (reified && !ignore(
a) && (sol !=
MT_MAYBE)) {
629 START_TEST(
"Assignment reified (rewrite after post, <=>)");
639 START_TEST(
"Assignment reified (rewrite after post, =>)");
649 START_TEST(
"Assignment reified (rewrite after post, <=)");
659 START_TEST(
"Assignment reified (immediate rewrite, <=>)");
669 START_TEST(
"Assignment reified (immediate rewrite, =>)");
679 START_TEST(
"Assignment reified (immediate rewrite, <=)");
689 START_TEST(
"Assignment reified (before posting, <=>)");
705 START_TEST(
"Assignment reified (before posting, =>)");
719 START_TEST(
"Assignment reified (before posting, <=)");
735 START_TEST(
"Assignment reified (after posting, <=>)");
751 START_TEST(
"Assignment reified (after posting, =>)");
765 START_TEST(
"Assignment reified (after posting, <=)");
786 if (!s->
prune(
a,testfix)) {
787 problem =
"No fixpoint";
809 if (!s->
prune(
a,testfix)) {
810 problem =
"No fixpoint";
830 if (!s->
prune(
a,testfix)) {
831 problem =
"No fixpoint";
849 if (!search_s->
failed()) {
859 for (
int i=
a.
size(); i--; ) {
872 if (!search_s->
failed()) {
879 if (e_s->
next() != NULL) {
880 problem =
"Excess solutions";
892 olog <<
"FAILURE" << std::endl
893 <<
ind(1) <<
"Test: " << test << std::endl
894 <<
ind(1) <<
"Problem: " << problem << std::endl;
896 olog <<
ind(1) <<
"Assignment: " <<
a << std::endl;
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)
Boolean integer variables.
unsigned int size(void) const
Return size (cardinality) of domain.
int val(void) const
Return assigned value.
Depth-first search engine.
friend FloatVal max(const FloatVal &x, const FloatVal &y)
friend FloatVal min(const FloatVal &x, const FloatVal &y)
FloatNum size(void) const
Return size of float value (distance between maximum and minimum)
Floating point rounding policy.
void threads(double n)
Set number of parallel threads.
unsigned int size(Space &home) const
Return number of propagators in a group.
void disable(Space &home)
Disable all propagators in a group.
void enable(Space &home, bool s=true)
Enable all propagators in a group.
static PropagatorGroup all
Group of all propagators.
Reification specification.
BoolVar var(void) const
Return Boolean control variable.
ReifyMode mode(void) const
Return reification mode.
virtual T * next(void)
Return next solution (NULL, if none exists or search has been stopped)
struct Gecode::Space::@61::@63 c
Data available only during copying.
bool assigned(void) const
Test if all variables are assigned.
int size(void) const
Return size of array (number of elements)
void update(Space &home, VarArray< Var > &a)
Update array to be a clone of array a.
void update(Space &home, VarImpVar< VarImp > &y)
Update this variable to be a clone of variable y.
bool assigned(void) const
Test whether view is assigned.
static Gecode::Support::RandomGenerator rand
Random number generator.
static bool fixpoint(void)
Throw a coin whether to compute a fixpoint.
Base class for assignments
int n
Number of variables.
Gecode::FloatVal d
Domain for each variable.
Generate all assignments.
virtual void operator++(void)
Move to next assignment.
Gecode::FloatNum step
Step for next assignment.
Gecode::FloatVal * dsv
Iterator for each variable.
Generate all assignments except the last variable and complete it to get a solution.
Gecode::FloatVal * dsv
Iterator for each variable.
virtual void operator++(void)
Move to next assignment.
Gecode::FloatNum step
Step for next assignment.
const Test * curPb
Current problem used to complete assignment.
Generate random selection of assignments.
Gecode::FloatNum randval(void)
Gecode::FloatVal * vals
The current values for the variables.
virtual void operator++(void)
Move to next assignment.
int a
How many assigments still to be generated Generate new value according to domain.
Space for executing tests.
Gecode::FloatVarArray x
Variables to be tested.
void prune(void)
Prune some random values for some random variable.
Gecode::FloatNum cut(int *cutDirections)
Cut the bigger variable to an half sized interval. It returns the new size of the cut interval....
bool matchAssignment(const Assignment &a) const
Test whether all variables match assignment a.
Gecode::Reify r
Reification information.
void bound(void)
Assing a random variable to a random bound.
unsigned int propagators(void)
Return the number of propagators.
void prune(int i)
Prune some random values from variable i.
void disable(void)
Disable propagators in space and compute fixpoint (make all idle)
Gecode::FloatVal d
Initial domain.
void post(void)
Post propagator.
TestSpace(int n, Gecode::FloatVal &d, Gecode::FloatNum s, Test *t)
Create test space.
Test * test
The test currently run.
bool reified
Whether the test is for a reified propagator.
void enable(void)
Enable propagators in space.
bool failed(void)
Compute a fixpoint and check for failure.
bool assigned(void) const
Test whether all variables are assigned.
virtual void dropUntil(const Assignment &a)
Add constraints to skip solutions to the a assignment.
void rel(int i, Gecode::FloatRelType frt, Gecode::FloatVal n)
Perform integer tell operation on x[i].
void assign(const Assignment &a, MaybeType &sol, bool skip=false)
Assign all (or all but one, if skip is true) variables to values in a If assignment of a variable is ...
virtual Gecode::Space * copy(void)
Copy space during cloning.
virtual bool extendAssignement(Assignment &a) const
Complete the current assignment to get a feasible one (which satisfies all constraint)....
virtual void post(Gecode::Space &home, Gecode::FloatVarArray &x)=0
Post constraint.
virtual Assignment * assignment(void) const
Create assignment.
bool log
Whether to log the tests.
Simple class for describing identation.
void rel(Home home, FloatVar x0, FloatRelType frt, FloatVar x1)
Post propagator for .
double FloatNum
Floating point number base type.
FloatRelType
Relation types for floats.
@ FRT_LQ
Less or equal ( )
@ FRT_GQ
Greater or equal ( )
ReifyMode
Mode for reification.
@ RM_EQV
Equivalence for reification (default)
SpaceStatus status(StatusStatistics &stat=unused_status)
Query space status.
Space * clone(CloneStatistics &stat=unused_clone) const
Clone space.
@ SS_FAILED
Space is failed
bool overlap(const FloatVal &x, const FloatVal &y)
Gecode toplevel namespace
void dom(Home home, FloatVar x, FloatVal n)
Propagates .
Gecode::FloatNum randFValDown(Gecode::FloatNum l, Gecode::FloatNum u)
MaybeType
Type for comparisons and solutions.
Gecode::FloatNum randFValUp(Gecode::FloatNum l, Gecode::FloatNum u)
std::ostringstream olog
Stream used for logging.
#define GECODE_NEVER
Assert that this command is never executed.
#define START_TEST(T)
Start new test.
#define CHECK_TEST(T, M)
Check the test result and handle failed test.
std::ostream & operator<<(std::ostream &os, const Test::Float::Assignment &a)