BitVectorTest.cpp revision c9e31cc8232892b30dac38f97c90ebc41428f59a
1//===- 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 10#ifndef XFAIL 11#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 141TEST(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(4U, A.count()); 158 EXPECT_EQ(50U, A.size()); 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(2U, A.count()); 168 EXPECT_EQ(50U, A.size()); 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(98U, A.count()); 177 EXPECT_EQ(100U, A.size()); 178} 179 180} 181 182#endif 183