Author: teemperor Date: Thu Jul 19 10:45:51 2018 New Revision: 337475 URL: http://llvm.org/viewvc/llvm-project?rev=337475&view=rev Log: Added unit tests for Flags
Reviewers: labath Reviewed By: labath Subscribers: labath, mgorny, lldb-commits Differential Revision: https://reviews.llvm.org/D49435 Added: lldb/trunk/unittests/Utility/FlagsTest.cpp Modified: lldb/trunk/unittests/Utility/CMakeLists.txt Modified: lldb/trunk/unittests/Utility/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/unittests/Utility/CMakeLists.txt?rev=337475&r1=337474&r2=337475&view=diff ============================================================================== --- lldb/trunk/unittests/Utility/CMakeLists.txt (original) +++ lldb/trunk/unittests/Utility/CMakeLists.txt Thu Jul 19 10:45:51 2018 @@ -8,6 +8,7 @@ add_lldb_unittest(UtilityTests CompletionRequestTest.cpp EnvironmentTest.cpp FileSpecTest.cpp + FlagsTest.cpp JSONTest.cpp LogTest.cpp NameMatchesTest.cpp Added: lldb/trunk/unittests/Utility/FlagsTest.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/unittests/Utility/FlagsTest.cpp?rev=337475&view=auto ============================================================================== --- lldb/trunk/unittests/Utility/FlagsTest.cpp (added) +++ lldb/trunk/unittests/Utility/FlagsTest.cpp Thu Jul 19 10:45:51 2018 @@ -0,0 +1,199 @@ +//===-- 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()); +} _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits