1 //===- llvm/unittest/ADT/SparseBitVectorTest.cpp - SparseBitVector 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 #include "llvm/ADT/SparseBitVector.h" 11 #include "gtest/gtest.h" 12 13 using namespace llvm; 14 15 namespace { 16 17 TEST(SparseBitVectorTest, TrivialOperation) { 18 SparseBitVector<> Vec; 19 EXPECT_EQ(0U, Vec.count()); 20 EXPECT_FALSE(Vec.test(17)); 21 Vec.set(5); 22 EXPECT_TRUE(Vec.test(5)); 23 EXPECT_FALSE(Vec.test(17)); 24 Vec.reset(6); 25 EXPECT_TRUE(Vec.test(5)); 26 EXPECT_FALSE(Vec.test(6)); 27 Vec.reset(5); 28 EXPECT_FALSE(Vec.test(5)); 29 EXPECT_TRUE(Vec.test_and_set(17)); 30 EXPECT_FALSE(Vec.test_and_set(17)); 31 EXPECT_TRUE(Vec.test(17)); 32 Vec.clear(); 33 EXPECT_FALSE(Vec.test(17)); 34 } 35 36 TEST(SparseBitVectorTest, IntersectWith) { 37 SparseBitVector<> Vec, Other; 38 39 Vec.set(1); 40 Other.set(1); 41 EXPECT_FALSE(Vec &= Other); 42 EXPECT_TRUE(Vec.test(1)); 43 44 Vec.clear(); 45 Vec.set(5); 46 Other.clear(); 47 Other.set(6); 48 EXPECT_TRUE(Vec &= Other); 49 EXPECT_TRUE(Vec.empty()); 50 51 Vec.clear(); 52 Vec.set(5); 53 Other.clear(); 54 Other.set(225); 55 EXPECT_TRUE(Vec &= Other); 56 EXPECT_TRUE(Vec.empty()); 57 58 Vec.clear(); 59 Vec.set(225); 60 Other.clear(); 61 Other.set(5); 62 EXPECT_TRUE(Vec &= Other); 63 EXPECT_TRUE(Vec.empty()); 64 } 65 66 TEST(SparseBitVectorTest, SelfAssignment) { 67 SparseBitVector<> Vec, Other; 68 69 Vec.set(23); 70 Vec.set(234); 71 Vec = Vec; 72 EXPECT_TRUE(Vec.test(23)); 73 EXPECT_TRUE(Vec.test(234)); 74 75 Vec.clear(); 76 Vec.set(17); 77 Vec.set(256); 78 EXPECT_FALSE(Vec |= Vec); 79 EXPECT_TRUE(Vec.test(17)); 80 EXPECT_TRUE(Vec.test(256)); 81 82 Vec.clear(); 83 Vec.set(56); 84 Vec.set(517); 85 EXPECT_FALSE(Vec &= Vec); 86 EXPECT_TRUE(Vec.test(56)); 87 EXPECT_TRUE(Vec.test(517)); 88 89 Vec.clear(); 90 Vec.set(99); 91 Vec.set(333); 92 EXPECT_TRUE(Vec.intersectWithComplement(Vec)); 93 EXPECT_TRUE(Vec.empty()); 94 EXPECT_FALSE(Vec.intersectWithComplement(Vec)); 95 96 Vec.clear(); 97 Vec.set(28); 98 Vec.set(43); 99 Vec.intersectWithComplement(Vec, Vec); 100 EXPECT_TRUE(Vec.empty()); 101 102 Vec.clear(); 103 Vec.set(42); 104 Vec.set(567); 105 Other.set(55); 106 Other.set(567); 107 Vec.intersectWithComplement(Vec, Other); 108 EXPECT_TRUE(Vec.test(42)); 109 EXPECT_FALSE(Vec.test(567)); 110 111 Vec.clear(); 112 Vec.set(19); 113 Vec.set(21); 114 Other.clear(); 115 Other.set(19); 116 Other.set(31); 117 Vec.intersectWithComplement(Other, Vec); 118 EXPECT_FALSE(Vec.test(19)); 119 EXPECT_TRUE(Vec.test(31)); 120 121 Vec.clear(); 122 Vec.set(1); 123 Other.clear(); 124 Other.set(59); 125 Other.set(75); 126 Vec.intersectWithComplement(Other, Other); 127 EXPECT_TRUE(Vec.empty()); 128 } 129 130 } 131