1 //===-- FlagsTest.cpp -------------------===---------------------*- C++ -*-===// 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 "gtest/gtest.h" 11 12 #include "lldb/Utility/Flags.h" 13 14 using namespace lldb_private; 15 16 enum DummyFlags { 17 eFlag0 = 1 << 0, 18 eFlag1 = 1 << 1, 19 eFlag2 = 1 << 2, 20 eAllFlags = (eFlag0 | eFlag1 | eFlag2) 21 }; 22 23 TEST(Flags, GetBitSize) { 24 Flags f; 25 // Methods like ClearCount depend on this specific value, so we test 26 // against it here. 27 EXPECT_EQ(32U, f.GetBitSize()); 28 } 29 30 TEST(Flags, Reset) { 31 Flags f; 32 f.Reset(0x3); 33 EXPECT_EQ(0x3U, f.Get()); 34 EXPECT_EQ(2U, f.SetCount()); 35 } 36 37 TEST(Flags, Clear) { 38 Flags f; 39 f.Reset(0x3); 40 EXPECT_EQ(2U, f.SetCount()); 41 42 f.Clear(0x5); 43 EXPECT_EQ(1U, f.SetCount()); 44 45 f.Clear(); 46 EXPECT_EQ(0U, f.SetCount()); 47 } 48 49 TEST(Flags, AllSet) { 50 Flags f; 51 52 EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1)); 53 54 f.Set(eFlag0); 55 EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1)); 56 57 f.Set(eFlag1); 58 EXPECT_TRUE(f.AllSet(eFlag0 | eFlag1)); 59 60 f.Clear(eFlag1); 61 EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1)); 62 63 f.Clear(eFlag0); 64 EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1)); 65 } 66 67 TEST(Flags, AnySet) { 68 Flags f; 69 70 EXPECT_FALSE(f.AnySet(eFlag0 | eFlag1)); 71 72 f.Set(eFlag0); 73 EXPECT_TRUE(f.AnySet(eFlag0 | eFlag1)); 74 75 f.Set(eFlag1); 76 EXPECT_TRUE(f.AnySet(eFlag0 | eFlag1)); 77 78 f.Clear(eFlag1); 79 EXPECT_TRUE(f.AnySet(eFlag0 | eFlag1)); 80 81 f.Clear(eFlag0); 82 EXPECT_FALSE(f.AnySet(eFlag0 | eFlag1)); 83 } 84 85 TEST(Flags, Test) { 86 Flags f; 87 88 EXPECT_FALSE(f.Test(eFlag0)); 89 EXPECT_FALSE(f.Test(eFlag1)); 90 EXPECT_FALSE(f.Test(eFlag2)); 91 92 f.Set(eFlag0); 93 EXPECT_TRUE(f.Test(eFlag0)); 94 EXPECT_FALSE(f.Test(eFlag1)); 95 EXPECT_FALSE(f.Test(eFlag2)); 96 97 f.Set(eFlag1); 98 EXPECT_TRUE(f.Test(eFlag0)); 99 EXPECT_TRUE(f.Test(eFlag1)); 100 EXPECT_FALSE(f.Test(eFlag2)); 101 102 f.Clear(eFlag0); 103 EXPECT_FALSE(f.Test(eFlag0)); 104 EXPECT_TRUE(f.Test(eFlag1)); 105 EXPECT_FALSE(f.Test(eFlag2)); 106 107 // FIXME: Should Flags assert on Test(eFlag0 | eFlag1) (more than one bit)? 108 } 109 110 TEST(Flags, AllClear) { 111 Flags f; 112 113 EXPECT_TRUE(f.AllClear(eFlag0 | eFlag1)); 114 115 f.Set(eFlag0); 116 EXPECT_FALSE(f.AllClear(eFlag0 | eFlag1)); 117 118 f.Set(eFlag1); 119 f.Clear(eFlag0); 120 EXPECT_FALSE(f.AllClear(eFlag0 | eFlag1)); 121 122 f.Clear(eFlag1); 123 EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1)); 124 } 125 126 TEST(Flags, AnyClear) { 127 Flags f; 128 EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1)); 129 130 f.Set(eFlag0); 131 EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1)); 132 133 f.Set(eFlag1); 134 f.Set(eFlag0); 135 EXPECT_FALSE(f.AnyClear(eFlag0 | eFlag1)); 136 137 f.Clear(eFlag1); 138 EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1)); 139 140 f.Clear(eFlag0); 141 EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1)); 142 } 143 144 TEST(Flags, IsClear) { 145 Flags f; 146 147 EXPECT_TRUE(f.IsClear(eFlag0)); 148 EXPECT_TRUE(f.IsClear(eFlag1)); 149 150 f.Set(eFlag0); 151 EXPECT_FALSE(f.IsClear(eFlag0)); 152 EXPECT_TRUE(f.IsClear(eFlag1)); 153 154 f.Set(eFlag1); 155 EXPECT_FALSE(f.IsClear(eFlag0)); 156 EXPECT_FALSE(f.IsClear(eFlag1)); 157 158 f.Clear(eFlag0); 159 EXPECT_TRUE(f.IsClear(eFlag0)); 160 EXPECT_FALSE(f.IsClear(eFlag1)); 161 162 f.Clear(eFlag1); 163 EXPECT_TRUE(f.IsClear(eFlag0)); 164 EXPECT_TRUE(f.IsClear(eFlag1)); 165 } 166 167 TEST(Flags, ClearCount) { 168 Flags f; 169 EXPECT_EQ(32U, f.ClearCount()); 170 171 f.Set(eFlag0); 172 EXPECT_EQ(31U, f.ClearCount()); 173 174 f.Set(eFlag0); 175 EXPECT_EQ(31U, f.ClearCount()); 176 177 f.Set(eFlag1); 178 EXPECT_EQ(30U, f.ClearCount()); 179 180 f.Set(eAllFlags); 181 EXPECT_EQ(29U, f.ClearCount()); 182 } 183 184 TEST(Flags, SetCount) { 185 Flags f; 186 EXPECT_EQ(0U, f.SetCount()); 187 188 f.Set(eFlag0); 189 EXPECT_EQ(1U, f.SetCount()); 190 191 f.Set(eFlag0); 192 EXPECT_EQ(1U, f.SetCount()); 193 194 f.Set(eFlag1); 195 EXPECT_EQ(2U, f.SetCount()); 196 197 f.Set(eAllFlags); 198 EXPECT_EQ(3U, f.SetCount()); 199 } 200