3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-09 19:01:50 +00:00
z3/test/dl_table.cpp
Leonardo de Moura 68269c43a6 other components
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
2012-10-02 11:48:48 -07:00

111 lines
2.9 KiB
C++

#ifdef _WINDOWS
#include "dl_context.h"
#include "dl_table.h"
#include "dl_skip_table.h"
typedef datalog::table_base* (*mk_table_fn)(datalog::relation_manager& m, datalog::table_signature& sig);
static datalog::table_base* mk_bv_table(datalog::relation_manager& m, datalog::table_signature& sig) {
datalog::table_plugin * p = m.get_table_plugin(symbol("bitvector"));
SASSERT(p);
return p->mk_empty(sig);
}
static datalog::table_base* mk_skip_table(datalog::relation_manager& m, datalog::table_signature& sig) {
datalog::table_plugin * p = m.get_table_plugin(symbol("skip"));
SASSERT(p);
return p->mk_empty(sig);
}
static void test_table(mk_table_fn mk_table) {
datalog::table_signature sig;
sig.push_back(2);
sig.push_back(4);
sig.push_back(8);
sig.push_back(4);
front_end_params params;
ast_manager ast_m;
datalog::context ctx(ast_m, params);
datalog::relation_manager & m = ctx.get_rmanager();
ctx.get_rmanager().register_plugin(alloc(datalog::bitvector_table_plugin, ctx.get_rmanager()));
datalog::table_base* _tbl = mk_table(m, sig);
datalog::table_base& table = *_tbl;
datalog::table_fact row, row1, row2, row3;
row.push_back(1);
row.push_back(3);
row.push_back(7);
row.push_back(2);
row1 = row;
row[3] = 3;
row2 = row;
row[0] = 0;
row[3] = 1;
row3 = row;
table.add_fact(row1);
table.add_fact(row2);
table.display(std::cout);
datalog::table_base::iterator it = table.begin();
datalog::table_base::iterator end = table.end();
for (; it != end; ++it) {
it->get_fact(row);
for (unsigned j = 0; j < row.size(); ++j) {
std::cout << row[j] << " ";
}
std::cout << "\n";
}
SASSERT(table.contains_fact(row1));
SASSERT(table.contains_fact(row2));
SASSERT(!table.contains_fact(row3));
#if 0
table.remove_facts(1, &row1);
SASSERT(!table.contains_fact(row1));
#endif
table.add_fact(row1);
datalog::table_base* _tbl2 = mk_table(m, sig);
datalog::table_base& table2 = *_tbl2;
table2.add_fact(row2);
table2.add_fact(row3);
unsigned cols1[1] = { 1 };
unsigned cols2[1] = { 3 };
datalog::table_join_fn * j1 = m.mk_join_fn(table2, table, 1, cols1, cols2);
datalog::table_base* _tbl3 = (*j1)(table2,table);
_tbl3->display(std::cout);
datalog::table_join_fn * j2 = m.mk_join_fn(table2, table, 1, cols1, cols1);
datalog::table_base* _tbl4 = (*j2)(table2,table);
_tbl4->display(std::cout);
dealloc(j1);
dealloc(j2);
_tbl->deallocate();
(_tbl2->deallocate());
(_tbl3->deallocate());
(_tbl4->deallocate());
}
void test_dl_bitvector_table() {
test_table(mk_bv_table);
}
void test_dl_skip_table() {
test_table(mk_skip_table);
}
void tst_dl_table() {
test_dl_bitvector_table();
test_dl_skip_table();
}
#else
void tst_dl_table() {
}
#endif