00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #include "test/int.hh"
00039
00040 namespace Test { namespace Int {
00041
00043 namespace Count {
00044
00050
00051 class IntInt : public Test {
00052 protected:
00054 Gecode::IntRelType irt;
00055 public:
00057 IntInt(Gecode::IntRelType irt0)
00058 : Test("Count::Int::Int::"+str(irt0),4,-2,2), irt(irt0) {}
00060 virtual bool solution(const Assignment& x) const {
00061 int m = 0;
00062 for (int i=x.size(); i--; )
00063 if (x[i] == 0)
00064 m++;
00065 return cmp(m,irt,2);
00066 }
00068 virtual void post(Gecode::Space* home, Gecode::IntVarArray& x) {
00069 Gecode::count(home, x,0,irt,2);
00070 }
00071 };
00072
00074 class IntIntDup : public Test {
00075 protected:
00077 Gecode::IntRelType irt;
00078 public:
00080 IntIntDup(Gecode::IntRelType irt0)
00081 : Test("Count::Int::Int::Dup::"+str(irt0),4,-2,2), irt(irt0) {}
00083 virtual bool solution(const Assignment& x) const {
00084 int m = 0;
00085 for (int i=x.size(); i--; )
00086 if (x[i] == 0)
00087 m += 2;
00088 return cmp(m,irt,4);
00089 }
00091 virtual void post(Gecode::Space* home, Gecode::IntVarArray& x) {
00092 Gecode::IntVarArgs y(8);
00093 for (int i=x.size(); i--; )
00094 y[i]=y[4+i]=x[i];
00095 Gecode::count(home, y, 0, irt, 4);
00096 }
00097 };
00098
00100 class IntVar : public Test {
00101 protected:
00103 Gecode::IntRelType irt;
00104 public:
00106 IntVar(Gecode::IntRelType irt0)
00107 : Test("Count::Int::Var::"+str(irt0),5,-2,2), irt(irt0) {}
00109 virtual bool solution(const Assignment& x) const {
00110 int m = 0;
00111 for (int i=0; i<4; i++)
00112 if (x[i] == 0)
00113 m++;
00114 return cmp(m,irt,x[4]);
00115 }
00117 virtual void post(Gecode::Space* home, Gecode::IntVarArray& x) {
00118 Gecode::IntVarArgs y(4);
00119 for (int i=0; i<4; i++)
00120 y[i]=x[i];
00121 Gecode::count(home, y, 0, irt, x[4]);
00122 }
00123 };
00124
00125 Gecode::IntArgs ints(4, 1,0,3,2);
00126
00128 class IntArrayInt : public Test {
00129 protected:
00131 Gecode::IntRelType irt;
00132 public:
00134 IntArrayInt(Gecode::IntRelType irt0)
00135 : Test("Count::IntArray::Int::"+str(irt0),5,-2,2), irt(irt0) {}
00137 virtual bool solution(const Assignment& x) const {
00138 int m = 0;
00139 for (int i=0; i<4; i++)
00140 if (x[i] == ints[i])
00141 m++;
00142 return cmp(m,irt,2);
00143 }
00145 virtual void post(Gecode::Space* home, Gecode::IntVarArray& x) {
00146 Gecode::IntVarArgs y(4);
00147 for (int i=0; i<4; i++)
00148 y[i]=x[i];
00149 Gecode::count(home, y, ints, irt, 2);
00150 }
00151 };
00152
00154 class IntArrayVar : public Test {
00155 protected:
00157 Gecode::IntRelType irt;
00158 public:
00160 IntArrayVar(Gecode::IntRelType irt0)
00161 : Test("Count::IntArray::Var::"+str(irt0),5,-2,2), irt(irt0) {}
00163 virtual bool solution(const Assignment& x) const {
00164 int m = 0;
00165 for (int i=0; i<4; i++)
00166 if (x[i] == ints[i])
00167 m++;
00168 return cmp(m,irt,x[4]);
00169 }
00171 virtual void post(Gecode::Space* home, Gecode::IntVarArray& x) {
00172 Gecode::IntVarArgs y(4);
00173 for (int i=0; i<4; i++)
00174 y[i]=x[i];
00175 Gecode::count(home, y, ints, irt, x[4]);
00176 }
00177 };
00178
00180 class IntVarShared : public Test {
00181 protected:
00183 Gecode::IntRelType irt;
00184 public:
00186 IntVarShared(Gecode::IntRelType irt0)
00187 : Test("Count::Int::Var::Shared::"+str(irt0),4,-2,2), irt(irt0) {}
00189 virtual bool solution(const Assignment& x) const {
00190 int m = 0;
00191 for (int i=0; i<4; i++)
00192 if (x[i] == 0)
00193 m++;
00194 return cmp(m,irt,x[2]);
00195 }
00197 virtual void post(Gecode::Space* home, Gecode::IntVarArray& x) {
00198 Gecode::count(home, x, 0, irt, x[2]);
00199 }
00200 };
00201
00203 class VarVar : public Test {
00204 protected:
00206 Gecode::IntRelType irt;
00207 public:
00209 VarVar(Gecode::IntRelType irt0)
00210 : Test("Count::Var::Var::"+str(irt0),5,-2,2), irt(irt0) {}
00212 virtual bool solution(const Assignment& x) const {
00213 int m = 0;
00214 for (int i=0; i<3; i++)
00215 if (x[i] == x[3])
00216 m++;
00217 return cmp(m,irt,x[4]);
00218 }
00220 virtual void post(Gecode::Space* home, Gecode::IntVarArray& x) {
00221 Gecode::IntVarArgs y(3);
00222 for (int i=0; i<3; i++)
00223 y[i]=x[i];
00224 Gecode::count(home, y, x[3], irt, x[4]);
00225 }
00226 };
00227
00229 class VarInt : public Test {
00230 protected:
00232 Gecode::IntRelType irt;
00233 public:
00235 VarInt(Gecode::IntRelType irt0)
00236 : Test("Count::Var::Int::"+str(irt0),4,-2,2), irt(irt0) {}
00238 virtual bool solution(const Assignment& x) const {
00239 int m = 0;
00240 for (int i=0; i<3; i++)
00241 if (x[i] == x[3])
00242 m++;
00243 return cmp(m,irt,2);
00244 }
00246 virtual void post(Gecode::Space* home, Gecode::IntVarArray& x) {
00247 Gecode::IntVarArgs y(3);
00248 for (int i=0; i<3; i++)
00249 y[i]=x[i];
00250 Gecode::count(home, y, x[3], irt, 2);
00251 }
00252 };
00253
00255 class VarVarSharedA : public Test {
00256 protected:
00258 Gecode::IntRelType irt;
00259 public:
00261 VarVarSharedA(Gecode::IntRelType irt0)
00262 : Test("Count::Var::Var::Shared::A::"+str(irt0),5,-2,2), irt(irt0) {}
00264 virtual bool solution(const Assignment& x) const {
00265 int m = 0;
00266 for (int i=0; i<4; i++)
00267 if (x[i] == x[1])
00268 m++;
00269 return cmp(m,irt,x[4]);
00270 }
00272 virtual void post(Gecode::Space* home, Gecode::IntVarArray& x) {
00273 Gecode::IntVarArgs y(4);
00274 for (int i=0; i<4; i++)
00275 y[i]=x[i];
00276 Gecode::count(home, y, x[1], irt, x[4]);
00277 }
00278 };
00279
00281 class VarVarSharedB : public Test {
00282 protected:
00284 Gecode::IntRelType irt;
00285 public:
00287 VarVarSharedB(Gecode::IntRelType irt0)
00288 : Test("Count::Var::Var::Shared::B::"+str(irt0),5,-2,2), irt(irt0) {}
00290 virtual bool solution(const Assignment& x) const {
00291 int m = 0;
00292 for (int i=0; i<4; i++)
00293 if (x[i] == x[4])
00294 m++;
00295 return cmp(m,irt,x[3]);
00296 }
00298 virtual void post(Gecode::Space* home, Gecode::IntVarArray& x) {
00299 Gecode::IntVarArgs y(4);
00300 for (int i=0; i<4; i++)
00301 y[i]=x[i];
00302 Gecode::count(home, y, x[4], irt, x[3]);
00303 }
00304 };
00305
00307 class VarVarSharedC : public Test {
00308 protected:
00310 Gecode::IntRelType irt;
00311 public:
00313 VarVarSharedC(Gecode::IntRelType irt0)
00314 : Test("Count::Var::Var::Shared::A::"+str(irt0),4,-2,2), irt(irt0) {}
00316 virtual bool solution(const Assignment& x) const {
00317 int m = 0;
00318 for (int i=0; i<4; i++)
00319 if (x[i] == x[1])
00320 m++;
00321 return cmp(m,irt,x[3]);
00322 }
00324 virtual void post(Gecode::Space* home, Gecode::IntVarArray& x) {
00325 Gecode::count(home, x, x[1], irt, x[3]);
00326 }
00327 };
00328
00330 class Create {
00331 public:
00333 Create(void) {
00334 for (IntRelTypes irts; irts(); ++irts) {
00335 (void) new IntInt(irts.irt());
00336 (void) new IntIntDup(irts.irt());
00337 (void) new IntVar(irts.irt());
00338 (void) new IntArrayInt(irts.irt());
00339 (void) new IntArrayVar(irts.irt());
00340 (void) new IntVarShared(irts.irt());
00341 (void) new VarVar(irts.irt());
00342 (void) new VarInt(irts.irt());
00343 (void) new VarVarSharedA(irts.irt());
00344 (void) new VarVarSharedB(irts.irt());
00345 (void) new VarVarSharedC(irts.irt());
00346 }
00347 }
00348 };
00349
00350 Create c;
00352
00353 }
00354 }}
00355
00356
00357