3535namespace Test { namespace FlatZinc {
3636
3737 namespace {
38- // / Check that recomputation does not lose a solution
39- bool check (const std::string& output) {
38+ // / Check that recomputation does not lose solutions
39+ bool check (const std::string& output, int expected,
40+ const std::string& representative) {
4041 const std::string separator = " ----------\n " ;
4142 int solutions = 0 ;
4243 for (std::string::size_type p = 0 ;
4344 (p = output.find (separator,p)) != std::string::npos;
4445 p += separator.size ())
4546 solutions++;
46- return (solutions == 11 ) &&
47- (output.find (" A = 3;\n B = 1;\n C = 3;\n D = 1;\n E = 2;\n G = 3;\n " )
48- != std::string::npos);
47+ return (solutions == expected) &&
48+ (output.find (representative) != std::string::npos);
4949 }
5050
5151 // / Helper class to create and register test
5252 class Create {
5353 public:
5454 // / Perform creation and registration
5555 Create (void ) {
56- (void ) new FlatZincTest (" Issue166" ,
56+ (void ) new FlatZincTest (" Issue166::Original" ,
57+ " predicate gecode_global_cardinality(array [int] of var int: x, array [int] of int: cover, array [int] of var int: counts);\n \
58+ var {1,3}: A :: output_var;\n \
59+ var 2..3: B :: output_var;\n \
60+ var 2..3: C :: output_var;\n \
61+ var 2..3: D :: output_var;\n \
62+ var 2..5: E :: output_var;\n \
63+ var 1..4: F :: output_var;\n \
64+ var 2..3: G :: output_var;\n \
65+ var 2..3: H :: output_var;\n \
66+ constraint gecode_global_cardinality([A,D,1,3,3,C,1,H,B],[1,2,3],[G,F,E]) :: domain;\n \
67+ solve :: int_search([A,B,C,D,E,F,G,H],anti_first_fail,indomain_min,complete) satisfy;\n " ,
68+ " " , true , {" -a" }, [] (const std::string& output) {
69+ return check (output, 26 ,
70+ " A = 1;\n B = 2;\n C = 3;\n D = 3;\n E = 5;\n "
71+ " F = 1;\n G = 3;\n H = 3;\n " );
72+ });
73+ (void ) new FlatZincTest (" Issue166::Minimized" ,
5774" predicate gecode_global_cardinality(array [int] of var int: x, array [int] of int: cover, array [int] of var int: counts);\n \
5875var 1..3: A :: output_var;\n \
5976var 1..3: B :: output_var;\n \
@@ -63,7 +80,11 @@ var 2..3: E :: output_var;\n\
6380var 2..3: G :: output_var;\n \
6481constraint gecode_global_cardinality([3,A,D,G,E],[1,2,3],[1,B,C]) :: domain;\n \
6582solve :: int_search([D,A,E,B],input_order,indomain_random,complete) satisfy;\n " ,
66- " " , true , {" -a" , " -r" , " 0" , " -c-d" , " 8" }, check);
83+ " " , true , {" -a" , " -r" , " 0" , " -c-d" , " 8" },
84+ [] (const std::string& output) {
85+ return check (output, 11 ,
86+ " A = 3;\n B = 1;\n C = 3;\n D = 1;\n E = 2;\n G = 3;\n " );
87+ });
6788 }
6889 };
6990
0 commit comments