blob: f04eb60179eb618bad352a467ac360d7bd46fa89 [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
141}
Dale Johannesence97b752010-02-09 22:15:27 +0000142#endif