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;
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;
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)
@ RM_PMI
Inverse implication for reification.
Test * test
The test currently run.
virtual void operator++(void)
Move to next assignment.
@ IRT_GQ
Greater or equal ( )
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.
struct Gecode::Space::@61::@63 c
Data available only during copying.
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.
@ IPL_ADVANCED
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.
@ CTL_DOMAIN
Test for domain-consistency.
int randval(const Gecode::IntSet &d)
@ CTL_NONE
No consistency-test.
int a
How many assigments still to be generated.
@ RM_IMP
Implication for reification.
@ CTL_BOUNDS_Z
Test for bounds(z)-consistency.
void rel(int i, Gecode::IntRelType irt, int n)
Perform integer tell operation on x[i].
@ IPL_VAL
Value propagation.
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.
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.
@ CTL_BOUNDS_D
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.
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.
@ RM_EQV
Equivalence for reification (default)
Gecode::IntSetValues * dsv
Iterator for each variable.
@ IPL_BASIC_ADVANCED
Use both.
bool log
Whether to log the tests.
void dom(Home home, FloatVar x, FloatVal n)
Propagates .
Boolean integer variables.
@ IPL_DOM
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.
struct Gecode::@602::NNF::@65::@66 b
For binary nodes (and, or, eqv)
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)
@ IPL_BND
Bounds propagation.
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.
struct Gecode::@602::NNF::@65::@67 a
For atomic nodes.
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.
@ IPL_BASIC
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})
@ SS_FAILED
Space is failed
Gecode::IntSet d
Domain for each variable.
void update(Space &home, VarArray< Var > &a)
Update array to be a clone of array a.
@ IRT_LQ
Less or equal ( )
unsigned int size(void) const
Return size (cardinality) of domain.