3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-22 00:26:38 +00:00

Wrap polysat tests in class

This commit is contained in:
Jakob Rath 2022-01-12 13:42:04 +01:00
parent 5886a8873c
commit e0e03b3fc5
2 changed files with 105 additions and 93 deletions

View file

@ -76,6 +76,7 @@ namespace polysat {
friend class inf_saturate;
friend class constraint_manager;
friend class scoped_solverv;
friend class test_polysat;
reslimit& m_lim;
params_ref m_params;

View file

@ -4,7 +4,58 @@
#include "parsers/smt2/smt2parser.h"
#include <vector>
namespace {
using namespace dd;
void permute_args(unsigned k, pdd& a, pdd& b, pdd& c) {
SASSERT(k < 6);
unsigned i = k % 3;
unsigned j = k % 2;
if (i == 1)
std::swap(a, b);
else if (i == 2)
std::swap(a, c);
if (j == 1)
std::swap(b, c);
}
void permute_args(unsigned n, pdd& a, pdd& b, pdd& c, pdd& d) {
SASSERT(n < 24);
switch (n % 4) {
case 1:
std::swap(a, b);
break;
case 2:
std::swap(a, c);
break;
case 3:
std::swap(a, d);
break;
default:
break;
}
switch (n % 3) {
case 1:
std::swap(b, c);
break;
case 2:
std::swap(b, d);
break;
default:
break;
}
switch (n % 2) {
case 1:
std::swap(c, d);
break;
default:
break;
}
}
}
namespace polysat {
// test resolve, factoring routines
// auxiliary
@ -64,6 +115,9 @@ namespace polysat {
};
class test_polysat {
public:
/**
* Testing the solver's internal state.
*/
@ -738,52 +792,6 @@ namespace polysat {
s.expect_unsat();
}
void permute_args(unsigned k, pdd& a, pdd& b, pdd& c) {
SASSERT(k < 6);
unsigned i = k % 3;
unsigned j = k % 2;
if (i == 1)
std::swap(a, b);
else if (i == 2)
std::swap(a, c);
if (j == 1)
std::swap(b, c);
}
void permute_args(unsigned n, pdd& a, pdd& b, pdd& c, pdd& d) {
SASSERT(n < 24);
switch (n % 4) {
case 1:
std::swap(a, b);
break;
case 2:
std::swap(a, c);
break;
case 3:
std::swap(a, d);
break;
default:
break;
}
switch (n % 3) {
case 1:
std::swap(b, c);
break;
case 2:
std::swap(b, d);
break;
default:
break;
}
switch (n % 2) {
case 1:
std::swap(c, d);
break;
default:
break;
}
}
// xy < xz and !Omega(x*y) => y < z
static void test_ineq_axiom1(unsigned bw = 32) {
auto const bound = rational::power_of_two(bw/2);
@ -1026,7 +1034,6 @@ namespace polysat {
}
// Goal: we probably mix up polysat variables and PDD variables at several points; try to uncover such cases
// NOTE: actually, add_var seems to keep them in sync, so this is not an issue at the moment (but we should still test it later)
// static void test_mixed_vars() {
@ -1040,9 +1047,11 @@ namespace polysat {
// // Expected result:
// }
}; // class test_polysat
// convert assertions into internal solver state
// support small grammar of formulas.
pdd to_pdd(ast_manager& m, solver& s, obj_map<expr, pdd*>& expr2pdd, expr* e) {
pdd* r = nullptr;
if (expr2pdd.find(e, r))
@ -1155,77 +1164,79 @@ namespace polysat {
for (auto const& [k,v] : expr2pdd)
dealloc(v);
}
}
} // namespace polysat
void tst_polysat() {
using namespace polysat;
polysat::test_band();
test_polysat::test_band();
return;
polysat::test_quot_rem();
test_polysat::test_quot_rem();
return;
polysat::test_ineq_axiom1();
polysat::test_ineq_axiom2();
polysat::test_ineq_axiom3();
polysat::test_ineq_axiom4();
polysat::test_ineq_axiom5();
polysat::test_ineq_axiom6();
test_polysat::test_ineq_axiom1();
test_polysat::test_ineq_axiom2();
test_polysat::test_ineq_axiom3();
test_polysat::test_ineq_axiom4();
test_polysat::test_ineq_axiom5();
test_polysat::test_ineq_axiom6();
return;
polysat::test_ineq_basic4();
test_polysat::test_ineq_basic4();
//return;
polysat::test_ineq_basic6();
test_polysat::test_ineq_basic6();
// polysat::test_monot_bounds(8);
// test_polysat::test_monot_bounds(8);
polysat::test_add_conflicts();
polysat::test_wlist();
polysat::test_l1();
polysat::test_l2();
polysat::test_l3();
polysat::test_l4();
polysat::test_l5();
polysat::test_p1();
polysat::test_p2();
polysat::test_p3();
test_polysat::test_add_conflicts();
test_polysat::test_wlist();
test_polysat::test_l1();
test_polysat::test_l2();
test_polysat::test_l3();
test_polysat::test_l4();
test_polysat::test_l5();
test_polysat::test_p1();
test_polysat::test_p2();
test_polysat::test_p3();
polysat::test_ineq_basic1();
polysat::test_ineq_basic2();
polysat::test_ineq_basic3();
polysat::test_ineq_basic4();
polysat::test_ineq_basic5();
polysat::test_ineq_basic6();
test_polysat::test_ineq_basic1();
test_polysat::test_ineq_basic2();
test_polysat::test_ineq_basic3();
test_polysat::test_ineq_basic4();
test_polysat::test_ineq_basic5();
test_polysat::test_ineq_basic6();
polysat::test_cjust();
polysat::test_subst();
polysat::test_monot_bounds(2);
test_polysat::test_cjust();
test_polysat::test_subst();
test_polysat::test_monot_bounds(2);
polysat::test_var_minimize();
test_polysat::test_var_minimize();
polysat::test_ineq1();
polysat::test_ineq2();
polysat::test_monot();
test_polysat::test_ineq1();
test_polysat::test_ineq2();
test_polysat::test_monot();
return;
polysat::test_ineq_axiom1();
polysat::test_ineq_axiom2();
polysat::test_ineq_axiom3();
polysat::test_ineq_axiom4();
polysat::test_ineq_axiom5();
polysat::test_ineq_axiom6();
test_polysat::test_ineq_axiom1();
test_polysat::test_ineq_axiom2();
test_polysat::test_ineq_axiom3();
test_polysat::test_ineq_axiom4();
test_polysat::test_ineq_axiom5();
test_polysat::test_ineq_axiom6();
#if 0
polysat::test_ineq_non_axiom4(32, 5);
test_polysat::test_ineq_non_axiom4(32, 5);
#endif
// inefficient conflicts:
// Takes time: polysat::test_monot_bounds_full();
// Takes time: test_polysat::test_monot_bounds_full();
polysat::test_monot_bounds_simple(8);
polysat::test_fixed_point_arith_div_mul_inverse();
test_polysat::test_monot_bounds_simple(8);
test_polysat::test_fixed_point_arith_div_mul_inverse();
}