this repo has no description
at develop 22 kB view raw
1/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */ 2/* 3 * Main authors: 4 * Christian Schulte <schulte@gecode.org> 5 * 6 * Copyright: 7 * Christian Schulte, 2005 8 * 9 * This file is part of Gecode, the generic constraint 10 * development environment: 11 * http://www.gecode.org 12 * 13 * Permission is hereby granted, free of charge, to any person obtaining 14 * a copy of this software and associated documentation files (the 15 * "Software"), to deal in the Software without restriction, including 16 * without limitation the rights to use, copy, modify, merge, publish, 17 * distribute, sublicense, and/or sell copies of the Software, and to 18 * permit persons to whom the Software is furnished to do so, subject to 19 * the following conditions: 20 * 21 * The above copyright notice and this permission notice shall be 22 * included in all copies or substantial portions of the Software. 23 * 24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 25 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 26 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 27 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 28 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 29 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 30 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 31 * 32 */ 33 34#include "test/int.hh" 35 36#include <gecode/minimodel.hh> 37#include <climits> 38 39namespace Test { namespace Int { 40 41 /// %Tests for element constraints 42 namespace Element { 43 44 /** 45 * \defgroup TaskTestIntElement Element constraints 46 * \ingroup TaskTestInt 47 */ 48 //@{ 49 /// %Test for element with integer array and integer variables 50 class IntIntVar : public Test { 51 protected: 52 /// Array of integers 53 Gecode::IntArgs c; 54 public: 55 /// Create and register test 56 IntIntVar(const std::string& s, const Gecode::IntArgs& c0, 57 int min, int max) 58 : Test("Element::Int::Int::Var::"+s,2,min,max), 59 c(c0) {} 60 /// %Test whether \a x is solution 61 virtual bool solution(const Assignment& x) const { 62 return (x[0]>= 0) && (x[0]<c.size()) && c[x[0]]==x[1]; 63 } 64 /// Post constraint on \a x 65 virtual void post(Gecode::Space& home, Gecode::IntVarArray& x) { 66 Gecode::element(home, c, x[0], x[1]); 67 } 68 }; 69 70 /// %Test for element with integer array and integer variables 71 class IntIntInt : public Test { 72 protected: 73 /// Array of integers 74 Gecode::IntArgs c; 75 /// Integer result 76 int r; 77 public: 78 /// Create and register test 79 IntIntInt(const std::string& s, const Gecode::IntArgs& c0, int r0) 80 : Test("Element::Int::Int::Int::"+s+"::"+str(r0),1,-4,8), 81 c(c0), r(r0) {} 82 /// %Test whether \a x is solution 83 virtual bool solution(const Assignment& x) const { 84 return (x[0]>= 0) && (x[0]<c.size()) && c[x[0]]==r; 85 } 86 /// Post constraint on \a x 87 virtual void post(Gecode::Space& home, Gecode::IntVarArray& x) { 88 Gecode::element(home, c, x[0], r); 89 } 90 }; 91 92 /// %Test for element with integer array and single shared integer variable 93 class IntIntShared : public Test { 94 protected: 95 /// Array of integers 96 Gecode::IntArgs c; 97 public: 98 /// Create and register test 99 IntIntShared(const std::string& s, const Gecode::IntArgs& c0, 100 int minDomain=-4) 101 : Test("Element::Int::Int::Shared::"+s,1,minDomain,8), c(c0) {} 102 /// %Test whether \a x is solution 103 virtual bool solution(const Assignment& x) const { 104 return (x[0]>= 0) && (x[0]<c.size()) && c[x[0]]==x[0]; 105 } 106 /// Post constraint on \a x 107 virtual void post(Gecode::Space& home, Gecode::IntVarArray& x) { 108 Gecode::element(home, c, x[0], x[0]); 109 } 110 }; 111 112 /// %Test for element with integer array and integer and Boolean variable 113 class IntBoolVar : public Test { 114 protected: 115 /// Array of integers 116 Gecode::IntArgs c; 117 public: 118 /// Create and register test 119 IntBoolVar(const std::string& s, const Gecode::IntArgs& c0) 120 : Test("Element::Int::Bool::Var::"+s,2,-4,8), c(c0) {} 121 /// %Test whether \a x is solution 122 virtual bool solution(const Assignment& x) const { 123 return (x[0]>= 0) && (x[0]<c.size()) && c[x[0]]==x[1]; 124 } 125 /// Post constraint on \a x 126 virtual void post(Gecode::Space& home, Gecode::IntVarArray& x) { 127 Gecode::element(home, c, x[0], Gecode::channel(home,x[1])); 128 } 129 }; 130 131 /// %Test for element with integer array and integer and Boolean variable 132 class IntBoolInt : public Test { 133 protected: 134 /// Array of integers 135 Gecode::IntArgs c; 136 /// Integer result 137 int r; 138 public: 139 /// Create and register test 140 IntBoolInt(const std::string& s, const Gecode::IntArgs& c0, int r0) 141 : Test("Element::Int::Bool::Int::"+s+"::"+str(r0),1,-4,8), 142 c(c0), r(r0) {} 143 /// %Test whether \a x is solution 144 virtual bool solution(const Assignment& x) const { 145 return (x[0]>= 0) && (x[0]<c.size()) && c[x[0]]==r; 146 } 147 /// Post constraint on \a x 148 virtual void post(Gecode::Space& home, Gecode::IntVarArray& x) { 149 Gecode::element(home, c, x[0], r); 150 } 151 }; 152 153 /// %Test for element with variable array and integer variables 154 class VarIntVar : public Test { 155 public: 156 /// Create and register test 157 VarIntVar(Gecode::IntPropLevel ipl) 158 : Test("Element::Var::Int::Var::"+str(ipl),6,-1,3,false,ipl) {} 159 /// %Test whether \a x is solution 160 virtual bool solution(const Assignment& x) const { 161 return (x[0]>= 0) && (x[0]<x.size()-2) && x[2+x[0]]==x[1]; 162 } 163 /// Post constraint on \a x 164 virtual void post(Gecode::Space& home, Gecode::IntVarArray& x) { 165 Gecode::IntVarArgs c(x.size()-2); 166 for (int i=0; i<x.size()-2; i++) 167 c[i]=x[2+i]; 168 Gecode::element(home, c, x[0], x[1], ipl); 169 } 170 }; 171 172 /// %Test for element with variable array and integer variables 173 class VarIntInt : public Test { 174 protected: 175 /// Integer result 176 int r; 177 public: 178 /// Create and register test 179 VarIntInt(Gecode::IntPropLevel ipl, int r0) 180 : Test("Element::Var::Int::Int::"+str(ipl)+"::"+str(r0), 181 5,-1,3,false,ipl), r(r0) { 182 contest = CTL_NONE; 183 } 184 /// %Test whether \a x is solution 185 virtual bool solution(const Assignment& x) const { 186 return (x[0]>= 0) && (x[0]<x.size()-1) && x[1+x[0]]==r; 187 } 188 /// Post constraint on \a x 189 virtual void post(Gecode::Space& home, Gecode::IntVarArray& x) { 190 Gecode::IntVarArgs c(x.size()-1); 191 for (int i=0; i<x.size()-1; i++) 192 c[i]=x[1+i]; 193 Gecode::element(home, c, x[0], r, ipl); 194 } 195 }; 196 197 /// %Test for element with variable array and shared integer variable 198 class VarIntShared : public Test { 199 public: 200 /// Create and register test 201 VarIntShared(Gecode::IntPropLevel ipl) 202 : Test("Element::Var::Int::Shared::"+str(ipl),5,-1,3,false,ipl) { 203 contest = CTL_NONE; 204 } 205 /// %Test whether \a x is solution 206 virtual bool solution(const Assignment& x) const { 207 return (x[0]>= 0) && (x[0]<x.size()-1) && x[1+x[0]]==x[0]; 208 } 209 /// Post constraint on \a x 210 virtual void post(Gecode::Space& home, Gecode::IntVarArray& x) { 211 Gecode::IntVarArgs c(x.size()-1); 212 for (int i=0; i<x.size()-1; i++) 213 c[i]=x[1+i]; 214 Gecode::element(home, c, x[0], x[0], ipl); 215 } 216 }; 217 218 /// %Test for element with Boolean variable array and integer variable 219 class VarBoolVar : public Test { 220 public: 221 /// Create and register test 222 VarBoolVar(void) : Test("Element::Var::Bool::Var",6,-1,3,false) {} 223 /// %Test whether \a x is solution 224 virtual bool solution(const Assignment& x) const { 225 for (int i=0; i<x.size()-2; i++) 226 if ((x[2+i] < 0) || (x[2+i]>1)) 227 return false; 228 return ((x[0]>= 0) && (x[0]<x.size()-2) && x[2+x[0]]==x[1] 229 && (x[1]>=0) && (x[1]<=1)); 230 } 231 /// Post constraint on \a x 232 virtual void post(Gecode::Space& home, Gecode::IntVarArray& x) { 233 using namespace Gecode; 234 BoolVarArgs c(x.size()-2); 235 for (int i=0; i<x.size()-2; i++) 236 c[i]=channel(home,x[2+i]); 237 element(home, c, x[0], channel(home,x[1])); 238 } 239 }; 240 241 /// %Test for element with Boolean variable array and integer variable 242 class VarBoolInt : public Test { 243 protected: 244 /// Integer result 245 int r; 246 public: 247 /// Create and register test 248 VarBoolInt(int r0) 249 : Test("Element::Var::Bool::Int::"+str(r0),5,-1,3,false), r(r0) {} 250 /// %Test whether \a x is solution 251 virtual bool solution(const Assignment& x) const { 252 for (int i=0; i<x.size()-1; i++) 253 if ((x[1+i] < 0) || (x[1+i]>1)) 254 return false; 255 return ((x[0]>= 0) && (x[0]<x.size()-1) && x[1+x[0]]==r); 256 } 257 /// Post constraint on \a x 258 virtual void post(Gecode::Space& home, Gecode::IntVarArray& x) { 259 using namespace Gecode; 260 BoolVarArgs c(x.size()-1); 261 for (int i=0; i<x.size()-1; i++) 262 c[i]=channel(home,x[1+i]); 263 if (r == 1) { 264 switch (_rand(3)) { 265 case 0: 266 element(home, c, x[0], 1); 267 break; 268 case 1: 269 { 270 BoolVar one(home,1,1); 271 rel(home, element(c,x[0]) == one); 272 } 273 break; 274 case 2: 275 rel(home, element(c,x[0])); 276 break; 277 default: GECODE_NEVER; 278 } 279 } else { 280 element(home, c, x[0], r); 281 } 282 } 283 }; 284 285 286 /// %Test for matrix element with integer array and integer variable 287 class MatrixIntIntVarXY : public Test { 288 protected: 289 /// Array for test matrix 290 Gecode::IntArgs tm; 291 public: 292 /// Create and register test 293 MatrixIntIntVarXY(void) 294 : Test("Element::Matrix::Int::IntVar::XY",3,0,5,false), 295 tm({0,1,2,3,4,5}) {} 296 /// %Test whether \a x is solution 297 virtual bool solution(const Assignment& x) const { 298 // x-coordinate: x[0], y-coordinate: x[1], result: x[2] 299 using namespace Gecode; 300 if ((x[0] > 2) || (x[1] > 1)) 301 return false; 302 Matrix<IntArgs> m(tm,3,2); 303 return m(x[0],x[1]) == x[2]; 304 } 305 /// Post constraint on \a x 306 virtual void post(Gecode::Space& home, Gecode::IntVarArray& x) { 307 // x-coordinate: x[0], y-coordinate: x[1], result: x[2] 308 using namespace Gecode; 309 Matrix<IntArgs> m(tm,3,2); 310 element(home, m, x[0], x[1], x[2]); 311 } 312 }; 313 314 /// %Test for matrix element with integer array and integer variable 315 class MatrixIntIntVarXX : public Test { 316 protected: 317 /// Array for test matrix 318 Gecode::IntArgs tm; 319 public: 320 /// Create and register test 321 MatrixIntIntVarXX(void) 322 : Test("Element::Matrix::Int::IntVar::XX",2,0,3,false), 323 tm({0,1,2,3}) {} 324 /// %Test whether \a x is solution 325 virtual bool solution(const Assignment& x) const { 326 // x-coordinate: x[0], y-coordinate: x[0], result: x[1] 327 using namespace Gecode; 328 if (x[0] > 1) 329 return false; 330 Matrix<IntArgs> m(tm,2,2); 331 return m(x[0],x[0]) == x[1]; 332 } 333 /// Post constraint on \a x 334 virtual void post(Gecode::Space& home, Gecode::IntVarArray& x) { 335 // x-coordinate: x[0], y-coordinate: x[0], result: x[1] 336 using namespace Gecode; 337 Matrix<IntArgs> m(tm,2,2); 338 element(home, m, x[0], x[0], x[1]); 339 } 340 }; 341 342 /// %Test for matrix element with integer array and Boolean variable 343 class MatrixIntBoolVarXY : public Test { 344 protected: 345 /// Array for test matrix 346 Gecode::IntArgs tm; 347 public: 348 /// Create and register test 349 MatrixIntBoolVarXY(void) 350 : Test("Element::Matrix::Int::BoolVar::XY",3,0,3,false), 351 tm({0,1,1,0}) {} 352 /// %Test whether \a x is solution 353 virtual bool solution(const Assignment& x) const { 354 // x-coordinate: x[0], y-coordinate: x[1], result: x[2] 355 using namespace Gecode; 356 if ((x[0] > 1) || (x[1] > 1)) 357 return false; 358 Matrix<IntArgs> m(tm,2,2); 359 return m(x[0],x[1]) == x[2]; 360 } 361 /// Post constraint on \a x 362 virtual void post(Gecode::Space& home, Gecode::IntVarArray& x) { 363 // x-coordinate: x[0], y-coordinate: x[1], result: x[2] 364 using namespace Gecode; 365 Matrix<IntArgs> m(tm,2,2); 366 element(home, m, x[0], x[1], channel(home,x[2])); 367 } 368 }; 369 370 /// %Test for matrix element with integer array and Boolean variable 371 class MatrixIntBoolVarXX : public Test { 372 protected: 373 /// Array for test matrix 374 Gecode::IntArgs tm; 375 public: 376 /// Create and register test 377 MatrixIntBoolVarXX(void) 378 : Test("Element::Matrix::Int::BoolVar::XX",2,0,3,false), 379 tm({0,1,1,0}) {} 380 /// %Test whether \a x is solution 381 virtual bool solution(const Assignment& x) const { 382 // x-coordinate: x[0], y-coordinate: x[0], result: x[1] 383 using namespace Gecode; 384 if (x[0] > 1) 385 return false; 386 Matrix<IntArgs> m(tm,2,2); 387 return m(x[0],x[0]) == x[1]; 388 } 389 /// Post constraint on \a x 390 virtual void post(Gecode::Space& home, Gecode::IntVarArray& x) { 391 // x-coordinate: x[0], y-coordinate: x[0], result: x[1] 392 using namespace Gecode; 393 Matrix<IntArgs> m(tm,2,2); 394 element(home, m, x[0], x[0], channel(home,x[1])); 395 } 396 }; 397 398 /// %Test for matrix element with integer variable array and integer variable 399 class MatrixIntVarIntVarXY : public Test { 400 public: 401 /// Create and register test 402 MatrixIntVarIntVarXY(void) 403 : Test("Element::Matrix::IntVar::IntVar::XY",3+4,0,3,false) {} 404 /// %Test whether \a x is solution 405 virtual bool solution(const Assignment& x) const { 406 // x-coordinate: x[0], y-coordinate: x[1], result: x[2] 407 // remaining: matrix 408 using namespace Gecode; 409 if ((x[0] > 1) || (x[1] > 1)) 410 return false; 411 IntArgs tm(4); 412 tm[0]=x[3]; tm[1]=x[4]; tm[2]=x[5]; tm[3]=x[6]; 413 Matrix<IntArgs> m(tm,2,2); 414 return m(x[0],x[1]) == x[2]; 415 } 416 /// Post constraint on \a x 417 virtual void post(Gecode::Space& home, Gecode::IntVarArray& x) { 418 // x-coordinate: x[0], y-coordinate: x[1], result: x[2] 419 using namespace Gecode; 420 IntVarArgs tm(4); 421 tm[0]=x[3]; tm[1]=x[4]; tm[2]=x[5]; tm[3]=x[6]; 422 Matrix<IntVarArgs> m(tm,2,2); 423 element(home, m, x[0], x[1], x[2]); 424 } 425 }; 426 427 /// %Test for matrix element with integer variable array and integer variable 428 class MatrixIntVarIntVarXX : public Test { 429 public: 430 /// Create and register test 431 MatrixIntVarIntVarXX(void) 432 : Test("Element::Matrix::IntVar::IntVar::XX",2+4,0,3,false) {} 433 /// %Test whether \a x is solution 434 virtual bool solution(const Assignment& x) const { 435 // x-coordinate: x[0], y-coordinate: x[0], result: x[1] 436 // remaining: matrix 437 using namespace Gecode; 438 if (x[0] > 1) 439 return false; 440 IntArgs tm(4); 441 tm[0]=x[2]; tm[1]=x[3]; tm[2]=x[4]; tm[3]=x[5]; 442 Matrix<IntArgs> m(tm,2,2); 443 return m(x[0],x[0]) == x[1]; 444 } 445 /// Post constraint on \a x 446 virtual void post(Gecode::Space& home, Gecode::IntVarArray& x) { 447 // x-coordinate: x[0], y-coordinate: x[1], result: x[1] 448 using namespace Gecode; 449 IntVarArgs tm(4); 450 tm[0]=x[2]; tm[1]=x[3]; tm[2]=x[4]; tm[3]=x[5]; 451 Matrix<IntVarArgs> m(tm,2,2); 452 element(home, m, x[0], x[0], x[1]); 453 } 454 }; 455 456 /// %Test for matrix element with Boolean variable array and Boolean variable 457 class MatrixBoolVarBoolVarXY : public Test { 458 public: 459 /// Create and register test 460 MatrixBoolVarBoolVarXY(void) 461 : Test("Element::Matrix::BoolVar::BoolVar::XY",3+4,0,1,false) {} 462 /// %Test whether \a x is solution 463 virtual bool solution(const Assignment& x) const { 464 // x-coordinate: x[0], y-coordinate: x[1], result: x[2] 465 // remaining: matrix 466 using namespace Gecode; 467 IntArgs tm(4); 468 tm[0]=x[3]; tm[1]=x[4]; tm[2]=x[5]; tm[3]=x[6]; 469 Matrix<IntArgs> m(tm,2,2); 470 return m(x[0],x[1]) == x[2]; 471 } 472 /// Post constraint on \a x 473 virtual void post(Gecode::Space& home, Gecode::IntVarArray& x) { 474 // x-coordinate: x[0], y-coordinate: x[1], result: x[2] 475 using namespace Gecode; 476 BoolVarArgs tm(4); 477 tm[0]=channel(home,x[3]); tm[1]=channel(home,x[4]); 478 tm[2]=channel(home,x[5]); tm[3]=channel(home,x[6]); 479 Matrix<BoolVarArgs> m(tm,2,2); 480 element(home, m, x[0], x[1], channel(home,x[2])); 481 } 482 }; 483 484 /// %Test for matrix element with Boolean variable array and Boolean variable 485 class MatrixBoolVarBoolVarXX : public Test { 486 public: 487 /// Create and register test 488 MatrixBoolVarBoolVarXX(void) 489 : Test("Element::Matrix::BoolVar::BoolVar::XX",2+4,0,1,false) {} 490 /// %Test whether \a x is solution 491 virtual bool solution(const Assignment& x) const { 492 // x-coordinate: x[0], y-coordinate: x[0], result: x[1] 493 // remaining: matrix 494 using namespace Gecode; 495 IntArgs tm(4); 496 tm[0]=x[2]; tm[1]=x[3]; tm[2]=x[4]; tm[3]=x[5]; 497 Matrix<IntArgs> m(tm,2,2); 498 return m(x[0],x[0]) == x[1]; 499 } 500 /// Post constraint on \a x 501 virtual void post(Gecode::Space& home, Gecode::IntVarArray& x) { 502 // x-coordinate: x[0], y-coordinate: x[1], result: x[1] 503 using namespace Gecode; 504 BoolVarArgs tm(4); 505 tm[0]=channel(home,x[2]); tm[1]=channel(home,x[3]); 506 tm[2]=channel(home,x[4]); tm[3]=channel(home,x[5]); 507 Matrix<BoolVarArgs> m(tm,2,2); 508 element(home, m, x[0], x[0], channel(home,x[1])); 509 } 510 }; 511 512 513 514 515 /// Help class to create and register tests 516 class Create { 517 public: 518 /// %Test size-dependent optimizations 519 void optimized(int idx, int val) { 520 Gecode::IntArgs c(idx); 521 for (int i=0; i<idx; i++) 522 c[i]=std::max(val-i,0); 523 (void) new IntIntVar(Test::str(idx)+"::"+Test::str(val)+"::val",c, 524 val-8,val-1); 525 if (idx != val) 526 (void) new IntIntVar(Test::str(idx)+"::"+Test::str(val)+"::idx",c, 527 idx-8,idx-1); 528 } 529 /// Perform creation and registration 530 Create(void) { 531 using namespace Gecode; 532 IntArgs ic1({-1,1,-3,3,-4}); 533 IntArgs ic2({-1,1,-1,1,-1,1,0,0}); 534 IntArgs ic3({-1}); 535 IntArgs ic4({0,-1,2,-2,4,-3,6}); 536 IntArgs ic5({0,0,1,2,3,4}); 537 538 IntArgs bc1({0,1,1,0,1}); 539 IntArgs bc2({1,1,0,1,0,1,0,0}); 540 IntArgs bc3({1}); 541 542 (void) new IntIntVar("A",ic1,-8,8); 543 (void) new IntIntVar("B",ic2,-8,8); 544 (void) new IntIntVar("C",ic3,-8,8); 545 (void) new IntIntVar("D",ic4,-8,8); 546 547 // Test optimizations 548 { 549 int ov[] = { 550 SCHAR_MAX-1,SCHAR_MAX, 551 SHRT_MAX-1,SHRT_MAX, 552 0 553 }; 554 for (int i=0; ov[i] != 0; i++) 555 for (int j=0; ov[j] != 0; j++) 556 optimized(ov[i],ov[j]); 557 } 558 559 for (int i=-4; i<=4; i++) { 560 (void) new IntIntInt("A",ic1,i); 561 (void) new IntIntInt("B",ic2,i); 562 (void) new IntIntInt("C",ic3,i); 563 (void) new IntIntInt("D",ic4,i); 564 } 565 566 (void) new IntIntShared("A",ic1); 567 (void) new IntIntShared("B",ic2); 568 (void) new IntIntShared("C",ic3); 569 (void) new IntIntShared("D",ic4); 570 (void) new IntIntShared("E",ic5,1); 571 572 (void) new IntBoolVar("A",bc1); 573 (void) new IntBoolVar("B",bc2); 574 (void) new IntBoolVar("C",bc3); 575 576 for (int i=0; i<=1; i++) { 577 (void) new IntBoolInt("A",bc1,i); 578 (void) new IntBoolInt("B",bc2,i); 579 (void) new IntBoolInt("C",bc3,i); 580 } 581 582 (void) new VarIntVar(IPL_BND); 583 (void) new VarIntVar(IPL_DOM); 584 585 for (int i=-4; i<=4; i++) { 586 (void) new VarIntInt(IPL_BND,i); 587 (void) new VarIntInt(IPL_DOM,i); 588 } 589 590 (void) new VarIntShared(IPL_BND); 591 (void) new VarIntShared(IPL_DOM); 592 593 (void) new VarBoolVar(); 594 (void) new VarBoolInt(0); 595 (void) new VarBoolInt(1); 596 597 // Matrix tests 598 (void) new MatrixIntIntVarXY(); 599 (void) new MatrixIntIntVarXX(); 600 (void) new MatrixIntBoolVarXY(); 601 (void) new MatrixIntBoolVarXX(); 602 603 (void) new MatrixIntVarIntVarXY(); 604 (void) new MatrixIntVarIntVarXX(); 605 (void) new MatrixBoolVarBoolVarXY(); 606 (void) new MatrixBoolVarBoolVarXX(); 607 } 608 }; 609 610 Create c; 611 //@} 612 613 } 614}} 615 616// STATISTICS: test-int