Files
clang-p2996/lldb/unittests/Utility/FlagsTest.cpp
Raphael Isemann 0d8a008611 [lldb] Remove SetCount/ClearCount from Flags
Summary:
These functions are only used in tests where we should test the actual flag values instead of counting all bits for an approximate check.
Also these popcount implementation aren't very efficient and doesn't seem to be optimised to anything fast.

Reviewers: davide, JDevlieghere

Reviewed By: davide, JDevlieghere

Subscribers: abidh, JDevlieghere, lldb-commits

Tags: #lldb

Differential Revision: https://reviews.llvm.org/D67540

llvm-svn: 372018
2019-09-16 18:02:49 +00:00

164 lines
3.2 KiB
C++

//===-- FlagsTest.cpp -------------------===---------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#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());
}
TEST(Flags, Clear) {
Flags f;
f.Reset(0x3);
EXPECT_EQ(0x3U, f.Get());
f.Clear(0x5);
EXPECT_EQ(0x2U, f.Get());
f.Clear();
EXPECT_EQ(0x0U, f.Get());
}
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));
}