1 /*++
2 Copyright (c) 2014 Microsoft Corporation
3
4 Module Name:
5
6 fixed_bit_vector.cpp
7
8 Abstract:
9
10 Test fixed-size bit vector module
11
12 Author:
13
14 Nikolaj Bjorner (nbjorner) 2014-9-15.
15
16 Revision History:
17
18 based on bit_vector.cpp
19
20 --*/
21 #include<cstdlib>
22 #include<iostream>
23 #include "util/fixed_bit_vector.h"
24 #include "util/vector.h"
25
26
tst1()27 static void tst1() {
28 fixed_bit_vector_manager m(30);
29 fixed_bit_vector *b;
30 b = m.allocate0();
31 m.set(*b, 0, true);
32 m.set(*b, 1, false);
33 m.set(*b, 2, true);
34 ENSURE(b->get(0) == true);
35 ENSURE(b->get(1) == false);
36 ENSURE(b->get(2) == true);
37 ENSURE(b->get(3) == false);
38 ENSURE(b->get(29) == false);
39 m.deallocate(b);
40 }
41
tst_or()42 static void tst_or() {
43 {
44 fixed_bit_vector_manager m(10);
45 fixed_bit_vector *b1, *b2;
46 b1 = m.allocate0();
47 b2 = m.allocate0();
48
49 m.set(*b1, 4);
50 m.set(*b2, 8);
51 m.set(*b2, 3);
52 m.set(*b2, 2);
53 m.set(*b2, 1);
54 m.display(std::cout, *b1) << "\n";
55 m.display(std::cout, *b2) << "\n";
56 m.set_or(*b1, *b2);
57 m.display(std::cout, *b1) << "\n";
58 ENSURE(!m.equals(*b1, *b2));
59 m.unset(*b1, 4);
60 ENSURE(m.equals(*b1, *b2));
61 m.unset(*b1, 3);
62 ENSURE(!m.equals(*b1, *b2));
63 m.deallocate(b1);
64 m.deallocate(b2);
65 }
66 }
67
tst_and()68 static void tst_and() {
69
70 }
71
72
73
tst_eq(unsigned num_bits)74 static void tst_eq(unsigned num_bits) {
75 fixed_bit_vector_manager m(num_bits);
76 fixed_bit_vector* b1 = m.allocate0();
77 fixed_bit_vector* b2 = m.allocate0();
78 fixed_bit_vector* b3 = m.allocate0();
79
80 m.set(*b1, 3, true);
81 ENSURE(!m.equals(*b1, *b2));
82 ENSURE(m.equals(*b2, *b3));
83
84 m.set(*b3, 3, true);
85 ENSURE(m.equals(*b1, *b3));
86
87 m.set(*b2, num_bits-1, true);
88 m.set(*b3, num_bits-1);
89 m.unset(*b3, 3);
90 ENSURE(m.equals(*b2, *b3));
91 m.fill0(*b1);
92 m.set_neg(*b1);
93 m.fill1(*b2);
94 ENSURE(m.equals(*b1, *b2));
95 m.fill0(*b1);
96 for (unsigned i = 0; i < num_bits; ++i) {
97 m.set(*b1, i, true);
98 }
99 ENSURE(m.equals(*b1, *b2));
100 m.deallocate(b1);
101 m.deallocate(b2);
102 m.deallocate(b3);
103 }
104
tst_fixed_bit_vector()105 void tst_fixed_bit_vector() {
106 tst1();
107 tst_or();
108 tst_and();
109 tst_eq(15);
110 tst_eq(16);
111 tst_eq(17);
112 tst_eq(31);
113 tst_eq(32);
114 tst_eq(33);
115 tst_eq(63);
116 tst_eq(64);
117 tst_eq(65);
118 }
119