| //===-- FlagsTest.cpp -------------------===---------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "gtest/gtest.h" |
| |
| #include "lldb/Utility/Flags.h" |
| |
| using namespace lldb_private; |
| |
| enum DummyFlags { |
| eFlag0 = 1 << 0, |
| eFlag1 = 1 << 1, |
| eFlag2 = 1 << 2, |
| eAllFlags = (eFlag0 | eFlag1 | eFlag2) |
| }; |
| |
| TEST(Flags, GetBitSize) { |
| Flags f; |
| // Methods like ClearCount depend on this specific value, so we test |
| // against it here. |
| EXPECT_EQ(32U, f.GetBitSize()); |
| } |
| |
| TEST(Flags, Reset) { |
| Flags f; |
| f.Reset(0x3); |
| EXPECT_EQ(0x3U, f.Get()); |
| EXPECT_EQ(2U, f.SetCount()); |
| } |
| |
| TEST(Flags, Clear) { |
| Flags f; |
| f.Reset(0x3); |
| EXPECT_EQ(2U, f.SetCount()); |
| |
| f.Clear(0x5); |
| EXPECT_EQ(1U, f.SetCount()); |
| |
| f.Clear(); |
| EXPECT_EQ(0U, f.SetCount()); |
| } |
| |
| TEST(Flags, AllSet) { |
| Flags f; |
| |
| EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1)); |
| |
| f.Set(eFlag0); |
| EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1)); |
| |
| f.Set(eFlag1); |
| EXPECT_TRUE(f.AllSet(eFlag0 | eFlag1)); |
| |
| f.Clear(eFlag1); |
| EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1)); |
| |
| f.Clear(eFlag0); |
| EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1)); |
| } |
| |
| TEST(Flags, AnySet) { |
| Flags f; |
| |
| EXPECT_FALSE(f.AnySet(eFlag0 | eFlag1)); |
| |
| f.Set(eFlag0); |
| EXPECT_TRUE(f.AnySet(eFlag0 | eFlag1)); |
| |
| f.Set(eFlag1); |
| EXPECT_TRUE(f.AnySet(eFlag0 | eFlag1)); |
| |
| f.Clear(eFlag1); |
| EXPECT_TRUE(f.AnySet(eFlag0 | eFlag1)); |
| |
| f.Clear(eFlag0); |
| EXPECT_FALSE(f.AnySet(eFlag0 | eFlag1)); |
| } |
| |
| TEST(Flags, Test) { |
| Flags f; |
| |
| EXPECT_FALSE(f.Test(eFlag0)); |
| EXPECT_FALSE(f.Test(eFlag1)); |
| EXPECT_FALSE(f.Test(eFlag2)); |
| |
| f.Set(eFlag0); |
| EXPECT_TRUE(f.Test(eFlag0)); |
| EXPECT_FALSE(f.Test(eFlag1)); |
| EXPECT_FALSE(f.Test(eFlag2)); |
| |
| f.Set(eFlag1); |
| EXPECT_TRUE(f.Test(eFlag0)); |
| EXPECT_TRUE(f.Test(eFlag1)); |
| EXPECT_FALSE(f.Test(eFlag2)); |
| |
| f.Clear(eFlag0); |
| EXPECT_FALSE(f.Test(eFlag0)); |
| EXPECT_TRUE(f.Test(eFlag1)); |
| EXPECT_FALSE(f.Test(eFlag2)); |
| |
| // FIXME: Should Flags assert on Test(eFlag0 | eFlag1) (more than one bit)? |
| } |
| |
| TEST(Flags, AllClear) { |
| Flags f; |
| |
| EXPECT_TRUE(f.AllClear(eFlag0 | eFlag1)); |
| |
| f.Set(eFlag0); |
| EXPECT_FALSE(f.AllClear(eFlag0 | eFlag1)); |
| |
| f.Set(eFlag1); |
| f.Clear(eFlag0); |
| EXPECT_FALSE(f.AllClear(eFlag0 | eFlag1)); |
| |
| f.Clear(eFlag1); |
| EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1)); |
| } |
| |
| TEST(Flags, AnyClear) { |
| Flags f; |
| EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1)); |
| |
| f.Set(eFlag0); |
| EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1)); |
| |
| f.Set(eFlag1); |
| f.Set(eFlag0); |
| EXPECT_FALSE(f.AnyClear(eFlag0 | eFlag1)); |
| |
| f.Clear(eFlag1); |
| EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1)); |
| |
| f.Clear(eFlag0); |
| EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1)); |
| } |
| |
| TEST(Flags, IsClear) { |
| Flags f; |
| |
| EXPECT_TRUE(f.IsClear(eFlag0)); |
| EXPECT_TRUE(f.IsClear(eFlag1)); |
| |
| f.Set(eFlag0); |
| EXPECT_FALSE(f.IsClear(eFlag0)); |
| EXPECT_TRUE(f.IsClear(eFlag1)); |
| |
| f.Set(eFlag1); |
| EXPECT_FALSE(f.IsClear(eFlag0)); |
| EXPECT_FALSE(f.IsClear(eFlag1)); |
| |
| f.Clear(eFlag0); |
| EXPECT_TRUE(f.IsClear(eFlag0)); |
| EXPECT_FALSE(f.IsClear(eFlag1)); |
| |
| f.Clear(eFlag1); |
| EXPECT_TRUE(f.IsClear(eFlag0)); |
| EXPECT_TRUE(f.IsClear(eFlag1)); |
| } |
| |
| TEST(Flags, ClearCount) { |
| Flags f; |
| EXPECT_EQ(32U, f.ClearCount()); |
| |
| f.Set(eFlag0); |
| EXPECT_EQ(31U, f.ClearCount()); |
| |
| f.Set(eFlag0); |
| EXPECT_EQ(31U, f.ClearCount()); |
| |
| f.Set(eFlag1); |
| EXPECT_EQ(30U, f.ClearCount()); |
| |
| f.Set(eAllFlags); |
| EXPECT_EQ(29U, f.ClearCount()); |
| } |
| |
| TEST(Flags, SetCount) { |
| Flags f; |
| EXPECT_EQ(0U, f.SetCount()); |
| |
| f.Set(eFlag0); |
| EXPECT_EQ(1U, f.SetCount()); |
| |
| f.Set(eFlag0); |
| EXPECT_EQ(1U, f.SetCount()); |
| |
| f.Set(eFlag1); |
| EXPECT_EQ(2U, f.SetCount()); |
| |
| f.Set(eAllFlags); |
| EXPECT_EQ(3U, f.SetCount()); |
| } |