mirror of
https://github.com/Z3Prover/z3
synced 2025-08-05 02:40:24 +00:00
unit test updates
This commit is contained in:
parent
71acba20e2
commit
a4adb63662
1 changed files with 30 additions and 35 deletions
|
@ -241,10 +241,9 @@ namespace polysat {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
scoped_solver(std::string name): solver(lim), m_name(name) {
|
scoped_solver(std::string name): solver(lim), m_name(name) {
|
||||||
if (collect_test_records) {
|
if (collect_test_records)
|
||||||
std::cout << m_name << ":";
|
std::cout << m_name << std::flush;
|
||||||
std::cout.flush();
|
else {
|
||||||
} else {
|
|
||||||
std::cout << std::string(78, '#') << "\n\n";
|
std::cout << std::string(78, '#') << "\n\n";
|
||||||
std::cout << "START: " << m_name << "\n";
|
std::cout << "START: " << m_name << "\n";
|
||||||
}
|
}
|
||||||
|
@ -266,10 +265,8 @@ namespace polysat {
|
||||||
}
|
}
|
||||||
|
|
||||||
void check() {
|
void check() {
|
||||||
if (collect_test_records) {
|
if (collect_test_records)
|
||||||
std::cout << " ...";
|
std::cout << " ..." << std::flush;
|
||||||
std::cout.flush();
|
|
||||||
}
|
|
||||||
auto* rec = test_records.active_or_new_record();
|
auto* rec = test_records.active_or_new_record();
|
||||||
m_last_finished = nullptr;
|
m_last_finished = nullptr;
|
||||||
SASSERT(rec->m_answer == l_undef);
|
SASSERT(rec->m_answer == l_undef);
|
||||||
|
@ -287,7 +284,7 @@ namespace polysat {
|
||||||
rec->m_finished = true;
|
rec->m_finished = true;
|
||||||
m_last_finished = rec;
|
m_last_finished = rec;
|
||||||
if (collect_test_records)
|
if (collect_test_records)
|
||||||
std::cout << " " << m_last_result;
|
std::cout << " " << m_last_result << std::flush;
|
||||||
else
|
else
|
||||||
std::cout << "DONE: " << m_name << ": " << m_last_result << "\n";
|
std::cout << "DONE: " << m_name << ": " << m_last_result << "\n";
|
||||||
statistics st;
|
statistics st;
|
||||||
|
@ -1258,7 +1255,6 @@ namespace polysat {
|
||||||
static void test_quot_rem_incomplete() {
|
static void test_quot_rem_incomplete() {
|
||||||
unsigned bw = 4;
|
unsigned bw = 4;
|
||||||
scoped_solver s(__func__);
|
scoped_solver s(__func__);
|
||||||
s.set_max_conflicts(5);
|
|
||||||
auto quot = s.var(s.add_var(bw));
|
auto quot = s.var(s.add_var(bw));
|
||||||
auto rem = s.var(s.add_var(bw));
|
auto rem = s.var(s.add_var(bw));
|
||||||
auto a = s.value(rational(2), bw);
|
auto a = s.value(rational(2), bw);
|
||||||
|
@ -1278,7 +1274,6 @@ namespace polysat {
|
||||||
static void test_quot_rem_fixed() {
|
static void test_quot_rem_fixed() {
|
||||||
unsigned bw = 4;
|
unsigned bw = 4;
|
||||||
scoped_solver s(__func__);
|
scoped_solver s(__func__);
|
||||||
s.set_max_conflicts(5);
|
|
||||||
auto a = s.value(rational(2), bw);
|
auto a = s.value(rational(2), bw);
|
||||||
auto b = s.value(rational(5), bw);
|
auto b = s.value(rational(5), bw);
|
||||||
auto [quot, rem] = s.quot_rem(a, b);
|
auto [quot, rem] = s.quot_rem(a, b);
|
||||||
|
@ -1289,24 +1284,22 @@ namespace polysat {
|
||||||
|
|
||||||
static void test_quot_rem(unsigned bw = 32) {
|
static void test_quot_rem(unsigned bw = 32) {
|
||||||
scoped_solver s(__func__);
|
scoped_solver s(__func__);
|
||||||
s.set_max_conflicts(5);
|
|
||||||
auto a = s.var(s.add_var(bw));
|
auto a = s.var(s.add_var(bw));
|
||||||
auto quot = s.var(s.add_var(bw));
|
auto quot = s.var(s.add_var(bw));
|
||||||
auto rem = s.var(s.add_var(bw));
|
auto rem = s.var(s.add_var(bw));
|
||||||
auto x = a * 123;
|
auto x = a * 123;
|
||||||
auto y = 123;
|
auto y = 123;
|
||||||
// quot = udiv(a*123, 123)
|
// quot = udiv(a*123, 123)
|
||||||
s.add_eq(quot * y + rem - x);
|
s.add_eq(x, quot * y + rem); // 123*a = q*123 + r
|
||||||
s.add_diseq(a - quot);
|
s.add_diseq(a, quot); // a != quot
|
||||||
s.add_umul_noovfl(quot, y);
|
s.add_umul_noovfl(quot, y); // 123*quot < 2^K
|
||||||
s.add_ult(rem, x);
|
s.add_ult(rem, x); // r < 123*a ???
|
||||||
s.check();
|
s.check();
|
||||||
s.expect_sat();
|
s.expect_sat(); // dubious
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_quot_rem2(unsigned bw = 32) {
|
static void test_quot_rem2(unsigned bw = 32) {
|
||||||
scoped_solver s(__func__);
|
scoped_solver s(__func__);
|
||||||
s.set_max_conflicts(5);
|
|
||||||
auto q = s.var(s.add_var(bw));
|
auto q = s.var(s.add_var(bw));
|
||||||
auto r = s.var(s.add_var(bw));
|
auto r = s.var(s.add_var(bw));
|
||||||
auto idx = s.var(s.add_var(bw));
|
auto idx = s.var(s.add_var(bw));
|
||||||
|
@ -1593,12 +1586,12 @@ void tst_polysat() {
|
||||||
#if 0 // Enable this block to run a single unit test with detailed output.
|
#if 0 // Enable this block to run a single unit test with detailed output.
|
||||||
collect_test_records = false;
|
collect_test_records = false;
|
||||||
test_max_conflicts = 50;
|
test_max_conflicts = 50;
|
||||||
test_polysat::test_band5();
|
// test_polysat::test_band5();
|
||||||
// test_polysat::test_band5_clause();
|
// test_polysat::test_band5_clause();
|
||||||
// test_polysat::test_ineq_axiom1(32, 1);
|
// test_polysat::test_ineq_axiom1(32, 1);
|
||||||
// test_polysat::test_pop_conflict();
|
// test_polysat::test_pop_conflict();
|
||||||
// test_polysat::test_l2();
|
// test_polysat::test_l2();
|
||||||
// test_polysat::test_ineq1();
|
test_polysat::test_ineq1();
|
||||||
// test_polysat::test_quot_rem();
|
// test_polysat::test_quot_rem();
|
||||||
// test_polysat::test_ineq_non_axiom1(32, 3);
|
// test_polysat::test_ineq_non_axiom1(32, 3);
|
||||||
// test_polysat::test_monot_bounds_full();
|
// test_polysat::test_monot_bounds_full();
|
||||||
|
@ -1662,6 +1655,23 @@ void tst_polysat() {
|
||||||
RUN(test_polysat::test_fixed_point_arith_mul_div_inverse());
|
RUN(test_polysat::test_fixed_point_arith_mul_div_inverse());
|
||||||
RUN(test_polysat::test_fixed_point_arith_div_mul_inverse());
|
RUN(test_polysat::test_fixed_point_arith_div_mul_inverse());
|
||||||
|
|
||||||
|
RUN(test_polysat::test_quot_rem_incomplete());
|
||||||
|
RUN(test_polysat::test_quot_rem_fixed());
|
||||||
|
RUN(test_polysat::test_quot_rem());
|
||||||
|
RUN(test_polysat::test_quot_rem2());
|
||||||
|
|
||||||
|
RUN(test_polysat::test_band1());
|
||||||
|
RUN(test_polysat::test_band2());
|
||||||
|
RUN(test_polysat::test_band3());
|
||||||
|
RUN(test_polysat::test_band4());
|
||||||
|
RUN(test_polysat::test_band5());
|
||||||
|
RUN(test_polysat::test_band5_clause());
|
||||||
|
|
||||||
|
RUN(test_polysat::test_fi_zero());
|
||||||
|
RUN(test_polysat::test_fi_nonzero());
|
||||||
|
RUN(test_polysat::test_fi_nonmax());
|
||||||
|
RUN(test_polysat::test_fi_disequal_mild());
|
||||||
|
|
||||||
RUN(test_polysat::test_ineq_axiom1());
|
RUN(test_polysat::test_ineq_axiom1());
|
||||||
RUN(test_polysat::test_ineq_axiom2());
|
RUN(test_polysat::test_ineq_axiom2());
|
||||||
RUN(test_polysat::test_ineq_axiom3());
|
RUN(test_polysat::test_ineq_axiom3());
|
||||||
|
@ -1671,21 +1681,6 @@ void tst_polysat() {
|
||||||
RUN(test_polysat::test_ineq_non_axiom1());
|
RUN(test_polysat::test_ineq_non_axiom1());
|
||||||
RUN(test_polysat::test_ineq_non_axiom4());
|
RUN(test_polysat::test_ineq_non_axiom4());
|
||||||
|
|
||||||
RUN(test_polysat::test_quot_rem_incomplete());
|
|
||||||
RUN(test_polysat::test_quot_rem_fixed());
|
|
||||||
RUN(test_polysat::test_band1());
|
|
||||||
RUN(test_polysat::test_band2());
|
|
||||||
RUN(test_polysat::test_band3());
|
|
||||||
RUN(test_polysat::test_band4());
|
|
||||||
RUN(test_polysat::test_band5());
|
|
||||||
RUN(test_polysat::test_band5_clause());
|
|
||||||
RUN(test_polysat::test_quot_rem());
|
|
||||||
|
|
||||||
RUN(test_polysat::test_fi_zero());
|
|
||||||
RUN(test_polysat::test_fi_nonzero());
|
|
||||||
RUN(test_polysat::test_fi_nonmax());
|
|
||||||
RUN(test_polysat::test_fi_disequal_mild());
|
|
||||||
|
|
||||||
// test_fi::exhaustive();
|
// test_fi::exhaustive();
|
||||||
// test_fi::randomized();
|
// test_fi::randomized();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue