3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-13 12:28:44 +00:00
z3/src/test/fixed_bit_vector.cpp
Nikolaj Bjorner b19f94ae5b make include paths uniformly use path relative to src. #534
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2017-07-31 13:24:11 -07:00

119 lines
2.3 KiB
C++

/*++
Copyright (c) 2014 Microsoft Corporation
Module Name:
fixed_bit_vector.cpp
Abstract:
Test fixed-size bit vector module
Author:
Nikolaj Bjorner (nbjorner) 2014-9-15.
Revision History:
based on bit_vector.cpp
--*/
#include<cstdlib>
#include<iostream>
#include "util/fixed_bit_vector.h"
#include "util/vector.h"
static void tst1() {
fixed_bit_vector_manager m(30);
fixed_bit_vector *b;
b = m.allocate0();
m.set(*b, 0, true);
m.set(*b, 1, false);
m.set(*b, 2, true);
ENSURE(b->get(0) == true);
ENSURE(b->get(1) == false);
ENSURE(b->get(2) == true);
ENSURE(b->get(3) == false);
ENSURE(b->get(29) == false);
m.deallocate(b);
}
static void tst_or() {
{
fixed_bit_vector_manager m(10);
fixed_bit_vector *b1, *b2;
b1 = m.allocate0();
b2 = m.allocate0();
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";
ENSURE(!m.equals(*b1, *b2));
m.unset(*b1, 4);
ENSURE(m.equals(*b1, *b2));
m.unset(*b1, 3);
ENSURE(!m.equals(*b1, *b2));
m.deallocate(b1);
m.deallocate(b2);
}
}
static void tst_and() {
}
static void tst_eq(unsigned num_bits) {
fixed_bit_vector_manager m(num_bits);
fixed_bit_vector* b1 = m.allocate0();
fixed_bit_vector* b2 = m.allocate0();
fixed_bit_vector* b3 = m.allocate0();
m.set(*b1, 3, true);
ENSURE(!m.equals(*b1, *b2));
ENSURE(m.equals(*b2, *b3));
m.set(*b3, 3, true);
ENSURE(m.equals(*b1, *b3));
m.set(*b2, num_bits-1, true);
m.set(*b3, num_bits-1);
m.unset(*b3, 3);
ENSURE(m.equals(*b2, *b3));
m.fill0(*b1);
m.set_neg(*b1);
m.fill1(*b2);
ENSURE(m.equals(*b1, *b2));
m.fill0(*b1);
for (unsigned i = 0; i < num_bits; ++i) {
m.set(*b1, i, true);
}
ENSURE(m.equals(*b1, *b2));
m.deallocate(b1);
m.deallocate(b2);
m.deallocate(b3);
}
void tst_fixed_bit_vector() {
tst1();
tst_or();
tst_and();
tst_eq(15);
tst_eq(16);
tst_eq(17);
tst_eq(31);
tst_eq(32);
tst_eq(33);
tst_eq(63);
tst_eq(64);
tst_eq(65);
}