3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-08-25 20:46:01 +00:00
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2021-11-13 17:43:07 -08:00
parent d073583d88
commit 4261345503
7 changed files with 180 additions and 62 deletions

View file

@ -129,6 +129,7 @@ add_executable(test-z3
value_generator.cpp
value_sweep.cpp
var_subst.cpp
viable.cpp
vector.cpp
lp/lp.cpp
lp/nla_solver_test.cpp

View file

@ -266,4 +266,5 @@ int main(int argc, char ** argv) {
TST_ARGV(polysat_argv);
TST(fixplex);
TST(mod_interval);
TST(viable);
}

50
src/test/viable.cpp Normal file
View file

@ -0,0 +1,50 @@
#include "math/polysat/log.h"
#include "math/polysat/solver.h"
#include "math/polysat/viable2.h"
namespace polysat {
struct solver_scopev {
reslimit lim;
};
struct scoped_solverv : public solver_scopev, public solver {
viable2 v;
scoped_solverv(): solver(lim), v(*this) {}
};
static void test1() {
scoped_solverv s;
auto xv = s.add_var(3);
auto x = s.var(xv);
s.v.push(3);
rational val;
auto c = s.ule(x + 3, x + 5);
s.v.intersect(xv, c);
std::cout << s.v << "\n";
std::cout << "min-max " << s.v.min_viable(xv) << " " << s.v.max_viable(xv) << "\n";
s.v.intersect(xv, s.ule(x, 2));
std::cout << s.v << "\n";
s.v.intersect(xv, s.ule(1, x));
std::cout << s.v << "\n";
std::cout << "min-max " << s.v.min_viable(xv) << " " << s.v.max_viable(xv) << "\n";
s.v.intersect(xv, s.ule(x, 3));
std::cout << s.v << "\n";
std::cout << s.v.find_viable(xv, val) << " " << val << "\n";
std::cout << "min-max " << s.v.min_viable(xv) << " " << s.v.max_viable(xv) << "\n";
s.v.intersect(xv, s.ule(3, x));
std::cout << s.v << "\n";
std::cout << s.v.find_viable(xv, val) << " " << val << "\n";
}
static void test2() {
}
}
void tst_viable() {
polysat::test1();
polysat::test2();
}