45 namespace Test {
namespace Int {
48 namespace Extensional {
62 return (((x[0] == 0) || (x[0] == 2)) &&
63 ((x[1] == -1) || (x[1] == 1)) &&
64 ((x[2] == 0) || (x[2] == 1)) &&
65 ((x[3] == 0) || (x[3] == 1)));
85 return (x[0]<x[1]) && (x[1]<x[2]) && (x[2]<x[3]);
109 while (pos < s && x[pos] == 0) ++
pos;
110 if (pos + 4 > s)
return false;
112 for (
int i = 0;
i < 2; ++
i, ++
pos)
113 if (x[pos] != 1)
return false;
114 if (pos + 2 > s)
return false;
116 for (
int i = 0;
i < 1; ++
i, ++
pos)
117 if (x[pos] != 0)
return false;
118 while (pos < s && x[pos] == 0) ++
pos;
119 if (pos + 1 > s)
return false;
121 for (
int i = 0;
i < 1; ++
i, ++
pos)
122 if (x[pos] != 1)
return false;
123 while (pos < s)
if (x[pos++] != 0)
return false;
142 for (
int i=0;
i<x.
size();
i++) {
143 if ((x[
i] < 0) || (x[
i] > 3))
145 for (
int j=
i+1; j<x.
size(); j++)
187 :
Test(
"Extensional::Reg::Roland::"+
str(n),n,0,1) {}
192 ((n > 1) && (x[n-2] == 0)) ||
193 ((n > 0) && (x[n-1] == 0));
211 return (((x[0] == 0) || (x[0] == 2)) &&
212 ((x[1] == -1) || (x[1] == 1)) &&
213 ((x[2] == 0) || (x[2] == 1)) &&
214 ((x[3] == 0) || (x[3] == 1)));
220 for (
int i=0;
i<4;
i++)
238 return (((x[0] == 0) || (x[0] == 2)) &&
239 ((x[1] == -1) || (x[1] == 1)) &&
240 ((x[2] == 0) || (x[2] == 1)) &&
241 ((x[3] == 0) || (x[3] == 1)));
247 for (
int i=0;
i<4;
i++)
248 y[
i]=y[
i+4]=y[
i+8]=x[
i];
265 return (x[1]==1) && (x[2]==0) && (x[3]==1);
271 for (
int i=0;
i<4;
i++)
286 return (x[1]==1) && (x[2]==0) && (x[3]==1);
292 for (
int i=0;
i<4;
i++)
346 :
Test(
"Extensional::Reg::Opt::"+
str(n0),1,0,15), n(n0) {}
349 return (x[0] < n) && ((x[0] & 1) == 0);
356 int*
f =
new int[n+1];
358 for (
int i=0;
i<
n;
i++) {
369 DFA d(0, t, f,
false);
383 for (
int j = 0; j<ts.
arity(); j++) {
397 :
Test(
"Extensional::TupleSet::Base",
401 return ((x[0] == 1 && x[1] == 3 && x[2] == 2 && x[3] == 3) ||
402 (x[0] == 2 && x[1] == 1 && x[2] == 2 && x[3] == 4) ||
403 (x[0] == 2 && x[1] == 2 && x[2] == 1 && x[3] == 4) ||
404 (x[0] == 3 && x[1] == 3 && x[2] == 3 && x[3] == 2) ||
405 (x[0] == 4 && x[1] == 3 && x[2] == 4 && x[3] == 1)
444 :
Test(
"Extensional::TupleSet::"+s,
454 for (
int j=0; (j < ts.
arity()) && same; j++)
495 :
Test(
"Extensional::TupleSet::Large",
503 for (
int i = 5;
i--; ) tuple[
i] = ass[
i];
516 for (
int j = 0; j < t.
arity() &&
same; ++j)
517 if (l[j] != x[j]) same =
false;
518 if (same)
return true;
535 :
Test(
"Extensional::TupleSet::Bool",
543 for (
int i = 5;
i--; ) tuple[
i] = ass[
i];
556 for (
int j = 0; j < t.
arity() &&
same; ++j)
557 if (l[j] != x[j]) same =
false;
558 if (same)
return true;
566 for (
int i = x.
size();
i--; )
581 while (n_tuples < size) {
588 for (
int i = size;
i--; ) {
591 for (
int j = arity; j--; ) tuple[j] = ass[j];
610 for (
int i = n;
i--; ) tuple[
i] = ass[
i];
627 ts.
add(2, 1, 2, 4).
add(2, 2, 1, 4)
628 .
add(4, 3, 4, 1).
add(1, 3, 2, 3)
629 .
add(3, 3, 3, 2).
add(5, 1, 4, 4)
630 .
add(2, 5, 1, 5).
add(4, 3, 5, 1)
631 .
add(1, 5, 2, 5).
add(5, 3, 3, 2)
642 for (
int n=1024*16;
n--; )
655 ts.
add(m+0,m+1,m+2).
add(m+4,m+1,m+3)
656 .
add(m+2,m+3,m+0).
add(m+2,m+3,m+0)
657 .
add(m+1,m+2,m+5).
add(m+2,m+3,m+0)
664 ts.
add(M-0,M-1,M-2).
add(M-4,M-1,M-3)
665 .
add(M-2,M-3,M-0).
add(M-2,M-3,M-0)
666 .
add(M-1,M-2,M-5).
add(M-2,M-3,M-0)
674 ts.
add(M-0,m+1,M-2).
add(m+4,M-1,M-3)
675 .
add(m+2,M-3,m+0).
add(M-2,M-3,M-0)
683 for (
int i = 0;
i < 10000;
i++) {
685 for (
int j = 0; j < 7; j++) {
694 for (
int i = 0;
i <= 64*6;
i+=32)
709 for (
int i = 4;
i--; ) tuple[
i] = ass[
i];
721 t.
add(ass[0],0,ass[1],ass[2]);
735 for (
int i = 9;
i--; ) tuple[
i+1] = ass[
i];
740 t.
add(1,1,1,1,1,1,1,1,1,1);
741 t.
add(1,2,3,4,4,2,1,2,3,3);
771 RegOpt ro2(static_cast<int>(UCHAR_MAX-1));
775 RegOpt ro6(static_cast<int>(USHRT_MAX-1));
RegRoland(int n)
Create and register test.
virtual void post(Gecode::Space &home, Gecode::IntVarArray &x)
Post constraint on x.
TupleSetLarge(double prob)
Create and register test.
Test with simple regular expression and shared variables (uses unsharing)
static std::string str(Gecode::IntPropLevel ipl)
Map integer propagation level to string.
Gecode::TupleSet randomTupleSet(int n, int min, int max, double prob)
void finalize(void)
Finalize tuple set.
RegEmptyREG(void)
Create and register test.
RandomTupleSetTest(const std::string &s, Gecode::IntSet d0, Gecode::TupleSet ts0)
Create and register test.
virtual void post(Gecode::Space &home, Gecode::IntVarArray &x)
Post constraint on x.
virtual bool solution(const Assignment &x) const
Test whether x is solution
Create(void)
Perform creation and registration.
void channel(Home home, FloatVar x0, IntVar x1)
Post propagator for channeling a float and an integer variable .
int size(void) const
Return size of array (number of elements)
const FloatNum max
Largest allowed float value.
virtual void post(Gecode::Space &home, Gecode::IntVarArray &x)
Post constraint on x.
TupleSetTest(const std::string &s, Gecode::IntSet d0, Gecode::TupleSet ts0, bool td)
Create and register test.
int size(void) const
Return number of variables.
int arity(void) const
Arity of tuple set.
Test with regular expression for distinct constraint
static Gecode::Support::RandomGenerator rand
Random number generator.
Regular expressions over integer values.
RegOpt ro3(static_cast< int >(UCHAR_MAX))
virtual void post(Gecode::Space &home, Gecode::IntVarArray &x)
Post constraint on x.
RegDistinct(void)
Create and register test.
virtual void post(Gecode::Space &home, Gecode::IntVarArray &x)
Post constraint on x.
bool pos(const View &x)
Test whether x is postive.
Test with simple regular expression
int * Tuple
Type of a tuple.
virtual void post(Gecode::Space &home, Gecode::IntVarArray &x)
Post constraint on x.
virtual Assignment * assignment(void) const
Create and register initial assignment.
Gecode::IntSet dom
Domain of variables.
void unshare(Home home, VarArgArray< Var > &x, IntPropLevel ipl)
Replace unassigned shared variables by fresh, yet equal variables.
virtual bool solution(const Assignment &x) const
Test whether x is solution
Test with simple regular expression and shared variables (uses unsharing)
virtual bool solution(const Assignment &x) const
Test whether x is solution
Test with simple regular expression
const int max
Largest allowed integer value.
Generate random selection of assignments.
const int min
Smallest allowed integer value.
virtual bool solution(const Assignment &x) const
Test whether x is solution
virtual bool solution(const Assignment &x) const
Test whether x is solution
int tuples(void) const
Number of tuples.
virtual bool solution(const Assignment &x) const
Test whether x is solution
virtual bool solution(const Assignment &x) const
Test whether x is solution
Deterministic finite automaton (DFA)
const FloatNum min
Smallest allowed float value.
Gecode::IntArgs i(4, 1, 2, 3, 4)
virtual void post(Gecode::Space &home, Gecode::IntVarArray &x)
Post constraint on x.
int n
Number of negative literals for node type.
virtual void post(Gecode::Space &home, Gecode::IntVarArray &x)
Post constraint on x.
virtual void post(Gecode::Space &home, Gecode::IntVarArray &x)
Post constraint on x.
virtual void post(Gecode::Space &home, Gecode::IntVarArray &x)
Post constraint on x.
void extensional(Home home, const IntVarArgs &x, DFA dfa, IntPropLevel)
Post domain consistent propagator for extensional constraint described by a DFA.
Specification of a DFA transition.
unsigned int size(I &i)
Size of all ranges of range iterator i.
Gecode::TupleSet ts
The tuple set to use.
RegSharedB(void)
Create and register test.
RegOpt ro7(static_cast< int >(USHRT_MAX))
Gecode::DFA tupleset2dfa(Gecode::TupleSet ts)
% Transform a TupleSet into a DFA
bool toDFA
Whether to validate dfa2tupleset.
virtual void post(Gecode::Space &home, Gecode::IntVarArray &x)
Post constraint on x.
RegEmptyDFA(void)
Create and register test.
int o_state
output state Default constructor
virtual void post(Gecode::Space &home, Gecode::IntVarArray &x)
Post constraint on x.
virtual bool solution(const Assignment &x) const
Test whether x is solution
TupleSetBase(void)
Create and register test.
Gecode::IntPropLevel ipl
Propagation level.
Passing integer variables.
Passing integer arguments.
Passing Boolean variables.
virtual bool solution(const Assignment &x) const
Test whether x is solution
TupleSetBool(double prob)
Create and register test.
Class represeting a set of tuples.
RegSharedD(void)
Create and register test.
Post propagator for SetVar SetOpType SetVar y
virtual bool solution(const Assignment &x) const
Test whether x is solution
Node * x
Pointer to corresponding Boolean expression node.
virtual bool solution(const Assignment &x) const
Test whether x is solution
bool testsearch
Whether to perform search test.
Base class for assignments
void extensional(Home home, const BoolVarArgs &x, const TupleSet &t, IntPropLevel)
Post propagator for .
bool same(const Item &i, const Item &j)
Whether two items are the same.
Test with simple regular expression and shared variables (uses unsharing)
Domain propagation Options: basic versus advanced propagation.
Help class to create and register tests with a fixed table size.
virtual void post(Gecode::Space &home, Gecode::IntVarArray &x)
Post constraint on x.
virtual bool solution(const Assignment &x) const
Test whether x is solution
RegOpt(int n0)
Create and register test.
TupleSet & add(const IntArgs &t)
Add tuple t to tuple set.
Test with simple regular expression from Roland Yap
int n
DFA size characteristic.
RegSimpleC(void)
Create and register test.
virtual bool solution(const Assignment &x) const
Test whether x is solution
virtual void post(Gecode::Space &home, Gecode::IntVarArray &x)
Post constraint on x.
Gecode toplevel namespace
virtual bool solution(const Assignment &x) const
Test whether x is solution
Test for empty regular expression
Help class to create and register tests.
int arity
Number of variables.
virtual void post(Gecode::Space &home, Gecode::IntVarArray &x)
Post constraint on x.
virtual bool solution(const Assignment &x) const
Test whether x is solution
RegOpt ro6(static_cast< int >(USHRT_MAX-1))
RegOpt ro2(static_cast< int >(UCHAR_MAX-1))
RegSharedA(void)
Create and register test.
virtual void post(Gecode::Space &home, Gecode::IntVarArray &x)
Post constraint on x.
TupleSetTestSize(int size)
Perform creation and registration.
RegSharedC(void)
Create and register test.
Test with large tuple set
Test with simple regular expression and shared variables (uses unsharing)
Generate all assignments.
virtual bool solution(const Assignment &x) const
Test whether x is solution
RegSimpleA(void)
Create and register test.
RegSimpleB(void)
Create and register test.
Test with simple regular expression