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 {
151 test(t), reified(false) {
160 olog <<
ind(2) <<
"Initial: x[]=" <<
x 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...
#define CHECK_TEST(T, M)
Check the test result and handle failed test.
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.
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.
virtual T * next(void)
Return next solution (NULL, if none exists or search has been stopped)
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.
#define START_TEST(T)
Start new test.
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.
struct Gecode::@519::NNF::@60::@62 a
For atomic nodes.
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.
union Gecode::@519::NNF::@60 u
Union depending on nodetype t.
Reify eqv(BoolVar x)
Use equivalence for reification.
Gecode::Reify r
Reification information.
Floating point rounding policy.
Boolean integer variables.
Gecode::FloatVarArray x
Variables to be tested.
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.
struct Gecode::@519::NNF::@60::@61 b
For binary nodes (and, or, eqv)
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.
struct Gecode::Space::@55::@57 c
Data available only during copying.
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.
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: )
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.
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)
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].
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.