blob: 4d4f5fd63c39e722e79eb802cb692dfcf18f5f22 [file] [log] [blame]
Dan Gohmancb89afc2010-01-05 15:04:49 +00001//===- llvm/unittest/ADT/BitVectorTest.cpp - BitVector tests --------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
Dale Johannesence97b752010-02-09 22:15:27 +000010#ifndef XFAIL
Dan Gohmancb89afc2010-01-05 15:04:49 +000011#include "llvm/ADT/BitVector.h"
12#include "gtest/gtest.h"
13
14using namespace llvm;
15
16namespace {
17
18TEST(BitVectorTest, TrivialOperation) {
19 BitVector Vec;
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());
25
26 Vec.resize(5, true);
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());
32
33 Vec.resize(11);
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());
39
40 BitVector Inv = ~Vec;
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());
46
47 EXPECT_FALSE(Inv == Vec);
48 EXPECT_TRUE(Inv != Vec);
49 Vec = ~Vec;
50 EXPECT_TRUE(Inv == Vec);
51 EXPECT_FALSE(Inv != Vec);
52
53 // Add some "interesting" data to Vec.
54 Vec.resize(23, true);
55 Vec.resize(25, false);
56 Vec.resize(26, true);
57 Vec.resize(29, false);
58 Vec.resize(33, true);
59 Vec.resize(61, false);
60 unsigned Count = 0;
61 for (unsigned i = Vec.find_first(); i != -1u; i = Vec.find_next(i)) {
62 ++Count;
63 EXPECT_TRUE(Vec[i]);
64 EXPECT_TRUE(Vec.test(i));
65 }
66 EXPECT_EQ(Count, Vec.count());
67 EXPECT_EQ(Count, 23u);
68 EXPECT_FALSE(Vec[0]);
69 EXPECT_TRUE(Vec[32]);
70 EXPECT_FALSE(Vec[60]);
71
72 BitVector Copy = Vec;
73 BitVector Alt(3, false);
74 Alt.resize(6, true);
75 std::swap(Alt, Vec);
76 EXPECT_TRUE(Copy == Alt);
77 EXPECT_TRUE(Vec.size() == 6);
78 EXPECT_TRUE(Vec.count() == 3);
79 EXPECT_TRUE(Vec.find_first() == 3);
80 std::swap(Copy, Vec);
81
82 // Add some more "interesting" data.
83 Vec.resize(68, true);
84 Vec.resize(78, false);
85 Vec.resize(89, true);
86 Vec.resize(90, false);
87 Vec.resize(91, true);
88 Vec.resize(130, false);
89 Count = 0;
90 for (unsigned i = Vec.find_first(); i != -1u; i = Vec.find_next(i)) {
91 ++Count;
92 EXPECT_TRUE(Vec[i]);
93 EXPECT_TRUE(Vec.test(i));
94 }
95 EXPECT_EQ(Count, Vec.count());
96 EXPECT_EQ(Count, 42u);
97 EXPECT_FALSE(Vec[0]);
98 EXPECT_TRUE(Vec[32]);
99 EXPECT_FALSE(Vec[60]);
100 EXPECT_FALSE(Vec[129]);
101
102 Vec.flip(60);
103 EXPECT_TRUE(Vec[60]);
104 EXPECT_EQ(Count + 1, Vec.count());
105 Vec.flip(60);
106 EXPECT_FALSE(Vec[60]);
107 EXPECT_EQ(Count, Vec.count());
108
109 Vec.reset(32);
110 EXPECT_FALSE(Vec[32]);
111 EXPECT_EQ(Count - 1, Vec.count());
112 Vec.set(32);
113 EXPECT_TRUE(Vec[32]);
114 EXPECT_EQ(Count, Vec.count());
115
116 Vec.flip();
117 EXPECT_EQ(Vec.size() - Count, Vec.count());
118
119 Vec.reset();
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());
125
126 Inv = ~BitVector();
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());
132
133 Vec.clear();
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());
139}
140
Dan Gohmane7962c92010-02-10 05:54:04 +0000141TEST(BitVectorTest, CompoundAssignment) {
142 BitVector A;
143 A.resize(10);
144 A.set(4);
145 A.set(7);
146
147 BitVector B;
148 B.resize(50);
149 B.set(5);
150 B.set(18);
151
152 A |= B;
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(A.count(), 4);
158 EXPECT_EQ(A.size(), 50);
159
160 B.resize(10);
161 B.set();
162 B.reset(2);
163 B.reset(7);
164 A &= B;
165 EXPECT_FALSE(A.test(2));
166 EXPECT_FALSE(A.test(7));
167 EXPECT_EQ(A.size(), 50);
168 EXPECT_EQ(A.count(), 2);
169
170 B.resize(100);
171 B.set();
172
173 A ^= B;
174 EXPECT_TRUE(A.test(2));
175 EXPECT_TRUE(A.test(7));
176 EXPECT_EQ(A.size(), 100);
177 EXPECT_EQ(A.count(), 98);
Dan Gohmancb89afc2010-01-05 15:04:49 +0000178}
Dan Gohmane7962c92010-02-10 05:54:04 +0000179
180}
181
Dale Johannesence97b752010-02-09 22:15:27 +0000182#endif