mirror of
https://github.com/Z3Prover/z3
synced 2025-08-22 02:57:50 +00:00
ensure that assertions within the unit tests are exercised in all build modes, remove special handling of SASSERT for release mode #1163
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
3f8b63f5a8
commit
b1298d7bde
67 changed files with 1277 additions and 1285 deletions
|
@ -101,10 +101,10 @@ static void tst_isolate_roots(polynomial_ref const & p, unsigned prec, mpbq_mana
|
|||
std::cout << "num. roots: " << roots.size() + lowers.size() << "\n";
|
||||
std::cout << "sign var(-oo): " << um.sign_variations_at_minus_inf(sseq) << "\n";
|
||||
std::cout << "sign var(+oo): " << um.sign_variations_at_plus_inf(sseq) << "\n";
|
||||
SASSERT(roots.size() + lowers.size() == um.sign_variations_at_minus_inf(sseq) - um.sign_variations_at_plus_inf(sseq));
|
||||
ENSURE(roots.size() + lowers.size() == um.sign_variations_at_minus_inf(sseq) - um.sign_variations_at_plus_inf(sseq));
|
||||
std::cout << "roots:";
|
||||
for (unsigned i = 0; i < roots.size(); i++) {
|
||||
SASSERT(um.eval_sign_at(q.size(), q.c_ptr(), roots[i]) == 0);
|
||||
ENSURE(um.eval_sign_at(q.size(), q.c_ptr(), roots[i]) == 0);
|
||||
std::cout << " "; bqm.display_decimal(std::cout, roots[i], prec);
|
||||
}
|
||||
{
|
||||
|
@ -118,7 +118,7 @@ static void tst_isolate_roots(polynomial_ref const & p, unsigned prec, mpbq_mana
|
|||
bqm.display_decimal(std::cout, uppers[i], prec);
|
||||
std::cout << ")";
|
||||
// Check interval with Sturm sequence. Small detail: Sturm sequence is for close intervals.
|
||||
SASSERT(um.eval_sign_at(q.size(), q.c_ptr(), lowers[i]) == 0 ||
|
||||
ENSURE(um.eval_sign_at(q.size(), q.c_ptr(), lowers[i]) == 0 ||
|
||||
um.eval_sign_at(q.size(), q.c_ptr(), uppers[i]) == 0 ||
|
||||
um.sign_variations_at(sseq, lowers[i]) - um.sign_variations_at(sseq, uppers[i]) == 1);
|
||||
// Fourier sequence may also be used to check if the interval is isolating
|
||||
|
@ -155,7 +155,7 @@ static void tst_isolate_roots(polynomial_ref const & p, unsigned prec = 5) {
|
|||
}
|
||||
|
||||
static void check_roots(mpbq_vector const & roots, mpbq_vector const & lowers, mpbq_vector const & uppers, unsigned expected_sz, rational const * expected_roots) {
|
||||
SASSERT(expected_sz == roots.size() + lowers.size());
|
||||
ENSURE(expected_sz == roots.size() + lowers.size());
|
||||
svector<bool> visited;
|
||||
visited.resize(expected_sz, false);
|
||||
for (unsigned i = 0; i < expected_sz; i++) {
|
||||
|
@ -163,7 +163,7 @@ static void check_roots(mpbq_vector const & roots, mpbq_vector const & lowers, m
|
|||
bool found = false;
|
||||
for (unsigned j = 0; j < roots.size(); j++) {
|
||||
if (to_rational(roots[j]) == r) {
|
||||
SASSERT(!visited[j]);
|
||||
ENSURE(!visited[j]);
|
||||
VERIFY(!found);
|
||||
found = true;
|
||||
visited[j] = true;
|
||||
|
@ -173,12 +173,12 @@ static void check_roots(mpbq_vector const & roots, mpbq_vector const & lowers, m
|
|||
unsigned j_prime = j + roots.size();
|
||||
if (to_rational(lowers[j]) < r && r < to_rational(uppers[j])) {
|
||||
VERIFY(!found);
|
||||
SASSERT(!visited[j_prime]);
|
||||
ENSURE(!visited[j_prime]);
|
||||
found = true;
|
||||
visited[j_prime] = true;
|
||||
}
|
||||
}
|
||||
SASSERT(found);
|
||||
ENSURE(found);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -292,21 +292,21 @@ static void tst_remove_one_half() {
|
|||
upolynomial::scoped_numeral_vector _p(um), _q(um), _r(um);
|
||||
um.to_numeral_vector(p, _p);
|
||||
um.to_numeral_vector(r, _r);
|
||||
SASSERT(um.has_one_half_root(_p.size(), _p.c_ptr()));
|
||||
ENSURE(um.has_one_half_root(_p.size(), _p.c_ptr()));
|
||||
um.remove_one_half_root(_p.size(), _p.c_ptr(), _q);
|
||||
SASSERT(!um.has_one_half_root(_q.size(), _q.c_ptr()));
|
||||
ENSURE(!um.has_one_half_root(_q.size(), _q.c_ptr()));
|
||||
std::cout << "_p: "; um.display(std::cout, _p); std::cout << "\n";
|
||||
std::cout << "_r: "; um.display(std::cout, _r); std::cout << "\n";
|
||||
std::cout << "_q: "; um.display(std::cout, _q); std::cout << "\n";
|
||||
SASSERT(um.eq(_q, _r));
|
||||
ENSURE(um.eq(_q, _r));
|
||||
|
||||
p = (((x^5) - 1000000000)^3)*((3*x - 10000000)^2)*((10*x - 632)^2);
|
||||
um.to_numeral_vector(p, _p);
|
||||
SASSERT(!um.has_one_half_root(_p.size(), _p.c_ptr()));
|
||||
ENSURE(!um.has_one_half_root(_p.size(), _p.c_ptr()));
|
||||
|
||||
p = (x - 2)*(x - 4)*(x - 8)*(x - 16)*(x - 32)*(x - 64)*(2*x - 1)*(4*x - 1)*(8*x - 1)*(16*x - 1)*(32*x - 1);
|
||||
um.to_numeral_vector(p, _p);
|
||||
SASSERT(um.has_one_half_root(_p.size(), _p.c_ptr()));
|
||||
ENSURE(um.has_one_half_root(_p.size(), _p.c_ptr()));
|
||||
}
|
||||
|
||||
template<typename pmanager>
|
||||
|
@ -503,7 +503,7 @@ static void tst_refinable(polynomial_ref const & p, mpbq_manager & bqm, mpbq & a
|
|||
}
|
||||
else {
|
||||
std::cout << "new root: " << bqm.to_string(a) << "\n";
|
||||
SASSERT(um.eval_sign_at(_p.size(), _p.c_ptr(), a) == 0);
|
||||
ENSURE(um.eval_sign_at(_p.size(), _p.c_ptr(), a) == 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -608,13 +608,13 @@ static void tst_translate_q() {
|
|||
upolynomial::manager um(rl, nm);
|
||||
upolynomial::scoped_numeral_vector _p(um), _q(um);
|
||||
um.to_numeral_vector(p, _p);
|
||||
SASSERT(um.eval_sign_at(_p.size(), _p.c_ptr(), mpq(1)) == 0);
|
||||
SASSERT(um.eval_sign_at(_p.size(), _p.c_ptr(), mpq(2)) == 0);
|
||||
SASSERT(um.eval_sign_at(_p.size(), _p.c_ptr(), mpq(3)) == 0);
|
||||
SASSERT(um.eval_sign_at(_p.size(), _p.c_ptr(), mpq(4)) == 0);
|
||||
SASSERT(um.eval_sign_at(_p.size(), _p.c_ptr(), mpq(-1)) != 0);
|
||||
SASSERT(um.eval_sign_at(_p.size(), _p.c_ptr(), mpq(5)) != 0);
|
||||
SASSERT(um.eval_sign_at(_p.size(), _p.c_ptr(), mpq(-2)) != 0);
|
||||
ENSURE(um.eval_sign_at(_p.size(), _p.c_ptr(), mpq(1)) == 0);
|
||||
ENSURE(um.eval_sign_at(_p.size(), _p.c_ptr(), mpq(2)) == 0);
|
||||
ENSURE(um.eval_sign_at(_p.size(), _p.c_ptr(), mpq(3)) == 0);
|
||||
ENSURE(um.eval_sign_at(_p.size(), _p.c_ptr(), mpq(4)) == 0);
|
||||
ENSURE(um.eval_sign_at(_p.size(), _p.c_ptr(), mpq(-1)) != 0);
|
||||
ENSURE(um.eval_sign_at(_p.size(), _p.c_ptr(), mpq(5)) != 0);
|
||||
ENSURE(um.eval_sign_at(_p.size(), _p.c_ptr(), mpq(-2)) != 0);
|
||||
scoped_mpq c(nm);
|
||||
nm.set(c, 1, 3);
|
||||
scoped_mpq r1(nm);
|
||||
|
@ -623,32 +623,32 @@ static void tst_translate_q() {
|
|||
scoped_mpq r2(nm);
|
||||
r2 = 3;
|
||||
r2 -= c;
|
||||
SASSERT(um.eval_sign_at(_p.size(), _p.c_ptr(), r1) != 0);
|
||||
SASSERT(um.eval_sign_at(_p.size(), _p.c_ptr(), r2) != 0);
|
||||
ENSURE(um.eval_sign_at(_p.size(), _p.c_ptr(), r1) != 0);
|
||||
ENSURE(um.eval_sign_at(_p.size(), _p.c_ptr(), r2) != 0);
|
||||
std::cout << "p: "; um.display(std::cout, _p); std::cout << "\n";
|
||||
um.translate_q(_p.size(), _p.c_ptr(), c, _q);
|
||||
std::cout << "q: "; um.display(std::cout, _q); std::cout << "\n";
|
||||
SASSERT(um.eval_sign_at(_q.size(), _q.c_ptr(), mpq(1)) != 0);
|
||||
SASSERT(um.eval_sign_at(_q.size(), _q.c_ptr(), mpq(2)) != 0);
|
||||
SASSERT(um.eval_sign_at(_q.size(), _q.c_ptr(), mpq(3)) != 0);
|
||||
SASSERT(um.eval_sign_at(_q.size(), _q.c_ptr(), mpq(4)) != 0);
|
||||
SASSERT(um.eval_sign_at(_q.size(), _q.c_ptr(), mpq(-1)) != 0);
|
||||
SASSERT(um.eval_sign_at(_q.size(), _q.c_ptr(), mpq(5)) != 0);
|
||||
SASSERT(um.eval_sign_at(_q.size(), _q.c_ptr(), mpq(-2)) != 0);
|
||||
SASSERT(um.eval_sign_at(_q.size(), _q.c_ptr(), r1) == 0);
|
||||
SASSERT(um.eval_sign_at(_q.size(), _q.c_ptr(), r2) == 0);
|
||||
ENSURE(um.eval_sign_at(_q.size(), _q.c_ptr(), mpq(1)) != 0);
|
||||
ENSURE(um.eval_sign_at(_q.size(), _q.c_ptr(), mpq(2)) != 0);
|
||||
ENSURE(um.eval_sign_at(_q.size(), _q.c_ptr(), mpq(3)) != 0);
|
||||
ENSURE(um.eval_sign_at(_q.size(), _q.c_ptr(), mpq(4)) != 0);
|
||||
ENSURE(um.eval_sign_at(_q.size(), _q.c_ptr(), mpq(-1)) != 0);
|
||||
ENSURE(um.eval_sign_at(_q.size(), _q.c_ptr(), mpq(5)) != 0);
|
||||
ENSURE(um.eval_sign_at(_q.size(), _q.c_ptr(), mpq(-2)) != 0);
|
||||
ENSURE(um.eval_sign_at(_q.size(), _q.c_ptr(), r1) == 0);
|
||||
ENSURE(um.eval_sign_at(_q.size(), _q.c_ptr(), r2) == 0);
|
||||
um.p_1_div_x(_p.size(), _p.c_ptr());
|
||||
std::cout << "p: "; um.display(std::cout, _p); std::cout << "\n";
|
||||
SASSERT(um.eval_sign_at(_p.size(), _p.c_ptr(), mpq(1)) == 0);
|
||||
ENSURE(um.eval_sign_at(_p.size(), _p.c_ptr(), mpq(1)) == 0);
|
||||
nm.set(c, 1, 2);
|
||||
SASSERT(um.eval_sign_at(_p.size(), _p.c_ptr(), c) == 0);
|
||||
ENSURE(um.eval_sign_at(_p.size(), _p.c_ptr(), c) == 0);
|
||||
nm.set(c, 1, 3);
|
||||
SASSERT(um.eval_sign_at(_p.size(), _p.c_ptr(), c) == 0);
|
||||
ENSURE(um.eval_sign_at(_p.size(), _p.c_ptr(), c) == 0);
|
||||
nm.set(c, 1, 4);
|
||||
SASSERT(um.eval_sign_at(_p.size(), _p.c_ptr(), c) == 0);
|
||||
SASSERT(um.eval_sign_at(_p.size(), _p.c_ptr(), mpq(2)) != 0);
|
||||
SASSERT(um.eval_sign_at(_p.size(), _p.c_ptr(), mpq(3)) != 0);
|
||||
SASSERT(um.eval_sign_at(_p.size(), _p.c_ptr(), mpq(4)) != 0);
|
||||
ENSURE(um.eval_sign_at(_p.size(), _p.c_ptr(), c) == 0);
|
||||
ENSURE(um.eval_sign_at(_p.size(), _p.c_ptr(), mpq(2)) != 0);
|
||||
ENSURE(um.eval_sign_at(_p.size(), _p.c_ptr(), mpq(3)) != 0);
|
||||
ENSURE(um.eval_sign_at(_p.size(), _p.c_ptr(), mpq(4)) != 0);
|
||||
}
|
||||
|
||||
static void tst_convert_q2bq(unsynch_mpq_manager & m, polynomial_ref const & p, mpq const & a, mpq const & b) {
|
||||
|
@ -848,9 +848,9 @@ static void tst_exact_div(polynomial_ref const & p1, polynomial_ref const & p2,
|
|||
std::cout << "expected: "; um.display(std::cout, _q); std::cout << "\n";
|
||||
}
|
||||
std::cout.flush();
|
||||
SASSERT(res == expected);
|
||||
SASSERT(expected == um.divides(_p1.size(), _p1.c_ptr(), _p2.size(), _p2.c_ptr()));
|
||||
SASSERT(!expected || um.eq(_r, _q));
|
||||
ENSURE(res == expected);
|
||||
ENSURE(expected == um.divides(_p1.size(), _p1.c_ptr(), _p2.size(), _p2.c_ptr()));
|
||||
ENSURE(!expected || um.eq(_r, _q));
|
||||
}
|
||||
|
||||
static void tst_exact_div() {
|
||||
|
@ -878,7 +878,7 @@ static void tst_exact_div() {
|
|||
}
|
||||
|
||||
static void tst_fact(polynomial_ref const & p, unsigned num_distinct_factors, upolynomial::factor_params const & params = upolynomial::factor_params()) {
|
||||
SASSERT(is_univariate(p));
|
||||
ENSURE(is_univariate(p));
|
||||
std::cout << "---------------\n";
|
||||
std::cout << "p: " << p << std::endl;
|
||||
reslimit rl; upolynomial::manager um(rl, p.m().m());
|
||||
|
@ -891,11 +891,11 @@ static void tst_fact(polynomial_ref const & p, unsigned num_distinct_factors, up
|
|||
for (unsigned i = 0; i < fs.distinct_factors(); i++) {
|
||||
std::cout << "*("; um.display(std::cout, fs[i]); std::cout << ")^" << fs.get_degree(i) << std::endl;
|
||||
}
|
||||
SASSERT(fs.distinct_factors() == num_distinct_factors);
|
||||
ENSURE(fs.distinct_factors() == num_distinct_factors);
|
||||
upolynomial::scoped_numeral_vector _r(um);
|
||||
fs.multiply(_r);
|
||||
TRACE("upolynomial", tout << "_r: "; um.display(tout, _r); tout << "\n_p: "; um.display(tout, _p); tout << "\n";);
|
||||
SASSERT(um.eq(_p, _r));
|
||||
ENSURE(um.eq(_p, _r));
|
||||
}
|
||||
|
||||
static void tst_fact() {
|
||||
|
@ -992,8 +992,8 @@ static void tst_fact() {
|
|||
}
|
||||
|
||||
static void tst_rem(polynomial_ref const & p, polynomial_ref const & q, polynomial_ref const & expected) {
|
||||
SASSERT(is_univariate(p));
|
||||
SASSERT(is_univariate(q));
|
||||
ENSURE(is_univariate(p));
|
||||
ENSURE(is_univariate(q));
|
||||
std::cout << "---------------\n";
|
||||
std::cout << "p: " << p << std::endl;
|
||||
std::cout << "q: " << q << std::endl;
|
||||
|
@ -1005,7 +1005,7 @@ static void tst_rem(polynomial_ref const & p, polynomial_ref const & q, polynomi
|
|||
polynomial_ref r(p.m());
|
||||
r = p.m().to_polynomial(_r.size(), _r.c_ptr(), 0);
|
||||
std::cout << "r: " << r << std::endl;
|
||||
SASSERT(eq(expected, r));
|
||||
ENSURE(eq(expected, r));
|
||||
}
|
||||
|
||||
static void tst_rem() {
|
||||
|
@ -1022,7 +1022,7 @@ static void tst_rem() {
|
|||
}
|
||||
|
||||
static void tst_lower_bound(polynomial_ref const & p) {
|
||||
SASSERT(is_univariate(p));
|
||||
ENSURE(is_univariate(p));
|
||||
std::cout << "---------------\n";
|
||||
std::cout << "p: " << p << std::endl;
|
||||
reslimit rl; upolynomial::manager um(rl, p.m().m());
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue