mirror of
https://github.com/Z3Prover/z3
synced 2025-06-22 22:03:39 +00:00
unit tests for dd_pdd ordering
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
This commit is contained in:
parent
61da9a8aeb
commit
cca19ef1a7
2 changed files with 56 additions and 19 deletions
|
@ -37,7 +37,7 @@ Author:
|
||||||
#include "util/rational.h"
|
#include "util/rational.h"
|
||||||
|
|
||||||
namespace dd {
|
namespace dd {
|
||||||
|
class test;
|
||||||
class pdd;
|
class pdd;
|
||||||
class pdd_manager;
|
class pdd_manager;
|
||||||
class pdd_iterator;
|
class pdd_iterator;
|
||||||
|
@ -46,6 +46,7 @@ namespace dd {
|
||||||
public:
|
public:
|
||||||
enum semantics { free_e, mod2_e, zero_one_vars_e };
|
enum semantics { free_e, mod2_e, zero_one_vars_e };
|
||||||
private:
|
private:
|
||||||
|
friend test;
|
||||||
friend pdd;
|
friend pdd;
|
||||||
friend pdd_iterator;
|
friend pdd_iterator;
|
||||||
|
|
||||||
|
@ -303,6 +304,7 @@ namespace dd {
|
||||||
};
|
};
|
||||||
|
|
||||||
class pdd {
|
class pdd {
|
||||||
|
friend test;
|
||||||
friend class pdd_manager;
|
friend class pdd_manager;
|
||||||
friend class pdd_iterator;
|
friend class pdd_iterator;
|
||||||
unsigned root;
|
unsigned root;
|
||||||
|
|
|
@ -140,8 +140,9 @@ void test_iterator() {
|
||||||
std::cout << m << "\n";
|
std::cout << m << "\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
class test {
|
||||||
void order() {
|
public :
|
||||||
|
static void order() {
|
||||||
std::cout << "order\n";
|
std::cout << "order\n";
|
||||||
pdd_manager m(4);
|
pdd_manager m(4);
|
||||||
unsigned va = 0;
|
unsigned va = 0;
|
||||||
|
@ -160,7 +161,6 @@ void order() {
|
||||||
SASSERT(i != 0 ||( m.vars.size() == 1 && m.vars[0] == vb));
|
SASSERT(i != 0 ||( m.vars.size() == 1 && m.vars[0] == vb));
|
||||||
SASSERT(i != 1 ||( m.vars.size() == 1 && m.vars[0] == va));
|
SASSERT(i != 1 ||( m.vars.size() == 1 && m.vars[0] == va));
|
||||||
i++;
|
i++;
|
||||||
// SASSERT(i != 1 || m == a);
|
|
||||||
}
|
}
|
||||||
pdd ccbbaa = c*c*b*b*a*a;
|
pdd ccbbaa = c*c*b*b*a*a;
|
||||||
pdd ccbbba = c*c*b*b*b*a;
|
pdd ccbbba = c*c*b*b*b*a;
|
||||||
|
@ -173,26 +173,61 @@ void order() {
|
||||||
SASSERT(i != 0 ||( m.vars.size() == 6 && m.vars[4] == vb)); // the first one has to be ccbbba
|
SASSERT(i != 0 ||( m.vars.size() == 6 && m.vars[4] == vb)); // the first one has to be ccbbba
|
||||||
SASSERT(i != 1 ||( m.vars.size() == 6 && m.vars[4] == va)); // the second one has to be ccbbaa
|
SASSERT(i != 1 ||( m.vars.size() == 6 && m.vars[4] == va)); // the second one has to be ccbbaa
|
||||||
i++;
|
i++;
|
||||||
// SASSERT(i != 1 || m == a);
|
|
||||||
}
|
}
|
||||||
pdd dcbba = c*c*b*b*a*a;
|
pdd dcbba = d*c*b*b*a;
|
||||||
pdd dd = d * d;
|
pdd dd = d * d;
|
||||||
p = dcbba + ccbbba + d;
|
p = dcbba + ccbbba + dd;
|
||||||
|
vector<unsigned> v;
|
||||||
std::cout << "p = " << p << "\n";
|
std::cout << "p = " << p << "\n";
|
||||||
std::cout << "more complex\n";
|
unsigned k = p.index();
|
||||||
i = 0;
|
std::cout << "pdd(k) = " << pdd(k, m) << "\n";
|
||||||
for (auto const& m : p) {
|
k = m.first_leading(k);
|
||||||
std::cout << m << "\n";
|
do {
|
||||||
SASSERT(i != 0 ||( m.vars.size() == 6 && m.vars[0] == vc)); // the first one has to be ccbbba
|
if (m.is_val(k)) {
|
||||||
SASSERT(i != 1 ||( m.vars.size() == 5 && m.vars[0] == vd)); // the second one has to be dcbba
|
SASSERT(m.val(k).is_one());
|
||||||
SASSERT(i != 2 ||( m.vars.size() == 2 && m.vars[1] == vd)); // the second one has to be dd
|
break;
|
||||||
|
}
|
||||||
i++;
|
v.push_back(m.var(k));
|
||||||
// SASSERT(i != 1 || m == a);
|
std::cout << "pdd(k) = " << pdd(k, m) << "\n";
|
||||||
|
std::cout << "push v" << m.var(k) << "\n";
|
||||||
|
k = m.next_leading(k);
|
||||||
|
} while(true);
|
||||||
|
auto it = v.begin();
|
||||||
|
std::cout << "v" << *it;
|
||||||
|
it++;
|
||||||
|
for( ; it != v.end(); it ++) {
|
||||||
|
std::cout << "*v" << *it;
|
||||||
}
|
}
|
||||||
|
SASSERT(v.size() == 6);
|
||||||
|
SASSERT(v[0] == vc);
|
||||||
|
std::cout << "\n";
|
||||||
|
v.reset();
|
||||||
|
p = d*c*c*d + b*c*c*b + d*d*d;
|
||||||
|
k = p.index();
|
||||||
|
std::cout << "pdd(k) = " << pdd(k, m) << "\n";
|
||||||
|
k = m.first_leading(k);
|
||||||
|
do {
|
||||||
|
if (m.is_val(k)) {
|
||||||
|
SASSERT(m.val(k).is_one());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
v.push_back(m.var(k));
|
||||||
|
std::cout << "pdd(k) = " << pdd(k, m) << "\n";
|
||||||
|
std::cout << "push v" << m.var(k) << "\n";
|
||||||
|
k = m.next_leading(k);
|
||||||
|
} while(true);
|
||||||
|
it = v.begin();
|
||||||
|
std::cout << "v" << *it;
|
||||||
|
it++;
|
||||||
|
for( ; it != v.end(); it ++) {
|
||||||
|
std::cout << "*v" << *it;
|
||||||
|
}
|
||||||
|
SASSERT(v.size() == 4);
|
||||||
|
SASSERT(v[0] == vd);
|
||||||
|
std::cout << "\n";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -203,5 +238,5 @@ void tst_pdd() {
|
||||||
dd::test5();
|
dd::test5();
|
||||||
dd::test_reset();
|
dd::test_reset();
|
||||||
dd::test_iterator();
|
dd::test_iterator();
|
||||||
dd::order();
|
dd::test::order();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue