mirror of
https://github.com/Z3Prover/z3
synced 2025-04-23 17:15:31 +00:00
consolidate literals
This commit is contained in:
parent
c959e28d4a
commit
03d2c5f3d0
9 changed files with 299 additions and 323 deletions
|
@ -13,7 +13,7 @@ static void _init_solver(sat::solver& s)
|
|||
s.mk_var();
|
||||
}
|
||||
|
||||
static void _mk_clause4(sat::solver& s, sat::literal w, sat::literal x, sat::literal y, sat::literal z)
|
||||
static void _mk_clause4(sat::solver& s, sat::literal const & w, sat::literal const& x, sat::literal const& y, sat::literal const& z)
|
||||
{
|
||||
sat::literal lits[] = {w, x, y, z};
|
||||
s.mk_clause(4, lits);
|
||||
|
@ -41,10 +41,10 @@ static void tst_single_mux() {
|
|||
sat::solver s({}, r);
|
||||
_init_solver(s);
|
||||
|
||||
s.mk_clause({ 0, true }, { 1, true }, { 3, false });
|
||||
s.mk_clause({ 0, true }, { 1, false }, { 3, true });
|
||||
s.mk_clause({ 0, false }, { 2, true }, { 3, false });
|
||||
s.mk_clause({ 0, false }, { 2, false }, { 3, true });
|
||||
s.mk_clause(sat::literal(0, true), sat::literal(1, true), sat::literal(3, false));
|
||||
s.mk_clause(sat::literal(0, true), sat::literal(1, false), sat::literal(3, true));
|
||||
s.mk_clause(sat::literal(0, false), sat::literal(2, true), sat::literal(3, false));
|
||||
s.mk_clause(sat::literal(0, false), sat::literal(2, false), sat::literal(3, true));
|
||||
|
||||
_check_finder(s, std::mem_fn(&sat::npn3_finder::set_on_mux), "mux", 7, 0, 3, 5);
|
||||
}
|
||||
|
@ -54,12 +54,12 @@ static void tst_single_maj() {
|
|||
sat::solver s({}, r);
|
||||
_init_solver(s);
|
||||
|
||||
s.mk_clause({ 0, false }, { 1, false }, { 3, true });
|
||||
s.mk_clause({ 0, false }, { 2, false }, { 3, true });
|
||||
s.mk_clause({ 1, false }, { 2, false }, { 3, true });
|
||||
s.mk_clause({ 0, true }, { 1, true }, { 3, false });
|
||||
s.mk_clause({ 0, true }, { 2, true }, { 3, false });
|
||||
s.mk_clause({ 1, true }, { 2, true }, { 3, false });
|
||||
s.mk_clause(sat::literal(0, false), sat::literal(1, false), sat::literal(3, true));
|
||||
s.mk_clause(sat::literal(0, false), sat::literal(2, false), sat::literal(3, true));
|
||||
s.mk_clause(sat::literal(1, false), sat::literal(2, false), sat::literal(3, true));
|
||||
s.mk_clause(sat::literal(0, true), sat::literal(1, true), sat::literal(3, false));
|
||||
s.mk_clause(sat::literal(0, true), sat::literal(2, true), sat::literal(3, false));
|
||||
s.mk_clause(sat::literal(1, true), sat::literal(2, true), sat::literal(3, false));
|
||||
|
||||
_check_finder(s, std::mem_fn(&sat::npn3_finder::set_on_maj), "maj", 6, 0, 2, 4);
|
||||
}
|
||||
|
@ -69,10 +69,10 @@ static void tst_single_orand() {
|
|||
sat::solver s({}, r);
|
||||
_init_solver(s);
|
||||
|
||||
s.mk_clause({0, false}, {3, true});
|
||||
s.mk_clause({1, false}, {2, false}, {3, true});
|
||||
s.mk_clause({0, true}, {1, true}, {3, false});
|
||||
s.mk_clause({0, true}, {2, true}, {3, false});
|
||||
s.mk_clause(sat::literal(0, false), sat::literal(3, true));
|
||||
s.mk_clause(sat::literal(1, false), sat::literal(2, false), sat::literal(3, true));
|
||||
s.mk_clause(sat::literal(0, true), sat::literal(1, true), sat::literal(3, false));
|
||||
s.mk_clause(sat::literal(0, true), sat::literal(2, true), sat::literal(3, false));
|
||||
|
||||
_check_finder(s, std::mem_fn(&sat::npn3_finder::set_on_orand), "orand", 6, 0, 2, 4);
|
||||
}
|
||||
|
@ -82,11 +82,11 @@ static void tst_single_and() {
|
|||
sat::solver s({}, r);
|
||||
_init_solver(s);
|
||||
|
||||
sat::literal ls1[] = {{0, true}, {1, true}, {2, true}, {3, false}};
|
||||
sat::literal ls1[] = {sat::literal(0, true), sat::literal(1, true), sat::literal(2, true), sat::literal(3, false)};
|
||||
s.mk_clause(4, ls1);
|
||||
s.mk_clause({0, false}, {3, true});
|
||||
s.mk_clause({1, false}, {3, true});
|
||||
s.mk_clause({2, false}, {3, true});
|
||||
s.mk_clause(sat::literal(0, false), sat::literal(3, true));
|
||||
s.mk_clause(sat::literal(1, false), sat::literal(3, true));
|
||||
s.mk_clause(sat::literal(2, false), sat::literal(3, true));
|
||||
|
||||
_check_finder(s, std::mem_fn(&sat::npn3_finder::set_on_and), "and", 6, 0, 2, 4);
|
||||
}
|
||||
|
@ -96,14 +96,14 @@ static void tst_single_xor() {
|
|||
sat::solver s({}, r);
|
||||
_init_solver(s);
|
||||
|
||||
_mk_clause4(s, {0, true}, {1, false}, {2, false}, {3, false});
|
||||
_mk_clause4(s, {0, false}, {1, true}, {2, false}, {3, false});
|
||||
_mk_clause4(s, {0, false}, {1, false}, {2, true}, {3, false});
|
||||
_mk_clause4(s, {0, false}, {1, false}, {2, false}, {3, true});
|
||||
_mk_clause4(s, {0, false}, {1, true}, {2, true}, {3, true});
|
||||
_mk_clause4(s, {0, true}, {1, false}, {2, true}, {3, true});
|
||||
_mk_clause4(s, {0, true}, {1, true}, {2, false}, {3, true});
|
||||
_mk_clause4(s, {0, true}, {1, true}, {2, true}, {3, false});
|
||||
_mk_clause4(s, sat::literal(0, true), sat::literal(1, false), sat::literal(2, false), sat::literal(3, false));
|
||||
_mk_clause4(s, sat::literal(0, false), sat::literal(1, true), sat::literal(2, false), sat::literal(3, false));
|
||||
_mk_clause4(s, sat::literal(0, false), sat::literal(1, false), sat::literal(2, true), sat::literal(3, false));
|
||||
_mk_clause4(s, sat::literal(0, false), sat::literal(1, false), sat::literal(2, false), sat::literal(3, true));
|
||||
_mk_clause4(s, sat::literal(0, false), sat::literal(1, true), sat::literal(2, true), sat::literal(3, true));
|
||||
_mk_clause4(s, sat::literal(0, true), sat::literal(1, false), sat::literal(2, true), sat::literal(3, true));
|
||||
_mk_clause4(s, sat::literal(0, true), sat::literal(1, true), sat::literal(2, false), sat::literal(3, true));
|
||||
_mk_clause4(s, sat::literal(0, true), sat::literal(1, true), sat::literal(2, true), sat::literal(3, false));
|
||||
|
||||
_check_finder(s, std::mem_fn(&sat::npn3_finder::set_on_xor), "xor", 1, 3, 4, 6);
|
||||
}
|
||||
|
@ -113,12 +113,12 @@ static void tst_single_andxor() {
|
|||
sat::solver s({}, r);
|
||||
_init_solver(s);
|
||||
|
||||
s.mk_clause({0, true}, {1, false}, {3, true});
|
||||
s.mk_clause({0, true}, {2, false}, {3, true});
|
||||
_mk_clause4(s, {0, true}, {1, true}, {2, true}, {3, false});
|
||||
s.mk_clause({0, false}, {1, false}, {3, false});
|
||||
s.mk_clause({0, false}, {2, false}, {3, false});
|
||||
_mk_clause4(s, {0, false}, {1, true}, {2, true}, {3, true});
|
||||
s.mk_clause(sat::literal(0, true), sat::literal(1, false), sat::literal(3, true));
|
||||
s.mk_clause(sat::literal(0, true), sat::literal(2, false), sat::literal(3, true));
|
||||
_mk_clause4(s, sat::literal(0, true), sat::literal(1, true), sat::literal(2, true), sat::literal(3, false));
|
||||
s.mk_clause(sat::literal(0, false), sat::literal(1, false), sat::literal(3, false));
|
||||
s.mk_clause(sat::literal(0, false), sat::literal(2, false), sat::literal(3, false));
|
||||
_mk_clause4(s, sat::literal(0, false), sat::literal(1, true), sat::literal(2, true), sat::literal(3, true));
|
||||
|
||||
_check_finder(s, std::mem_fn(&sat::npn3_finder::set_on_andxor), "andxor", 0, 6, 2, 4);
|
||||
}
|
||||
|
@ -128,11 +128,11 @@ static void tst_single_xorand() {
|
|||
sat::solver s({}, r);
|
||||
_init_solver(s);
|
||||
|
||||
s.mk_clause({0, false}, {3, true});
|
||||
s.mk_clause({1, false}, {2, false}, {3, true});
|
||||
s.mk_clause({1, true}, {2, true}, {3, true});
|
||||
_mk_clause4(s, {0, true}, {1, true}, {2, false}, {3, false});
|
||||
_mk_clause4(s, {0, true}, {1, false}, {2, true}, {3, false});
|
||||
s.mk_clause(sat::literal(0, false), sat::literal(3, true));
|
||||
s.mk_clause(sat::literal(1, false), sat::literal(2, false), sat::literal(3, true));
|
||||
s.mk_clause(sat::literal(1, true), sat::literal(2, true), sat::literal(3, true));
|
||||
_mk_clause4(s, sat::literal(0, true), sat::literal(1, true), sat::literal(2, false), sat::literal(3, false));
|
||||
_mk_clause4(s, sat::literal(0, true), sat::literal(1, false), sat::literal(2, true), sat::literal(3, false));
|
||||
|
||||
_check_finder(s, std::mem_fn(&sat::npn3_finder::set_on_xorand), "xorand", 6, 0, 3, 5);
|
||||
}
|
||||
|
@ -142,11 +142,11 @@ static void tst_single_gamble() {
|
|||
sat::solver s({}, r);
|
||||
_init_solver(s);
|
||||
|
||||
s.mk_clause({0, true}, {1, false}, {3, true});
|
||||
s.mk_clause({1, true}, {2, false}, {3, true});
|
||||
s.mk_clause({0, false}, {2, true}, {3, true});
|
||||
_mk_clause4(s, {0, false}, {1, false}, {2, false}, {3, false});
|
||||
_mk_clause4(s, {0, true}, {1, true}, {2, true}, {3, false});
|
||||
s.mk_clause(sat::literal(0, true), sat::literal(1, false), sat::literal(3, true));
|
||||
s.mk_clause(sat::literal(1, true), sat::literal(2, false), sat::literal(3, true));
|
||||
s.mk_clause(sat::literal(0, false), sat::literal(2, true), sat::literal(3, true));
|
||||
_mk_clause4(s, sat::literal(0, false), sat::literal(1, false), sat::literal(2, false), sat::literal(3, false));
|
||||
_mk_clause4(s, sat::literal(0, true), sat::literal(1, true), sat::literal(2, true), sat::literal(3, false));
|
||||
|
||||
_check_finder(s, std::mem_fn(&sat::npn3_finder::set_on_gamble), "gamble", 6, 0, 2, 4);
|
||||
}
|
||||
|
@ -156,13 +156,13 @@ static void tst_single_onehot() {
|
|||
sat::solver s({}, r);
|
||||
_init_solver(s);
|
||||
|
||||
s.mk_clause({0, true}, {1, true}, {3, true});
|
||||
s.mk_clause({0, true}, {2, true}, {3, true});
|
||||
s.mk_clause({1, true}, {2, true}, {3, true});
|
||||
_mk_clause4(s, {0, false}, {1, false}, {2, false}, {3, true});
|
||||
_mk_clause4(s, {0, true}, {1, false}, {2, false}, {3, false});
|
||||
_mk_clause4(s, {0, false}, {1, true}, {2, false}, {3, false});
|
||||
_mk_clause4(s, {0, false}, {1, false}, {2, true}, {3, false});
|
||||
s.mk_clause(sat::literal(0, true), sat::literal(1, true), sat::literal(3, true));
|
||||
s.mk_clause(sat::literal(0, true), sat::literal(2, true), sat::literal(3, true));
|
||||
s.mk_clause(sat::literal(1, true), sat::literal(2, true), sat::literal(3, true));
|
||||
_mk_clause4(s, sat::literal(0, false), sat::literal(1, false), sat::literal(2, false), sat::literal(3, true));
|
||||
_mk_clause4(s, sat::literal(0, true), sat::literal(1, false), sat::literal(2, false), sat::literal(3, false));
|
||||
_mk_clause4(s, sat::literal(0, false), sat::literal(1, true), sat::literal(2, false), sat::literal(3, false));
|
||||
_mk_clause4(s, sat::literal(0, false), sat::literal(1, false), sat::literal(2, true), sat::literal(3, false));
|
||||
|
||||
_check_finder(s, std::mem_fn(&sat::npn3_finder::set_on_onehot), "onehot", 6, 0, 2, 4);
|
||||
}
|
||||
|
@ -172,11 +172,11 @@ static void tst_single_dot() {
|
|||
sat::solver s({}, r);
|
||||
_init_solver(s);
|
||||
|
||||
s.mk_clause({0, false}, {2, false}, {3, true});
|
||||
s.mk_clause({0, true}, {1, true}, {3, true});
|
||||
s.mk_clause({0, true}, {2, true}, {3, true});
|
||||
s.mk_clause({0, false}, {2, true}, {3, false});
|
||||
_mk_clause4(s, {0, true}, {1, false}, {2, false}, {3, false});
|
||||
s.mk_clause(sat::literal(0, false), sat::literal(2, false), sat::literal(3, true));
|
||||
s.mk_clause(sat::literal(0, true), sat::literal(1, true), sat::literal(3, true));
|
||||
s.mk_clause(sat::literal(0, true), sat::literal(2, true), sat::literal(3, true));
|
||||
s.mk_clause(sat::literal(0, false), sat::literal(2, true), sat::literal(3, false));
|
||||
_mk_clause4(s, sat::literal(0, true), sat::literal(1, false), sat::literal(2, false), sat::literal(3, false));
|
||||
|
||||
_check_finder(s, std::mem_fn(&sat::npn3_finder::set_on_dot), "dot", 6, 0, 2, 4);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue