3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-23 17:15:31 +00:00

Revised solver_pool

This commit is contained in:
Arie Gurfinkel 2018-05-16 08:58:37 -07:00
parent c893740e13
commit 49821e7c91
4 changed files with 110 additions and 77 deletions

View file

@ -7,28 +7,35 @@ void tst_solver_pool() {
reg_decl_plugins(m);
params_ref p;
ref<solver> base = mk_smt_solver(m, p, symbol::null);
solver_pool pool(base.get());
ref<solver> s1 = pool.mk_solver();
ref<solver> s2 = pool.clone_solver(s1.get());
ref<solver> s3 = pool.clone_solver(s1.get());
ref<solver> s4 = pool.mk_solver();
ref<solver> s5 = pool.clone_solver(s4.get());
ref<solver> s6 = pool.clone_solver(s4.get());
expr_ref a(m.mk_const(symbol("a"), m.mk_bool_sort()), m);
expr_ref b(m.mk_const(symbol("b"), m.mk_bool_sort()), m);
expr_ref c(m.mk_const(symbol("c"), m.mk_bool_sort()), m);
expr_ref d(m.mk_const(symbol("d"), m.mk_bool_sort()), m);
expr_ref fml(m);
fml = m.mk_or(a, b);
base->assert_expr(fml);
solver_pool pool(base.get(), 3);
// base solver is cloned so any assertions
// added to base after mk_solver() are ignored.
ref<solver> s1 = pool.mk_solver();
ref<solver> s2 = pool.mk_solver();
ref<solver> s3 = pool.mk_solver();
ref<solver> s4 = pool.mk_solver();
fml = m.mk_and(b, c);
s1->assert_expr(fml);
fml = m.mk_and(a,b);
fml = m.mk_and(a, b);
s2->assert_expr(fml);
expr_ref_vector asms(m);
asms.push_back(m.mk_not(a));
std::cout << base->check_sat(asms) << "\n";
std::cout << s1->check_sat(asms) << "\n";
std::cout << s2->check_sat(asms) << "\n";
std::cout << s3->check_sat(asms) << "\n";
std::cout << *s1;
std::cout << *s2;
std::cout << *base;
}