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());