mirror of
https://github.com/Z3Prover/z3
synced 2025-07-16 17:36:39 +00:00
54 lines
1.3 KiB
C++
54 lines
1.3 KiB
C++
#include "sat/sat_solver.h"
|
|
#include "sat/sat_watched.h"
|
|
#include "util/statistics.h"
|
|
#include "sat/sat_lookahead.h"
|
|
#include "sat/dimacs.h"
|
|
|
|
static void display_model(sat::model const & m) {
|
|
for (unsigned i = 1; i < m.size(); i++) {
|
|
switch (m[i]) {
|
|
case l_false: std::cout << "-" << i << " "; break;
|
|
case l_undef: break;
|
|
case l_true: std::cout << i << " "; break;
|
|
}
|
|
}
|
|
std::cout << "\n";
|
|
}
|
|
|
|
|
|
void tst_sat_lookahead(char ** argv, int argc, int& i) {
|
|
if (argc != i + 2) {
|
|
std::cout << "require dimacs file name\n";
|
|
return;
|
|
}
|
|
// enable_trace("sat");
|
|
reslimit limit;
|
|
params_ref params;
|
|
sat::solver solver(params, limit);
|
|
char const* file_name = argv[i + 1];
|
|
++i;
|
|
|
|
{
|
|
std::ifstream in(file_name);
|
|
if (in.bad() || in.fail()) {
|
|
std::cerr << "(error \"failed to open file '" << file_name << "'\")" << std::endl;
|
|
exit(ERR_OPEN_FILE);
|
|
}
|
|
if (!parse_dimacs(in, std::cerr, solver))
|
|
return;
|
|
}
|
|
|
|
sat::lookahead lh(solver);
|
|
|
|
IF_VERBOSE(20, solver.display_status(verbose_stream()););
|
|
|
|
lbool is_sat = lh.check();
|
|
std::cout << is_sat << "\n";
|
|
|
|
statistics st;
|
|
lh.collect_statistics(st);
|
|
st.display(std::cout);
|
|
if (is_sat == l_true) {
|
|
display_model(lh.get_model());
|
|
}
|
|
}
|