TEST(Constraints, Basic) { typedef Variable<string, set_property_space<int>> Vars; Vars A("A"); Vars B("B"); Problem<Vars> p; // check empty problem EXPECT_EQ("{}",toString(p)); EXPECT_EQ("{}",toString(p.solve())); // add a constraint p.add(sub(A, B)); EXPECT_EQ("{\n\tA ⊑ B\n}",toString(p)); EXPECT_EQ("{A->{},B->{}}",toString(p.solve())); // add another constraints std::set<int> s = { 1, 2 }; p.add(sub(s,A)); EXPECT_EQ("{\n\tA ⊑ B,\n\t{1,2} ⊑ A\n}",toString(p)); EXPECT_EQ("{A->{1,2},B->{1,2}}",toString(p.solve())); // and one more std::set<int> s2 = { 3 }; p.add(sub(s2,B)); EXPECT_EQ("{\n\tA ⊑ B,\n\t{1,2} ⊑ A,\n\t{3} ⊑ B\n}",toString(p)); EXPECT_EQ("{A->{1,2},B->{1,2,3}}",toString(p.solve())); }