39 bool check(
const std::string& output,
int expected,
40 const std::string& representative) {
41 const std::string separator =
"----------\n";
43 for (std::string::size_type p = 0;
44 (p = output.find(separator,p)) != std::string::npos;
45 p += separator.size())
47 return (solutions == expected) &&
48 (output.find(representative) != std::string::npos);
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\
58var {1,3}: A :: output_var;\n\
59var 2..3: B :: output_var;\n\
60var 2..3: C :: output_var;\n\
61var 2..3: D :: output_var;\n\
62var 2..5: E :: output_var;\n\
63var 1..4: F :: output_var;\n\
64var 2..3: G :: output_var;\n\
65var 2..3: H :: output_var;\n\
66constraint gecode_global_cardinality([A,D,1,3,3,C,1,H,B],[1,2,3],[G,F,E]) :: domain;\n\
67solve :: 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;\nB = 2;\nC = 3;\nD = 3;\nE = 5;\n"
71 "F = 1;\nG = 3;\nH = 3;\n");
73 (void)
new FlatZincTest(
"Issue166::Minimized",
74"predicate gecode_global_cardinality(array [int] of var int: x, array [int] of int: cover, array [int] of var int: counts);\n\
75var 1..3: A :: output_var;\n\
76var 1..3: B :: output_var;\n\
77var 1..3: C :: output_var;\n\
78var 1..2: D :: output_var;\n\
79var 2..3: E :: output_var;\n\
80var 2..3: G :: output_var;\n\
81constraint gecode_global_cardinality([3,A,D,G,E],[1,2,3],[1,B,C]) :: domain;\n\
82solve :: int_search([D,A,E,B],input_order,indomain_random,complete) satisfy;\n",
83 "",
true, {
"-a",
"-r",
"0",
"-c-d",
"8"},
84 [] (
const std::string& output) {
85 return check(output, 11,
86 "A = 3;\nB = 1;\nC = 3;\nD = 1;\nE = 2;\nG = 3;\n");
void check(const FloatVal &n, const char *l)
Check whether float n is a valid number, otherwise throw out of limits exception with information l.
int solutions(TestSpace *c, Gecode::Search::Options &o, Gecode::Support::RandomGenerator &rand, int maxNbSol=-1)
Find number of solutions.