z3-z3-4.12.6.src.test.dl_context.cpp Maven / Gradle / Ivy
/*++
Copyright (c) 2015 Microsoft Corporation
--*/
#include "ast/ast_pp.h"
#include "ast/arith_decl_plugin.h"
#include "ast/reg_decl_plugins.h"
#include "muz/fp/datalog_parser.h"
#include "muz/base/dl_context.h"
#include "smt/params/smt_params.h"
#include "muz/fp/dl_register_engine.h"
using namespace datalog;
void tst_dl_context() {
return;
#if 0
symbol relations[] = { symbol("tr_skip"), symbol("tr_sparse"), symbol("tr_hashtable"), symbol("smt_relation2") };
const unsigned rel_cnt = sizeof(relations)/sizeof(symbol);
const char * test_file = "c:\\tvm\\src\\benchmarks\\datalog\\t0.datalog";
params_ref params;
for(unsigned rel_index=0; rel_index=0; eager_checking--) {
params.set_bool("eager_emptiness_checking", eager_checking!=0);
std::cerr << "Testing " << relations[rel_index] << "\n";
std::cerr << "Eager emptiness checking " << (eager_checking!=0 ? "on" : "off") << "\n";
dl_context_simple_query_test(params);
dl_context_saturate_file(params, test_file);
}
}
#endif
}
#if 0
static lbool dl_context_eval_unary_predicate(ast_manager & m, context & ctx, char const* problem_text,
const char * pred_name) {
parser* p = parser::create(ctx,m);
TRUSTME( p->parse_string(problem_text) );
dealloc(p);
func_decl * pred = ctx.try_get_predicate_decl(symbol(pred_name));
ENSURE(pred);
ENSURE(pred->get_arity()==1);
app_ref query_app(m.mk_app(pred, m.mk_var(0, pred->get_domain()[0])), m);
lbool status = ctx.query(query_app);
ENSURE(status != l_undef);
return status;
}
static void dl_context_simple_query_test(params_ref & params) {
ast_manager m;
reg_decl_plugins(m);
dl_decl_util decl_util(m);
register_engine re;
smt_params fparams;
context ctx(m, re, fparams);
ctx.updt_params(params);
/* lbool status = */ dl_context_eval_unary_predicate(m, ctx, "Z 64\n\nP(x:Z)\nP(\"a\").", "P");
#if 0
// TBD:
//zero corresponds to the first constant the datalog parser encountered, in our case "a"
app_ref c_0(decl_util.mk_constant(0, res1->get_signature()[0]), m);
app_ref c_1(decl_util.mk_constant(1, res1->get_signature()[0]), m);
relation_fact f(m);
f.push_back(c_0);
ENSURE(res1->contains_fact(f));
f[0]=c_1;
ENSURE(!res1->contains_fact(f));
#endif
}
void dl_context_saturate_file(params_ref & params, const char * f) {
ast_manager m;
dl_decl_util decl_util(m);
smt_params fparams;
register_engine re;
context ctx(m, re, fparams);
ctx.updt_params(params);
datalog::parser * parser = datalog::parser::create(ctx, m);
if (!parser || !parser->parse_file(f)) {
warning_msg("ERROR: failed to parse file");
dealloc(parser);
return;
}
dealloc(parser);
std::cerr << "Saturating...\n";
ctx.get_rel_context()->saturate();
std::cerr << "Done\n";
}
#endif