mirror of
				https://github.com/Z3Prover/z3
				synced 2025-11-04 05:19:11 +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:
 | 
			
		||||
        scoped_solver(std::string name): solver(lim), m_name(name) {
 | 
			
		||||
            if (collect_test_records) {
 | 
			
		||||
                std::cout << m_name << ":";
 | 
			
		||||
                std::cout.flush();
 | 
			
		||||
            } else {
 | 
			
		||||
            if (collect_test_records)
 | 
			
		||||
                std::cout << m_name << std::flush;
 | 
			
		||||
            else {
 | 
			
		||||
                std::cout << std::string(78, '#') << "\n\n";
 | 
			
		||||
                std::cout << "START: " << m_name << "\n";
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -266,10 +265,8 @@ namespace polysat {
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        void check() {
 | 
			
		||||
            if (collect_test_records) {
 | 
			
		||||
                std::cout << " ...";
 | 
			
		||||
                std::cout.flush();
 | 
			
		||||
            }
 | 
			
		||||
            if (collect_test_records)
 | 
			
		||||
                std::cout << " ..." << std::flush;
 | 
			
		||||
            auto* rec = test_records.active_or_new_record();
 | 
			
		||||
            m_last_finished = nullptr;
 | 
			
		||||
            SASSERT(rec->m_answer == l_undef);
 | 
			
		||||
| 
						 | 
				
			
			@ -287,7 +284,7 @@ namespace polysat {
 | 
			
		|||
            rec->m_finished = true;
 | 
			
		||||
            m_last_finished = rec;
 | 
			
		||||
            if (collect_test_records)
 | 
			
		||||
                std::cout << " " << m_last_result;
 | 
			
		||||
                std::cout << " " << m_last_result << std::flush;
 | 
			
		||||
            else
 | 
			
		||||
                std::cout << "DONE:  " << m_name << ": " << m_last_result << "\n";
 | 
			
		||||
            statistics st;
 | 
			
		||||
| 
						 | 
				
			
			@ -1258,7 +1255,6 @@ namespace polysat {
 | 
			
		|||
        static void test_quot_rem_incomplete() {
 | 
			
		||||
            unsigned bw = 4;
 | 
			
		||||
            scoped_solver s(__func__);
 | 
			
		||||
            s.set_max_conflicts(5);
 | 
			
		||||
            auto quot = s.var(s.add_var(bw));
 | 
			
		||||
            auto rem = s.var(s.add_var(bw));
 | 
			
		||||
            auto a = s.value(rational(2), bw);
 | 
			
		||||
| 
						 | 
				
			
			@ -1278,7 +1274,6 @@ namespace polysat {
 | 
			
		|||
        static void test_quot_rem_fixed() {
 | 
			
		||||
            unsigned bw = 4;
 | 
			
		||||
            scoped_solver s(__func__);
 | 
			
		||||
            s.set_max_conflicts(5);
 | 
			
		||||
            auto a = s.value(rational(2), bw);
 | 
			
		||||
            auto b = s.value(rational(5), bw);
 | 
			
		||||
            auto [quot, rem] = s.quot_rem(a, b);
 | 
			
		||||
| 
						 | 
				
			
			@ -1289,24 +1284,22 @@ namespace polysat {
 | 
			
		|||
 | 
			
		||||
        static void test_quot_rem(unsigned bw = 32) {
 | 
			
		||||
            scoped_solver s(__func__);
 | 
			
		||||
            s.set_max_conflicts(5);
 | 
			
		||||
            auto a = s.var(s.add_var(bw));
 | 
			
		||||
            auto quot = s.var(s.add_var(bw));
 | 
			
		||||
            auto rem = s.var(s.add_var(bw));
 | 
			
		||||
            auto x = a * 123;
 | 
			
		||||
            auto y = 123;
 | 
			
		||||
            // quot = udiv(a*123, 123)
 | 
			
		||||
            s.add_eq(quot * y + rem - x);
 | 
			
		||||
            s.add_diseq(a - quot);
 | 
			
		||||
            s.add_umul_noovfl(quot, y);
 | 
			
		||||
            s.add_ult(rem, x);
 | 
			
		||||
            s.add_eq(x, quot * y + rem);  // 123*a = q*123 + r
 | 
			
		||||
            s.add_diseq(a, quot);         // a != quot
 | 
			
		||||
            s.add_umul_noovfl(quot, y);   // 123*quot < 2^K
 | 
			
		||||
            s.add_ult(rem, x);            // r < 123*a  ???
 | 
			
		||||
            s.check();
 | 
			
		||||
            s.expect_sat();
 | 
			
		||||
            s.expect_sat();  // dubious
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        static void test_quot_rem2(unsigned bw = 32) {
 | 
			
		||||
            scoped_solver s(__func__);
 | 
			
		||||
            s.set_max_conflicts(5);
 | 
			
		||||
            auto q = s.var(s.add_var(bw));
 | 
			
		||||
            auto r = 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.
 | 
			
		||||
    collect_test_records = false;
 | 
			
		||||
    test_max_conflicts = 50;
 | 
			
		||||
    test_polysat::test_band5();
 | 
			
		||||
    // test_polysat::test_band5();
 | 
			
		||||
    // test_polysat::test_band5_clause();
 | 
			
		||||
    // test_polysat::test_ineq_axiom1(32, 1);
 | 
			
		||||
    // test_polysat::test_pop_conflict();
 | 
			
		||||
    // test_polysat::test_l2();
 | 
			
		||||
    // test_polysat::test_ineq1();
 | 
			
		||||
    test_polysat::test_ineq1();
 | 
			
		||||
    // test_polysat::test_quot_rem();
 | 
			
		||||
    // test_polysat::test_ineq_non_axiom1(32, 3);
 | 
			
		||||
    // 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_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_axiom2());
 | 
			
		||||
    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_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::randomized();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue