1
//===- llvm/unittest/ADT/BitVectorTest.cpp - BitVector tests --------------===//
3
// The LLVM Compiler Infrastructure
5
// This file is distributed under the University of Illinois Open Source
6
// License. See LICENSE.TXT for details.
8
//===----------------------------------------------------------------------===//
11
#include "llvm/ADT/BitVector.h"
12
#include "gtest/gtest.h"
18
TEST(BitVectorTest, TrivialOperation) {
20
EXPECT_EQ(0U, Vec.count());
21
EXPECT_EQ(0U, Vec.size());
22
EXPECT_FALSE(Vec.any());
23
EXPECT_TRUE(Vec.none());
24
EXPECT_TRUE(Vec.empty());
27
EXPECT_EQ(5U, Vec.count());
28
EXPECT_EQ(5U, Vec.size());
29
EXPECT_TRUE(Vec.any());
30
EXPECT_FALSE(Vec.none());
31
EXPECT_FALSE(Vec.empty());
34
EXPECT_EQ(5U, Vec.count());
35
EXPECT_EQ(11U, Vec.size());
36
EXPECT_TRUE(Vec.any());
37
EXPECT_FALSE(Vec.none());
38
EXPECT_FALSE(Vec.empty());
41
EXPECT_EQ(6U, Inv.count());
42
EXPECT_EQ(11U, Inv.size());
43
EXPECT_TRUE(Inv.any());
44
EXPECT_FALSE(Inv.none());
45
EXPECT_FALSE(Inv.empty());
47
EXPECT_FALSE(Inv == Vec);
48
EXPECT_TRUE(Inv != Vec);
50
EXPECT_TRUE(Inv == Vec);
51
EXPECT_FALSE(Inv != Vec);
53
// Add some "interesting" data to Vec.
55
Vec.resize(25, false);
57
Vec.resize(29, false);
59
Vec.resize(61, false);
61
for (unsigned i = Vec.find_first(); i != -1u; i = Vec.find_next(i)) {
64
EXPECT_TRUE(Vec.test(i));
66
EXPECT_EQ(Count, Vec.count());
67
EXPECT_EQ(Count, 23u);
70
EXPECT_FALSE(Vec[60]);
73
BitVector Alt(3, false);
76
EXPECT_TRUE(Copy == Alt);
77
EXPECT_TRUE(Vec.size() == 6);
78
EXPECT_TRUE(Vec.count() == 3);
79
EXPECT_TRUE(Vec.find_first() == 3);
82
// Add some more "interesting" data.
84
Vec.resize(78, false);
86
Vec.resize(90, false);
88
Vec.resize(130, false);
90
for (unsigned i = Vec.find_first(); i != -1u; i = Vec.find_next(i)) {
93
EXPECT_TRUE(Vec.test(i));
95
EXPECT_EQ(Count, Vec.count());
96
EXPECT_EQ(Count, 42u);
99
EXPECT_FALSE(Vec[60]);
100
EXPECT_FALSE(Vec[129]);
103
EXPECT_TRUE(Vec[60]);
104
EXPECT_EQ(Count + 1, Vec.count());
106
EXPECT_FALSE(Vec[60]);
107
EXPECT_EQ(Count, Vec.count());
110
EXPECT_FALSE(Vec[32]);
111
EXPECT_EQ(Count - 1, Vec.count());
113
EXPECT_TRUE(Vec[32]);
114
EXPECT_EQ(Count, Vec.count());
117
EXPECT_EQ(Vec.size() - Count, Vec.count());
120
EXPECT_EQ(0U, Vec.count());
121
EXPECT_EQ(130U, Vec.size());
122
EXPECT_FALSE(Vec.any());
123
EXPECT_TRUE(Vec.none());
124
EXPECT_FALSE(Vec.empty());
127
EXPECT_EQ(0U, Inv.count());
128
EXPECT_EQ(0U, Inv.size());
129
EXPECT_FALSE(Inv.any());
130
EXPECT_TRUE(Inv.none());
131
EXPECT_TRUE(Inv.empty());
134
EXPECT_EQ(0U, Vec.count());
135
EXPECT_EQ(0U, Vec.size());
136
EXPECT_FALSE(Vec.any());
137
EXPECT_TRUE(Vec.none());
138
EXPECT_TRUE(Vec.empty());
141
TEST(BitVectorTest, CompoundAssignment) {
153
EXPECT_TRUE(A.test(4));
154
EXPECT_TRUE(A.test(5));
155
EXPECT_TRUE(A.test(7));
156
EXPECT_TRUE(A.test(18));
157
EXPECT_EQ(4U, A.count());
158
EXPECT_EQ(50U, A.size());
165
EXPECT_FALSE(A.test(2));
166
EXPECT_FALSE(A.test(7));
167
EXPECT_EQ(2U, A.count());
168
EXPECT_EQ(50U, A.size());
174
EXPECT_TRUE(A.test(2));
175
EXPECT_TRUE(A.test(7));
176
EXPECT_EQ(98U, A.count());
177
EXPECT_EQ(100U, A.size());