mirror of
https://github.com/Z3Prover/z3
synced 2025-04-23 17:15:31 +00:00
fix overflow bugs in doc
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
b57353eff2
commit
54506408f9
10 changed files with 164 additions and 101 deletions
|
@ -117,7 +117,7 @@ class test_doc_cls {
|
|||
tbv* mk_rand_tbv() {
|
||||
tbv* result = dm.tbvm().allocate();
|
||||
for (unsigned i = 0; i < dm.num_tbits(); ++i) {
|
||||
(*result).set(i, choose_tbit());
|
||||
dm.tbvm().set(*result, i, choose_tbit());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -126,10 +126,10 @@ class test_doc_cls {
|
|||
tbv* result = dm.tbvm().allocate();
|
||||
for (unsigned i = 0; i < dm.num_tbits(); ++i) {
|
||||
if (pos[i] == BIT_x) {
|
||||
(*result).set(i, choose_tbit());
|
||||
dm.tbvm().set(*result, i, choose_tbit());
|
||||
}
|
||||
else {
|
||||
(*result).set(i, pos[i]);
|
||||
dm.tbvm().set(*result, i, pos[i]);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
@ -159,7 +159,7 @@ class test_doc_cls {
|
|||
expr_ref_vector conjs(m);
|
||||
for (unsigned i = 0; i < m_vars.size(); ++i) {
|
||||
tbit b = choose_tbit();
|
||||
t.set(i, b);
|
||||
dm.tbvm().set(t, i, b);
|
||||
switch (b) {
|
||||
case BIT_1: conjs.push_back(m_vars[i].get()); break;
|
||||
case BIT_0: conjs.push_back(m.mk_not(m_vars[i].get())); break;
|
||||
|
@ -363,7 +363,7 @@ public:
|
|||
expr_ref fml1(m), fml2(m);
|
||||
doc_ref d(dm, dm.allocateX());
|
||||
tbv_ref t(dm.tbvm(), dm.tbvm().allocateX());
|
||||
t->set(0, BIT_0);
|
||||
dm.tbvm().set(*t, 0, BIT_0);
|
||||
d->neg().push_back(t.detach());
|
||||
unsigned num_bits = dm.num_tbits();
|
||||
svector<bool> to_delete(num_bits, false);
|
||||
|
@ -402,10 +402,10 @@ public:
|
|||
tbv_ref t2(dm.tbvm());
|
||||
t1 = dm.tbvm().allocateX();
|
||||
t2 = dm.tbvm().allocateX();
|
||||
t1->set(0, BIT_1);
|
||||
t1->set(2, BIT_0);
|
||||
t2->set(0, BIT_0);
|
||||
t2->set(2, BIT_1);
|
||||
dm.tbvm().set(*t1, 0, BIT_1);
|
||||
dm.tbvm().set(*t1, 2, BIT_0);
|
||||
dm.tbvm().set(*t2, 0, BIT_0);
|
||||
dm.tbvm().set(*t2, 2, BIT_1);
|
||||
d1->neg().push_back(t1.detach());
|
||||
d1->neg().push_back(t2.detach());
|
||||
ds2.push_back(d1.detach());
|
||||
|
|
|
@ -28,9 +28,9 @@ static void tst1() {
|
|||
fixed_bit_vector_manager m(30);
|
||||
fixed_bit_vector *b;
|
||||
b = m.allocate0();
|
||||
b->set(0, true);
|
||||
b->set(1, false);
|
||||
b->set(2, true);
|
||||
m.set(*b, 0, true);
|
||||
m.set(*b, 1, false);
|
||||
m.set(*b, 2, true);
|
||||
SASSERT(b->get(0) == true);
|
||||
SASSERT(b->get(1) == false);
|
||||
SASSERT(b->get(2) == true);
|
||||
|
@ -46,19 +46,19 @@ static void tst_or() {
|
|||
b1 = m.allocate0();
|
||||
b2 = m.allocate0();
|
||||
|
||||
b1->set(4);
|
||||
b2->set(8);
|
||||
b2->set(3);
|
||||
b2->set(2);
|
||||
b2->set(1);
|
||||
m.set(*b1, 4);
|
||||
m.set(*b2, 8);
|
||||
m.set(*b2, 3);
|
||||
m.set(*b2, 2);
|
||||
m.set(*b2, 1);
|
||||
m.display(std::cout, *b1) << "\n";
|
||||
m.display(std::cout, *b2) << "\n";
|
||||
m.set_or(*b1, *b2);
|
||||
m.display(std::cout, *b1) << "\n";
|
||||
SASSERT(!m.equals(*b1, *b2));
|
||||
b1->unset(4);
|
||||
m.unset(*b1, 4);
|
||||
SASSERT(m.equals(*b1, *b2));
|
||||
b1->unset(3);
|
||||
m.unset(*b1, 3);
|
||||
SASSERT(!m.equals(*b1, *b2));
|
||||
m.deallocate(b1);
|
||||
m.deallocate(b2);
|
||||
|
@ -77,16 +77,16 @@ static void tst_eq(unsigned num_bits) {
|
|||
fixed_bit_vector* b2 = m.allocate0();
|
||||
fixed_bit_vector* b3 = m.allocate0();
|
||||
|
||||
b1->set(3, true);
|
||||
m.set(*b1, 3, true);
|
||||
SASSERT(!m.equals(*b1, *b2));
|
||||
SASSERT(m.equals(*b2, *b3));
|
||||
|
||||
b3->set(3, true);
|
||||
m.set(*b3, 3, true);
|
||||
SASSERT(m.equals(*b1, *b3));
|
||||
|
||||
b2->set(num_bits-1, true);
|
||||
b3->set(num_bits-1);
|
||||
b3->unset(3);
|
||||
m.set(*b2, num_bits-1, true);
|
||||
m.set(*b3, num_bits-1);
|
||||
m.unset(*b3, 3);
|
||||
SASSERT(m.equals(*b2, *b3));
|
||||
m.fill0(*b1);
|
||||
m.set_neg(*b1);
|
||||
|
@ -94,7 +94,7 @@ static void tst_eq(unsigned num_bits) {
|
|||
SASSERT(m.equals(*b1, *b2));
|
||||
m.fill0(*b1);
|
||||
for (unsigned i = 0; i < num_bits; ++i) {
|
||||
b1->set(i, true);
|
||||
m.set(*b1, i, true);
|
||||
}
|
||||
SASSERT(m.equals(*b1, *b2));
|
||||
m.deallocate(b1);
|
||||
|
|
|
@ -29,8 +29,8 @@ static void tst1(unsigned num_bits) {
|
|||
tbv_manager m2(num_bits-2);
|
||||
to_delete[1] = true;
|
||||
to_delete[3] = true;
|
||||
(*b1).set(2, BIT_0);
|
||||
(*b1).set(4, BIT_x);
|
||||
m.set(*b1, 2, BIT_0);
|
||||
m.set(*b1, 4, BIT_x);
|
||||
tbv_ref b2(m2, m2.project(num_bits, to_delete.c_ptr(), *b1));
|
||||
m.display(std::cout, *b1) << " -> ";
|
||||
m2.display(std::cout, *b2) << "\n";
|
||||
|
|
|
@ -54,7 +54,7 @@ class udoc_tester {
|
|||
tbv* mk_rand_tbv(doc_manager& dm) {
|
||||
tbv* result = dm.tbvm().allocate();
|
||||
for (unsigned i = 0; i < dm.num_tbits(); ++i) {
|
||||
(*result).set(i, choose_tbit());
|
||||
dm.tbvm().set(*result, i, choose_tbit());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -63,10 +63,10 @@ class udoc_tester {
|
|||
tbv* result = dm.tbvm().allocate();
|
||||
for (unsigned i = 0; i < dm.num_tbits(); ++i) {
|
||||
if (pos[i] == BIT_x) {
|
||||
(*result).set(i, choose_tbit());
|
||||
dm.tbvm().set(*result, i, choose_tbit());
|
||||
}
|
||||
else {
|
||||
(*result).set(i, pos[i]);
|
||||
dm.tbvm().set(*result, i, pos[i]);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue