1
//===- llvm/unittest/ADT/SmallBitVectorTest.cpp - SmallBitVector 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
//===----------------------------------------------------------------------===//
10
#include "llvm/ADT/SmallBitVector.h"
11
#include "gtest/gtest.h"
17
TEST(SmallBitVectorTest, TrivialOperation) {
19
EXPECT_EQ(0U, Vec.count());
20
EXPECT_EQ(0U, Vec.size());
21
EXPECT_FALSE(Vec.any());
22
EXPECT_TRUE(Vec.none());
23
EXPECT_TRUE(Vec.empty());
26
EXPECT_EQ(5U, Vec.count());
27
EXPECT_EQ(5U, Vec.size());
28
EXPECT_TRUE(Vec.any());
29
EXPECT_FALSE(Vec.none());
30
EXPECT_FALSE(Vec.empty());
33
EXPECT_EQ(5U, Vec.count());
34
EXPECT_EQ(11U, Vec.size());
35
EXPECT_TRUE(Vec.any());
36
EXPECT_FALSE(Vec.none());
37
EXPECT_FALSE(Vec.empty());
39
SmallBitVector Inv = ~Vec;
40
EXPECT_EQ(6U, Inv.count());
41
EXPECT_EQ(11U, Inv.size());
42
EXPECT_TRUE(Inv.any());
43
EXPECT_FALSE(Inv.none());
44
EXPECT_FALSE(Inv.empty());
46
EXPECT_FALSE(Inv == Vec);
47
EXPECT_TRUE(Inv != Vec);
49
EXPECT_TRUE(Inv == Vec);
50
EXPECT_FALSE(Inv != Vec);
52
// Add some "interesting" data to Vec.
54
Vec.resize(25, false);
56
Vec.resize(29, false);
58
Vec.resize(61, false);
60
for (unsigned i = Vec.find_first(); i != -1u; i = Vec.find_next(i)) {
63
EXPECT_TRUE(Vec.test(i));
65
EXPECT_EQ(Count, Vec.count());
66
EXPECT_EQ(Count, 23u);
69
EXPECT_FALSE(Vec[60]);
71
SmallBitVector Copy = Vec;
72
SmallBitVector Alt(3, false);
75
EXPECT_TRUE(Copy == Alt);
76
EXPECT_TRUE(Vec.size() == 6);
77
EXPECT_TRUE(Vec.count() == 3);
78
EXPECT_TRUE(Vec.find_first() == 3);
81
// Add some more "interesting" data.
83
Vec.resize(78, false);
85
Vec.resize(90, false);
87
Vec.resize(130, false);
89
for (unsigned i = Vec.find_first(); i != -1u; i = Vec.find_next(i)) {
92
EXPECT_TRUE(Vec.test(i));
94
EXPECT_EQ(Count, Vec.count());
95
EXPECT_EQ(Count, 42u);
98
EXPECT_FALSE(Vec[60]);
99
EXPECT_FALSE(Vec[129]);
102
EXPECT_TRUE(Vec[60]);
103
EXPECT_EQ(Count + 1, Vec.count());
105
EXPECT_FALSE(Vec[60]);
106
EXPECT_EQ(Count, Vec.count());
109
EXPECT_FALSE(Vec[32]);
110
EXPECT_EQ(Count - 1, Vec.count());
112
EXPECT_TRUE(Vec[32]);
113
EXPECT_EQ(Count, Vec.count());
116
EXPECT_EQ(Vec.size() - Count, Vec.count());
119
EXPECT_EQ(0U, Vec.count());
120
EXPECT_EQ(130U, Vec.size());
121
EXPECT_FALSE(Vec.any());
122
EXPECT_TRUE(Vec.none());
123
EXPECT_FALSE(Vec.empty());
125
Inv = ~SmallBitVector();
126
EXPECT_EQ(0U, Inv.count());
127
EXPECT_EQ(0U, Inv.size());
128
EXPECT_FALSE(Inv.any());
129
EXPECT_TRUE(Inv.none());
130
EXPECT_TRUE(Inv.empty());
133
EXPECT_EQ(0U, Vec.count());
134
EXPECT_EQ(0U, Vec.size());
135
EXPECT_FALSE(Vec.any());
136
EXPECT_TRUE(Vec.none());
137
EXPECT_TRUE(Vec.empty());
140
TEST(SmallBitVectorTest, CompoundAssignment) {
152
EXPECT_TRUE(A.test(4));
153
EXPECT_TRUE(A.test(5));
154
EXPECT_TRUE(A.test(7));
155
EXPECT_TRUE(A.test(18));
156
EXPECT_EQ(4U, A.count());
157
EXPECT_EQ(50U, A.size());
164
EXPECT_FALSE(A.test(2));
165
EXPECT_FALSE(A.test(7));
166
EXPECT_EQ(2U, A.count());
167
EXPECT_EQ(50U, A.size());
173
EXPECT_TRUE(A.test(2));
174
EXPECT_TRUE(A.test(7));
175
EXPECT_EQ(98U, A.count());
176
EXPECT_EQ(100U, A.size());