44 namespace Test {
namespace Int {
56 if (
dsv[i]() || (i == 0))
68 for (
int i =
n;
i--; )
75 for (
int i=
n-_n1;
i--; )
77 for (
int i=_n1;
i--; )
78 vals[
n-_n1+
i] = randval(_d1);
88 for (
int i=0;
i<
n;
i++)
89 os << a[
i] << ((
i!=n-1) ?
"," :
"}");
93 namespace Test {
namespace Int {
97 test(t), reified(false) {
106 olog <<
ind(2) <<
"Initial: x[]=" <<
x 122 olog <<
ind(2) <<
"Initial: x[]=" <<
x 123 <<
" b=" <<
r.
var() << std::endl;
131 b.
update(*
this, share, sr);
153 olog <<
ind(3) <<
"Posting reified propagator" << std::endl;
157 olog <<
ind(3) <<
"Posting propagator" << std::endl;
164 olog <<
ind(3) <<
"Fixpoint: " <<
x;
166 olog << std::endl <<
ind(3) <<
" --> " << x << std::endl;
179 i = (i+1) %
x.
size();
192 if (a[i] <
x[i].
max()) {
194 <
unsigned int>(
x[i].
max()-a[i]));
195 assert((v > a[i]) && (v <=
x[i].
max()));
200 if (a[i] >
x[i].
min()) {
202 <
unsigned int>(a[i]-
x[i].
min()));
203 assert((v < a[i]) && (v >=
x[i].
min()));
212 if (it.
width() > skip) {
215 if (it.
width() == 1) {
217 }
else if (v < it.
max()) {
225 skip -= it.
width(); ++it;
236 olog <<
ind(4) <<
"x[" << i <<
"] ";
245 olog <<
" " << n << std::endl;
255 olog <<
ind(4) <<
"b = " << n << std::endl;
263 for (
int j=a.
size(); j--; )
286 <
unsigned int>(
x[i].
max()-
x[i].
min()));
287 assert((v >
x[i].
min()) && (v <=
x[i].
max()));
292 <
unsigned int>(
x[i].
max()-
x[i].
min()));
293 assert((v <
x[i].
max()) && (v >=
x[i].
min()));
302 if (it.
width() > skip) {
303 v = it.
min() + skip;
break;
305 skip -= it.
width(); ++it;
333 olog <<
ind(3) <<
"Testing fixpoint on copy" << std::endl;
337 olog <<
ind(4) <<
"Copy failed after posting" << std::endl;
338 delete c;
return false;
340 for (
int i=
x.
size(); i--; )
343 olog <<
ind(4) <<
"Different domain size" << std::endl;
344 delete c;
return false;
348 olog <<
ind(4) <<
"Different control variable" << std::endl;
349 delete c;
return false;
352 olog <<
ind(3) <<
"Finished testing fixpoint on copy" << std::endl;
392 olog <<
ind(3) <<
"No failure on disabled copy" << std::endl;
399 olog <<
ind(3) <<
"Failure on disabled copy" << std::endl;
402 for (
int i=
x.
size(); i--; ) {
405 olog <<
ind(4) <<
"Different domain size" << std::endl;
410 olog <<
ind(4) <<
"Different control variable" << std::endl;
443 #define CHECK_TEST(T,M) \ 445 olog << ind(3) << "Check: " << (M) << std::endl; \ 447 problem = (M); delete s; goto failed; \ 451 #define START_TEST(T) \ 454 olog << ind(2) << "Testing: " << (T) << std::endl; \ 470 const char*
test =
"NONE";
471 const char* problem =
"NONE";
479 post(*search_s,search_s->
x);
487 bool sol = solution(a);
489 olog <<
ind(1) <<
"Assignment: " << a
490 << (sol ?
" (solution)" :
" (no solution)")
502 olog <<
ind(3) <<
"No copy" << std::endl;
508 olog <<
ind(3) <<
"Unshared copy" << std::endl;
517 olog <<
ind(3) <<
"Shared copy" << std::endl;
524 default: assert(
false);
535 START_TEST(
"Partial assignment (after posting)");
550 START_TEST(
"Assignment (after posting, disable)");
565 START_TEST(
"Partial assignment (after posting, disable)");
595 START_TEST(
"Partial assignment (before posting)");
615 if (!s->
prune(a,testfix)) {
616 problem =
"No fixpoint";
636 problem =
"Different result after re-enable";
641 problem =
"Different failure after re-enable";
650 START_TEST(
"Assignment reified (rewrite after post, <=>)");
660 START_TEST(
"Assignment reified (rewrite failure, <=>)");
669 START_TEST(
"Assignment reified (immediate rewrite, <=>)");
679 START_TEST(
"Assignment reified (immediate failure, <=>)");
688 START_TEST(
"Assignment reified (before posting, <=>)");
703 START_TEST(
"Assignment reified (after posting, <=>)");
718 START_TEST(
"Assignment reified (after posting, <=>, disable)");
740 if (!s->
prune(a,testfix)) {
741 problem =
"No fixpoint";
763 problem =
"No fixpoint";
783 START_TEST(
"Assignment reified (rewrite after post, =>)");
793 START_TEST(
"Assignment reified (rewrite failure, =>)");
807 START_TEST(
"Assignment reified (immediate rewrite, =>)");
817 START_TEST(
"Assignment reified (immediate failure, =>)");
831 START_TEST(
"Assignment reified (before posting, =>)");
846 START_TEST(
"Assignment reified (after posting, =>)");
861 START_TEST(
"Assignment reified (after posting, =>, disable)");
883 if (!s->
prune(a,testfix)) {
884 problem =
"No fixpoint";
906 problem =
"No fixpoint";
926 START_TEST(
"Assignment reified (rewrite after post, <=)");
936 START_TEST(
"Assignment reified (rewrite failure, <=)");
950 START_TEST(
"Assignment reified (immediate rewrite, <=)");
960 START_TEST(
"Assignment reified (immediate failure, <=)");
974 START_TEST(
"Assignment reified (before posting, <=)");
989 START_TEST(
"Assignment reified (after posting, <=)");
1004 START_TEST(
"Assignment reified (after posting, <=, disable)");
1026 if (!s->
prune(a,testfix)) {
1027 problem =
"No fixpoint";
1049 problem =
"No fixpoint";
1072 CHECK_TEST(s != NULL,
"Solutions exhausted");
1074 for (
int i=a.
size();
i--; ) {
1076 CHECK_TEST(a[
i] == s->
x[
i].val(),
"Wrong value in solution");
1087 if (e_s.
next() != NULL) {
1088 problem =
"Excess solutions";
1112 for (
int i = s->
x.
size();
i--; )
1127 for (
int i = s->
x.
size();
i--; )
1145 olog <<
"FAILURE" << std::endl
1146 <<
ind(1) <<
"Test: " << test << std::endl
1147 <<
ind(1) <<
"Problem: " << problem << std::endl;
1149 olog <<
ind(1) <<
"Assignment: " << a << std::endl;
unsigned int width(void) const
Return width of range (distance between minimum and maximum)
virtual void operator++(void)
Move to next assignment.
void prune(int i, bool bounds_only)
Prune some random values from variable i.
IntVarBranch INT_VAR_NONE(void)
Select first unassigned variable.
#define CHECK_TEST(T, M)
Check the test result and handle failed test.
Gecode::IntSet d
Initial domain.
Gecode::IntVarArray x
Variables to be tested.
Inverse implication for reification.
Simple class for describing identation.
#define START_TEST(T)
Start new test.
int size(void) const
Return size of array (number of elements)
ReifyMode mode(void) const
Return reification mode.
virtual void post(Gecode::Space &home, Gecode::IntVarArray &x)=0
Post constraint.
int size(void) const
Return number of variables.
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.
virtual void operator++(void)
Move to next assignment.
BoolOpType
Operation types for Booleans.
unsigned int size(void) const
Return size (cardinality) of domain.
void disable(Space &home)
Disable all propagators in a group.
static PropagatorGroup all
Group of all propagators.
bool assigned(void) const
Test whether view is assigned.
bool assigned(void) const
Test whether all variables are assigned.
Gecode::Reify r
Reification information.
void init(const IntSet &s)
Initialize with values for s.
bool assigned(void) const
Test if all variables are assigned.
virtual T * next(void)
Return next solution (NULL, if none exists or search has been stopped)
void dom(Home home, FloatVar x, FloatVal n)
Propagates .
bool failed(void)
Compute a fixpoint and check for failure.
virtual Assignment * assignment(void) const
Create assignment.
Space * clone(bool share_data=true, bool share_info=true, CloneStatistics &stat=unused_clone) const
Clone space.
Space for executing tests.
unsigned int size(Space &home) const
Return number of propagators in a group.
int n
Number of variables.
virtual Gecode::Space * copy(bool share)
Copy space during cloning.
Gecode::IntSet d
Domain for each variable.
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.
void prune(void)
Prune some random values for some random variable.
void 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.
struct Gecode::@554::NNF::@60::@62 a
For atomic nodes.
void max(Home home, SetVar s, IntVar x, Reify r)
Post reified propagator for b iff x is the maximal element of s.
Gecode::IntArgs i(4, 1, 2, 3, 4)
int n
Number of negative literals for node type.
void rndrel(const Assignment &a, int i, Gecode::IntRelType &irt, int &v)
Randomly select a pruning rel for variable i.
virtual bool run(void)
Perform test.
IntRelType
Relation types for integers.
void rel(int i, Gecode::IntRelType irt, int n)
Perform integer tell operation on x[i].
void bound(void)
Assing a random variable to a random bound.
static bool fixpoint(void)
Throw a coin whether to compute a fixpoint.
IntValBranch INT_VAL_MIN(void)
Select smallest value.
Use basic propagation algorithm.
unsigned int size(I &i)
Size of all ranges of range iterator i.
Reification specification.
int min(void) const
Return smallest value of range.
TestSpace(int n, Gecode::IntSet &d, Test *t)
Create test space without reification.
Gecode::IntSetValues * dsv
Iterator for each variable.
Test for bounds(z)-consistency.
Test for bounds(d)-consistency.
bool log
Whether to log the tests.
Test for domain-consistency.
Use advanced propagation algorithm.
unsigned int propagators(void)
Return the number of propagators.
Reify eqv(BoolVar x)
Use equivalence for reification.
Passing integer variables.
void disable(void)
Disable propagators in space and compute fixpoint (make all idle)
std::ostream & operator<<(std::ostream &os, const Test::Int::Assignment &a)
void min(Home home, SetVar s, IntVar x, Reify r)
Post reified propagator for b iff x is the minimal element of s.
Boolean integer variables.
void enable(void)
Enable propagators in space.
IntPropLevel
Propagation levels for integer propagators.
Node * x
Pointer to corresponding Boolean expression node.
Space(void)
Default constructor.
void ignore(Actor &a, ActorProperty p, bool duplicate=false)
Ignore actor property.
struct Gecode::Space::@55::@57 c
Data available only during copying.
void assign(const Assignment &a, bool skip=false)
Assign all (or all but one, if skip is true) variables to values in a.
Base class for assignments
void enable(Space &home, bool s=true)
Enable all propagators in a group.
std::ostringstream olog
Stream used for logging.
void rel(Home home, FloatVar x0, FloatRelType frt, FloatVal n)
Propagates .
Domain propagation Preferences: prefer speed or memory.
BoolVar var(void) const
Return Boolean control variable.
SpaceStatus status(StatusStatistics &stat=unused_status)
Query space status.
int max(void) const
Return largest value of range.
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...
void threads(double n)
Set number of parallel threads.
Gecode toplevel namespace
Implication for reification.
virtual bool ignore(const Assignment &) const
Whether to ignore assignment for reification.
virtual void operator++(void)
Move to next assignment.
struct Gecode::@554::NNF::@60::@61 b
For binary nodes (and, or, eqv)
Test * test
The test currently run.
ReifyMode
Mode for reification.
void post(void)
Post propagator.
Depth-first search engine.
Generate all assignments.
Equivalence for reification (default)
int val(void) const
Return assigned value.
Reify pmi(BoolVar x)
Use reverse implication for reification.
bool reified
Whether the test is for a reified propagator.
int rndvar(void)
Randomly select an unassigned variable.