47 namespace Test {
namespace Float {
79 if (curPb->extendAssignement(*
this))
return;
80 if ((
dsv[i].
max() >=
d.
max()) && (i == 0))
return;
94 for (
int i =
n;
i--; )
105 for (
int i=0;
i<
n;
i++)
106 os <<
"[" << a[
i].
min() <<
"," << a[
i].max() <<
"]" << ((
i!=n-1) ?
"," :
"}");
110 namespace Test {
namespace Float {
160 olog <<
ind(2) <<
"Initial: x[]=" <<
x
166 :
d(d0),
step(s),
x(*this,n,
d.
min(),
d.
max()), test(t), reified(true) {
170 olog <<
ind(2) <<
"Initial: x[]=" <<
x
180 b.
update(*
this, share, sr);
206 if ((
x[
i].
min() < a[
i].
min()) && (
x[
i].max() > a[
i].max()))
216 olog <<
ind(3) <<
"Posting reified propagator" << std::endl;
220 olog <<
ind(3) <<
"Posting propagator" << std::endl;
227 olog <<
ind(3) <<
"Fixpoint: " <<
x;
229 olog << std::endl <<
ind(3) <<
" --> " << x << std::endl;
239 olog <<
ind(4) <<
"x[" << i <<
"] ";
248 olog <<
" [" << n.
min() <<
"," << n.
max() <<
"]" << std::endl;
258 olog <<
ind(4) <<
"b = " << n << std::endl;
267 for (
int j=a.
size(); j--; )
269 if ((
x[j].
min() == a[j].
max()) || (
x[j].max() == a[j].min()))
286 i = (i+1) %
x.
size();
302 for (
int j=
x.
size(); j--; ) {
306 if (cutDirections[i]) {
330 assert((v >=
x[i].
min()) && (v <=
x[i].
max()));
335 assert((v <=
x[i].
max()) && (v >=
x[i].
min()));
346 i = (i+1) %
x.
size();
356 i = (i+1) %
x.
size();
364 assert((v >= a[i].
max()) && (v <=
x[i].
max()));
373 assert((v <= a[i].
min()) && (v >=
x[i].
min()));
383 olog <<
ind(3) <<
"Testing fixpoint on copy" << std::endl;
386 delete c;
return false;
388 for (
int i=
x.
size(); i--; )
390 delete c;
return false;
393 delete c;
return false;
396 olog <<
ind(3) <<
"Finished testing fixpoint on copy" << std::endl;
409 switch (assigmentType) {
430 if (!testsubsumed)
return true;
437 #define CHECK_TEST(T,M) \
439 olog << ind(3) << "Check: " << (M) << std::endl; \
441 problem = (M); delete s; goto failed; \
445 #define START_TEST(T) \
448 olog << ind(2) << "Testing: " << (T) << std::endl; \
464 const char*
test =
"NONE";
465 const char* problem =
"NONE";
473 post(*search_s,search_s->
x);
481 olog <<
ind(1) <<
"Assignment: " <<
a;
497 olog <<
ind(3) <<
"No copy" << std::endl;
503 olog <<
ind(3) <<
"Unshared copy" << std::endl;
512 olog <<
ind(3) <<
"Shared copy" << std::endl;
519 default: assert(
false);
530 START_TEST(
"Partial assignment (after posting)");
558 START_TEST(
"Partial assignment (before posting)");
578 if (!s->
prune(a,testfix)) {
579 problem =
"No fixpoint";
595 START_TEST(
"Assignment reified (rewrite after post, <=>)");
605 START_TEST(
"Assignment reified (rewrite after post, =>)");
615 START_TEST(
"Assignment reified (rewrite after post, <=)");
625 START_TEST(
"Assignment reified (immediate rewrite, <=>)");
635 START_TEST(
"Assignment reified (immediate rewrite, =>)");
645 START_TEST(
"Assignment reified (immediate rewrite, <=)");
655 START_TEST(
"Assignment reified (before posting, <=>)");
671 START_TEST(
"Assignment reified (before posting, =>)");
685 START_TEST(
"Assignment reified (before posting, <=)");
701 START_TEST(
"Assignment reified (after posting, <=>)");
717 START_TEST(
"Assignment reified (after posting, =>)");
731 START_TEST(
"Assignment reified (after posting, <=)");
752 if (!s->
prune(a,testfix)) {
753 problem =
"No fixpoint";
775 if (!s->
prune(a,testfix)) {
776 problem =
"No fixpoint";
796 if (!s->
prune(a,testfix)) {
797 problem =
"No fixpoint";
815 if (!search_s->failed()) {
825 for (
int i=a.
size();
i--; ) {
838 if (!search_s->failed()) {
845 if (e_s->
next() != NULL) {
846 problem =
"Excess solutions";
858 olog <<
"FAILURE" << std::endl
859 <<
ind(1) <<
"Test: " << test << std::endl
860 <<
ind(1) <<
"Problem: " << problem << std::endl;
862 olog <<
ind(1) <<
"Assignment: " << a << std::endl;
void prune(int i)
Prune some random values from variable i.
bool subsumed(const TestSpace &ts) const
Test if ts is subsumed or not (i.e. if there is no more propagator unless the assignment is an extend...
const Gecode::FloatNum step
Gecode::FloatNum step
Step for going to next solution.
FloatNum add_down(FloatNum x, FloatNum y)
Return lower bound of x plus y (domain: )
FloatNum div_up(FloatNum x, FloatNum y)
Return upper bound of x divided y (domain: )
FloatNum mul_down(FloatNum x, FloatNum y)
Return lower bound of x times y (domain: )
Inverse implication for reification.
ReifyMode mode(void) const
Return reification mode.
Simple class for describing identation.
const FloatNum max
Largest allowed float value.
#define START_TEST(T)
Start new test.
BoolVar var(void) const
Return Boolean control variable.
void update(Space &home, bool share, VarImpVar< VarImp > &y)
Update this variable to be a clone of variable y.
static Gecode::Support::RandomGenerator rand
Random number generator.
Space * clone(bool share=true, CloneStatistics &stat=unused_clone) const
Clone space.
Gecode::FloatNum step
Step for next assignment.
void prune(void)
Prune some random values for some random variable.
bool overlap(const FloatVal &x, const FloatVal &y)
unsigned int size(void) const
Return size (cardinality) of domain.
void dom(Home home, FloatVar x, FloatVal n)
Propagates .
Gecode::FloatNum randFValDown(Gecode::FloatNum l, Gecode::FloatNum u)
int n
Number of variables.
void post(void)
Post propagator.
void bound(void)
Assing a random variable to a random bound.
virtual void operator++(void)
Move to next assignment.
FloatVarBranch FLOAT_VAR_NONE(void)
Select first unassigned variable.
int val(void) const
Return assigned value.
Test * test
The test currently run.
void update(Space &, bool share, VarArray< Var > &a)
Update array to be a clone of array a.
Reify imp(BoolVar x)
Use implication for reification.
unsigned int propagators(void) const
Return number of propagators.
const FloatNum min
Smallest allowed float value.
Gecode::IntArgs i(4, 1, 2, 3, 4)
Gecode::FloatNum randFValUp(Gecode::FloatNum l, Gecode::FloatNum u)
int n
Number of negative literals for node type.
Generate all assignments except the last variable and complete it to get a solution.
std::ostream & operator<<(std::ostream &os, const Test::Float::Assignment &a)
TestSpace(int n, Gecode::FloatVal &d, Gecode::FloatNum s, Test *t)
Create test space.
FloatRelType
Relation types for floats.
static bool fixpoint(void)
Throw a coin whether to compute a fixpoint.
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.
unsigned int size(I &i)
Size of all ranges of range iterator i.
Reification specification.
virtual bool ignore(const Assignment &a) const
Whether to ignore assignment for reification.
virtual void operator++(void)
Move to next assignment.
bool log
Whether to log the tests.
virtual void post(Gecode::Space &home, Gecode::FloatVarArray &x)=0
Post constraint.
FloatValBranch FLOAT_VAL_SPLIT_MIN(void)
Select values not greater than mean of smallest and largest value.
Generate random selection of assignments.
Reify eqv(BoolVar x)
Use equivalence for reification.
Gecode::Reify r
Reification information.
Floating point rounding policy.
struct Gecode::Space::@52::@54 c
Data available only during copying.
Boolean integer variables.
Gecode::FloatVarArray x
Variables to be tested.
union Gecode::@518::NNF::@57 u
Union depending on nodetype t.
Gecode::FloatVal d
Initial domain.
virtual bool extendAssignement(Assignment &a) const
Complete the current assignment to get a feasible one (which satisfies all constraint). If such an assignment is computed, it returns true, false otherwise.
ExecStatus subsumed(Space &home, Propagator &p, TaskArray< Task > &t)
Check tasks t for subsumption.
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 ...
Node * x
Pointer to corresponding Boolean expression node.
FloatNum sub_down(FloatNum x, FloatNum y)
Return lower bound of x minus y (domain: )
void ignore(Actor &a, ActorProperty p, bool duplicate=false)
Ignore actor property.
Gecode::FloatVal d
Domain for each variable.
FloatNum div_down(FloatNum x, FloatNum y)
Return lower bound of x divided by y (domain: )
virtual Assignment * assignment(void) const
Create assignment.
MaybeType
Type for comparisons and solutions.
T * next(void)
Return next solution (NULL, if none exists or search has been stopped)
std::ostringstream olog
Stream used for logging.
void rel(Home home, FloatVar x0, FloatRelType frt, FloatVal n)
Propagates .
bool matchAssignment(const Assignment &a) const
Test whether all variables match assignment a.
Space for executing tests.
SpaceStatus status(StatusStatistics &stat=unused_status)
Query space status.
int size(void) const
Return number of variables.
bool assigned(void) const
Test whether view is assigned.
FloatNum sub_up(FloatNum x, FloatNum y)
Return upper bound of x minus y (domain: )
virtual bool run(void)
Perform test.
void threads(double n)
Set number of parallel threads.
FloatNum add_up(FloatNum x, FloatNum y)
Return upper bound of x plus y (domain: )
struct Gecode::@518::NNF::@57::@58 b
For binary nodes (and, or, eqv)
Gecode toplevel namespace
Implication for reification.
bool failed(void)
Compute a fixpoint and check for failure.
bool assigned(void) const
Test if all variables are assigned.
BrancherHandle branch(Home home, const FloatVarArgs &x, FloatVarBranch vars, FloatValBranch vals, FloatBranchFilter bf, FloatVarValPrint vvp)
Branch over x with variable selection vars and value selection vals.
virtual void operator++(void)
Move to next assignment.
Gecode::FloatVal * dsv
Iterator for each variable.
bool reified
Does the constraint also exist as reified constraint.
friend FloatVal max(const FloatVal &x, const FloatVal &y)
Generate all assignments.
friend FloatVal min(const FloatVal &x, const FloatVal &y)
int size(void) const
Return size of array (number of elements)
#define CHECK_TEST(T, M)
Check the test result and handle failed test.
double FloatNum
Floating point number base type.
ReifyMode
Mode for reification.
#define GECODE_NEVER
Assert that this command is never executed.
Gecode::FloatNum cut(int *cutDirections)
Cut the bigger variable to an half sized interval. It returns the new size of the cut interval...
void rel(int i, Gecode::FloatRelType frt, Gecode::FloatVal n)
Perform integer tell operation on x[i].
struct Gecode::@518::NNF::@57::@59 a
For atomic nodes.
Depth-first search engine.
Gecode::FloatNum step
Step for going to next solution.
bool reified
Whether the test is for a reified propagator.
virtual Gecode::Space * copy(bool share)
Copy space during cloning.
Base class for assignments
Equivalence for reification (default)
Reify pmi(BoolVar x)
Use reverse implication for reification.