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