Go to the documentation of this file.
40 namespace Test {
namespace Int {
52 if (
dsv[
i]() || (
i == 0))
64 for (
int i =
n;
i--; )
73 for (
int i=
_n1;
i--; )
84 for (
int i=0;
i<
n;
i++)
85 os <<
a[
i] << ((
i!=
n-1) ?
"," :
"}");
89 namespace Test {
namespace Int {
93 test(
t), reified(false) {
102 olog <<
ind(2) <<
"Initial: x[]=" <<
x
109 test(
t), reified(true) {
118 olog <<
ind(2) <<
"Initial: x[]=" <<
x
119 <<
" b=" <<
r.
var() << std::endl;
123 :
Gecode::Space(s),
d(s.
d), test(s.test), reified(s.reified) {
149 olog <<
ind(3) <<
"Posting reified propagator" << std::endl;
153 olog <<
ind(3) <<
"Posting propagator" << std::endl;
160 olog <<
ind(3) <<
"Fixpoint: " <<
x;
162 olog << std::endl <<
ind(3) <<
" --> " <<
x << std::endl;
191 <
unsigned int>(
x[
i].
max()-
a[
i])));
200 <
unsigned int>(
a[
i]-
x[
i].
min())));
211 if (it.
width() > skip) {
212 v = it.
min() + static_cast<int>(skip);
214 if (it.
width() == 1) {
216 }
else if (
v < it.
max()) {
224 skip -= it.
width(); ++it;
235 olog <<
ind(4) <<
"x[" <<
i <<
"] ";
244 olog <<
" " <<
n << std::endl;
254 olog <<
ind(4) <<
"b = " <<
n << std::endl;
262 static_cast<int>(
Base::rand(static_cast<unsigned int>(
a.size()))) : -1;
263 for (
int j=
a.size(); j--; )
300 static_cast<int>(
Base::rand(static_cast<unsigned int>(
x[
i].
size()-1))+1); vals--; ) {
305 if (it.
width() > skip) {
306 v = it.
min() + static_cast<int>(skip);
break;
308 skip -= it.
width(); ++it;
336 olog <<
ind(3) <<
"Testing fixpoint on copy" << std::endl;
340 olog <<
ind(4) <<
"Copy failed after posting" << std::endl;
341 delete c;
return false;
343 for (
int j=
x.
size(); j--; )
344 if (
x[j].
size() !=
c->x[j].size()) {
346 olog <<
ind(4) <<
"Different domain size" << std::endl;
347 delete c;
return false;
351 olog <<
ind(4) <<
"Different control variable" << std::endl;
352 delete c;
return false;
355 olog <<
ind(3) <<
"Finished testing fixpoint on copy" << std::endl;
395 olog <<
ind(3) <<
"No failure on disabled copy" << std::endl;
402 olog <<
ind(3) <<
"Failure on disabled copy" << std::endl;
405 for (
int j=
x.
size(); j--; ) {
406 if (
x[j].
size() !=
c.x[j].size()) {
408 olog <<
ind(4) <<
"Different domain size" << std::endl;
413 olog <<
ind(4) <<
"Different control variable" << std::endl;
446 #define CHECK_TEST(T,M) \
448 olog << ind(3) << "Check: " << (M) << std::endl; \
450 problem = (M); delete s; goto failed; \
454 #define START_TEST(T) \
457 olog << ind(2) << "Testing: " << (T) << std::endl; \
473 const char*
test =
"NONE";
474 const char* problem =
"NONE";
482 post(*search_s,search_s->
x);
490 bool sol = solution(
a);
492 olog <<
ind(1) <<
"Assignment: " <<
a
493 << (sol ?
" (solution)" :
" (no solution)")
505 olog <<
ind(3) <<
"No copy" << std::endl;
511 olog <<
ind(3) <<
"Copy" << std::endl;
513 sc = static_cast<TestSpace*>(s->
clone());
518 default: assert(
false);
529 START_TEST(
"Partial assignment (after posting)");
544 START_TEST(
"Assignment (after posting, disable)");
559 START_TEST(
"Partial assignment (after posting, disable)");
589 START_TEST(
"Partial assignment (before posting)");
609 if (!s->
prune(
a,testfix)) {
610 problem =
"No fixpoint";
627 s->
post();
c->post();
630 problem =
"Different result after re-enable";
634 if (testfix && (s->
failed() !=
c->failed())) {
635 problem =
"Different failure after re-enable";
644 START_TEST(
"Assignment reified (rewrite after post, <=>)");
654 START_TEST(
"Assignment reified (rewrite failure, <=>)");
663 START_TEST(
"Assignment reified (immediate rewrite, <=>)");
673 START_TEST(
"Assignment reified (immediate failure, <=>)");
682 START_TEST(
"Assignment reified (before posting, <=>)");
697 START_TEST(
"Assignment reified (after posting, <=>)");
712 START_TEST(
"Assignment reified (after posting, <=>, disable)");
734 if (!s->
prune(
a,testfix)) {
735 problem =
"No fixpoint";
753 s->
post();
c->post();
757 problem =
"No fixpoint";
764 CHECK_TEST(
c->r.var().assigned(),
"Control variable unassigned");
766 CHECK_TEST(
c->r.var().val()==1,
"Zero on solution");
768 CHECK_TEST(
c->r.var().val()==0,
"One on non-solution");
777 START_TEST(
"Assignment reified (rewrite after post, =>)");
787 START_TEST(
"Assignment reified (rewrite failure, =>)");
801 START_TEST(
"Assignment reified (immediate rewrite, =>)");
811 START_TEST(
"Assignment reified (immediate failure, =>)");
825 START_TEST(
"Assignment reified (before posting, =>)");
840 START_TEST(
"Assignment reified (after posting, =>)");
855 START_TEST(
"Assignment reified (after posting, =>, disable)");
877 if (!s->
prune(
a,testfix)) {
878 problem =
"No fixpoint";
896 s->
post();
c->post();
900 problem =
"No fixpoint";
908 CHECK_TEST(!
c->r.var().assigned(),
"Control variable assigned");
910 CHECK_TEST(
c->r.var().assigned(),
"Control variable unassigned");
911 CHECK_TEST(
c->r.var().val()==0,
"One on non-solution");
920 START_TEST(
"Assignment reified (rewrite after post, <=)");
930 START_TEST(
"Assignment reified (rewrite failure, <=)");
944 START_TEST(
"Assignment reified (immediate rewrite, <=)");
954 START_TEST(
"Assignment reified (immediate failure, <=)");
968 START_TEST(
"Assignment reified (before posting, <=)");
983 START_TEST(
"Assignment reified (after posting, <=)");
998 START_TEST(
"Assignment reified (after posting, <=, disable)");
1020 if (!s->
prune(
a,testfix)) {
1021 problem =
"No fixpoint";
1039 s->
post();
c->post();
1043 problem =
"No fixpoint";
1049 CHECK_TEST(
c->propagators()==0,
"No subsumption");
1051 CHECK_TEST(
c->r.var().assigned(),
"Control variable unassigned");
1052 CHECK_TEST(
c->r.var().val()==1,
"Zero on solution");
1054 CHECK_TEST(!
c->r.var().assigned(),
"Control variable assigned");
1066 CHECK_TEST(s != NULL,
"Solutions exhausted");
1068 for (
int i=
a.size();
i--; ) {
1081 if (e_s.
next() != NULL) {
1082 problem =
"Excess solutions";
1106 for (
int i = s->
x.
size();
i--; )
1121 for (
int i = s->
x.
size();
i--; )
1139 olog <<
"FAILURE" << std::endl
1140 <<
ind(1) <<
"Test: " <<
test << std::endl
1141 <<
ind(1) <<
"Problem: " << problem << std::endl;
1143 olog <<
ind(1) <<
"Assignment: " <<
a << std::endl;
struct Gecode::@602::NNF::@65::@66 b
For binary nodes (and, or, eqv)
virtual bool ignore(const Assignment &) const
Whether to ignore assignment for reification.
unsigned int width(void) const
Return width of range (distance between minimum and maximum)
IntRelType
Relation types for integers.
virtual T * next(void)
Return next solution (NULL, if none exists or search has been stopped)
Inverse implication for reification.
Test * test
The test currently run.
virtual void operator++(void)
Move to next assignment.
IntVarBranch INT_VAR_NONE(void)
Select first unassigned variable.
int min(void) const
Return smallest value of range.
Passing integer variables.
unsigned int size(I &i)
Size of all ranges of range iterator i.
Reify eqv(BoolVar x)
Use equivalence for reification.
void rndrel(const Assignment &a, int i, Gecode::IntRelType &irt, int &v)
Randomly select a pruning rel for variable i.
Use advanced propagation algorithm.
void branch(Home home, const IntVarArgs &x, const BoolVarArgs &y, IntBoolVarBranch vars, IntValBranch vals)
Branch function for integer and Boolean variables.
unsigned int size(Space &home) const
Return number of propagators in a group.
int n
Number of variables.
Test for domain-consistency.
int randval(const Gecode::IntSet &d)
int a
How many assigments still to be generated.
Implication for reification.
Test for bounds(z)-consistency.
void rel(int i, Gecode::IntRelType irt, int n)
Perform integer tell operation on x[i].
void disable(Space &home)
Disable all propagators in a group.
IntPropLevel
Propagation levels for integer propagators.
IntValBranch INT_VAL_MIN(void)
Select smallest value.
Depth-first search engine.
Space for executing tests.
virtual void operator++(void)
Move to next assignment.
bool assigned(void) const
Test whether view is assigned.
static Gecode::Support::RandomGenerator rand
Random number generator.
TestSpace(int n, Gecode::IntSet &d, Test *t)
Create test space without reification.
int size(void) const
Return size of array (number of elements)
bool assigned(void) const
Test if all variables are assigned.
struct Gecode::Space::@61::@63 c
Data available only during copying.
virtual void post(Gecode::Space &home, Gecode::IntVarArray &x)=0
Post constraint.
Gecode toplevel namespace
virtual bool run(void)
Perform test.
void enable(Space &home, bool s=true)
Enable all propagators in a group.
Space * clone(CloneStatistics &stat=unused_clone) const
Clone space.
Gecode::Reify r
Reification information.
Reify pmi(BoolVar x)
Use reverse implication for reification.
Test for bounds(d)-consistency.
virtual Assignment * assignment(void) const
Create assignment.
bool failed(void)
Compute a fixpoint and check for failure.
std::basic_ostream< Char, Traits > & operator<<(std::basic_ostream< Char, Traits > &os, const FloatView &x)
Print float variable view.
struct Gecode::@602::NNF::@65::@67 a
For atomic nodes.
Node * x
Pointer to corresponding Boolean expression node.
BoolOpType
Operation types for Booleans.
bool assigned(void) const
Test whether all variables are assigned.
static PropagatorGroup all
Group of all propagators.
Reification specification.
Equivalence for reification (default)
Gecode::IntSetValues * dsv
Iterator for each variable.
bool log
Whether to log the tests.
void dom(Home home, FloatVar x, FloatVal n)
Propagates .
Boolean integer variables.
Domain propagation Options: basic versus advanced propagation.
int a
How many assigments still to be generated Generate new value according to domain.
void init(const IntSet &s)
Initialize with values for s.
int _n1
How many variables in the second set.
int * vals
The current values for the variables.
void prune(void)
Prune some random values for some random variable.
#define CHECK_TEST(T, M)
Check the test result and handle failed test.
void min(Home home, SetVar s, IntVar x, Reify r)
static bool fixpoint(void)
Throw a coin whether to compute a fixpoint.
void assign(const Assignment &a, bool skip=false)
Assign all (or all but one, if skip is true) variables to values in a.
SpaceStatus status(StatusStatistics &stat=unused_status)
Query space status.
int * vals
The current values for the variables.
Generate all assignments.
Base class for assignments
void bound(void)
Assing a random variable to a random bound.
void max(Home home, SetVar s, IntVar x, Reify r)
unsigned int propagators(void)
Return the number of propagators.
void post(void)
Post propagator.
Use basic propagation algorithm.
BoolVar var(void) const
Return Boolean control variable.
void rel(Home home, FloatVar x0, FloatRelType frt, FloatVal n)
Propagates .
virtual void operator++(void)
Move to next assignment.
ReifyMode
Mode for reification.
Simple class for describing identation.
void threads(double n)
Set number of parallel threads.
bool reified
Whether the test is for a reified propagator.
void enable(void)
Enable propagators in space.
#define START_TEST(T)
Start new test.
int max(void) const
Return largest value of range.
ReifyMode mode(void) const
Return reification mode.
void prune(int i, bool bounds_only)
Prune some random values from variable i.
virtual Gecode::Space * copy(void)
Copy space during cloning.
Reify imp(BoolVar x)
Use implication for reification.
Gecode::IntSet _d1
Domain for second set of variables Generate new value according to domain d.
int val(void) const
Return assigned value.
int rndvar(void)
Randomly select an unassigned variable.
void ignore(Actor &a, ActorProperty p, bool duplicate=false)
Ignore actor property.
Gecode::IntSet d
Initial domain.
void disable(void)
Disable propagators in space and compute fixpoint (make all idle)
Gecode::IntVarArray x
Variables to be tested.
int n
Number of negative literals for node type.
bool disabled(const Assignment &a, TestSpace &c, bool testfix)
Prune values also in a space c with disabled propagators, but not those in assignment a.
std::ostringstream olog
Stream used for logging.
Gecode::IntArgs i({1, 2, 3, 4})
Gecode::IntSet d
Domain for each variable.
void update(Space &home, VarArray< Var > &a)
Update array to be a clone of array a.
unsigned int size(void) const
Return size (cardinality) of domain.