xref: /llvm-project/lldb/unittests/Utility/FlagsTest.cpp (revision 808142876c10b52e7ee57cdc6dcf0acc5c97c1b7)
1*80814287SRaphael Isemann //===-- FlagsTest.cpp -----------------------------------------------------===//
239148330SRaphael Isemann //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
639148330SRaphael Isemann //
739148330SRaphael Isemann //===----------------------------------------------------------------------===//
839148330SRaphael Isemann 
939148330SRaphael Isemann #include "gtest/gtest.h"
1039148330SRaphael Isemann 
1139148330SRaphael Isemann #include "lldb/Utility/Flags.h"
1239148330SRaphael Isemann 
1339148330SRaphael Isemann using namespace lldb_private;
1439148330SRaphael Isemann 
1539148330SRaphael Isemann enum DummyFlags {
1639148330SRaphael Isemann   eFlag0     = 1 << 0,
1739148330SRaphael Isemann   eFlag1     = 1 << 1,
1839148330SRaphael Isemann   eFlag2     = 1 << 2,
1939148330SRaphael Isemann   eAllFlags  = (eFlag0 | eFlag1 | eFlag2)
2039148330SRaphael Isemann };
2139148330SRaphael Isemann 
TEST(Flags,GetBitSize)2239148330SRaphael Isemann TEST(Flags, GetBitSize) {
2339148330SRaphael Isemann   Flags f;
2439148330SRaphael Isemann   // Methods like ClearCount depend on this specific value, so we test
2539148330SRaphael Isemann   // against it here.
2639148330SRaphael Isemann   EXPECT_EQ(32U, f.GetBitSize());
2739148330SRaphael Isemann }
2839148330SRaphael Isemann 
TEST(Flags,Reset)2939148330SRaphael Isemann TEST(Flags, Reset) {
3039148330SRaphael Isemann   Flags f;
3139148330SRaphael Isemann   f.Reset(0x3);
3239148330SRaphael Isemann   EXPECT_EQ(0x3U, f.Get());
3339148330SRaphael Isemann }
3439148330SRaphael Isemann 
TEST(Flags,Clear)3539148330SRaphael Isemann TEST(Flags, Clear) {
3639148330SRaphael Isemann   Flags f;
3739148330SRaphael Isemann   f.Reset(0x3);
380d8a0086SRaphael Isemann   EXPECT_EQ(0x3U, f.Get());
3939148330SRaphael Isemann 
4039148330SRaphael Isemann   f.Clear(0x5);
410d8a0086SRaphael Isemann   EXPECT_EQ(0x2U, f.Get());
4239148330SRaphael Isemann 
4339148330SRaphael Isemann   f.Clear();
440d8a0086SRaphael Isemann   EXPECT_EQ(0x0U, f.Get());
4539148330SRaphael Isemann }
4639148330SRaphael Isemann 
TEST(Flags,AllSet)4739148330SRaphael Isemann TEST(Flags, AllSet) {
4839148330SRaphael Isemann   Flags f;
4939148330SRaphael Isemann 
5039148330SRaphael Isemann   EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1));
5139148330SRaphael Isemann 
5239148330SRaphael Isemann   f.Set(eFlag0);
5339148330SRaphael Isemann   EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1));
5439148330SRaphael Isemann 
5539148330SRaphael Isemann   f.Set(eFlag1);
5639148330SRaphael Isemann   EXPECT_TRUE(f.AllSet(eFlag0 | eFlag1));
5739148330SRaphael Isemann 
5839148330SRaphael Isemann   f.Clear(eFlag1);
5939148330SRaphael Isemann   EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1));
6039148330SRaphael Isemann 
6139148330SRaphael Isemann   f.Clear(eFlag0);
6239148330SRaphael Isemann   EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1));
6339148330SRaphael Isemann }
6439148330SRaphael Isemann 
TEST(Flags,AnySet)6539148330SRaphael Isemann TEST(Flags, AnySet) {
6639148330SRaphael Isemann   Flags f;
6739148330SRaphael Isemann 
6839148330SRaphael Isemann   EXPECT_FALSE(f.AnySet(eFlag0 | eFlag1));
6939148330SRaphael Isemann 
7039148330SRaphael Isemann   f.Set(eFlag0);
7139148330SRaphael Isemann   EXPECT_TRUE(f.AnySet(eFlag0 | eFlag1));
7239148330SRaphael Isemann 
7339148330SRaphael Isemann   f.Set(eFlag1);
7439148330SRaphael Isemann   EXPECT_TRUE(f.AnySet(eFlag0 | eFlag1));
7539148330SRaphael Isemann 
7639148330SRaphael Isemann   f.Clear(eFlag1);
7739148330SRaphael Isemann   EXPECT_TRUE(f.AnySet(eFlag0 | eFlag1));
7839148330SRaphael Isemann 
7939148330SRaphael Isemann   f.Clear(eFlag0);
8039148330SRaphael Isemann   EXPECT_FALSE(f.AnySet(eFlag0 | eFlag1));
8139148330SRaphael Isemann }
8239148330SRaphael Isemann 
TEST(Flags,Test)8339148330SRaphael Isemann TEST(Flags, Test) {
8439148330SRaphael Isemann   Flags f;
8539148330SRaphael Isemann 
8639148330SRaphael Isemann   EXPECT_FALSE(f.Test(eFlag0));
8739148330SRaphael Isemann   EXPECT_FALSE(f.Test(eFlag1));
8839148330SRaphael Isemann   EXPECT_FALSE(f.Test(eFlag2));
8939148330SRaphael Isemann 
9039148330SRaphael Isemann   f.Set(eFlag0);
9139148330SRaphael Isemann   EXPECT_TRUE(f.Test(eFlag0));
9239148330SRaphael Isemann   EXPECT_FALSE(f.Test(eFlag1));
9339148330SRaphael Isemann   EXPECT_FALSE(f.Test(eFlag2));
9439148330SRaphael Isemann 
9539148330SRaphael Isemann   f.Set(eFlag1);
9639148330SRaphael Isemann   EXPECT_TRUE(f.Test(eFlag0));
9739148330SRaphael Isemann   EXPECT_TRUE(f.Test(eFlag1));
9839148330SRaphael Isemann   EXPECT_FALSE(f.Test(eFlag2));
9939148330SRaphael Isemann 
10039148330SRaphael Isemann   f.Clear(eFlag0);
10139148330SRaphael Isemann   EXPECT_FALSE(f.Test(eFlag0));
10239148330SRaphael Isemann   EXPECT_TRUE(f.Test(eFlag1));
10339148330SRaphael Isemann   EXPECT_FALSE(f.Test(eFlag2));
10439148330SRaphael Isemann 
10539148330SRaphael Isemann   // FIXME: Should Flags assert on Test(eFlag0 | eFlag1) (more than one bit)?
10639148330SRaphael Isemann }
10739148330SRaphael Isemann 
TEST(Flags,AllClear)10839148330SRaphael Isemann TEST(Flags, AllClear) {
10939148330SRaphael Isemann   Flags f;
11039148330SRaphael Isemann 
11139148330SRaphael Isemann   EXPECT_TRUE(f.AllClear(eFlag0 | eFlag1));
11239148330SRaphael Isemann 
11339148330SRaphael Isemann   f.Set(eFlag0);
11439148330SRaphael Isemann   EXPECT_FALSE(f.AllClear(eFlag0 | eFlag1));
11539148330SRaphael Isemann 
11639148330SRaphael Isemann   f.Set(eFlag1);
11739148330SRaphael Isemann   f.Clear(eFlag0);
11839148330SRaphael Isemann   EXPECT_FALSE(f.AllClear(eFlag0 | eFlag1));
11939148330SRaphael Isemann 
12039148330SRaphael Isemann   f.Clear(eFlag1);
12139148330SRaphael Isemann   EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1));
12239148330SRaphael Isemann }
12339148330SRaphael Isemann 
TEST(Flags,AnyClear)12439148330SRaphael Isemann TEST(Flags, AnyClear) {
12539148330SRaphael Isemann   Flags f;
12639148330SRaphael Isemann   EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1));
12739148330SRaphael Isemann 
12839148330SRaphael Isemann   f.Set(eFlag0);
12939148330SRaphael Isemann   EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1));
13039148330SRaphael Isemann 
13139148330SRaphael Isemann   f.Set(eFlag1);
13239148330SRaphael Isemann   f.Set(eFlag0);
13339148330SRaphael Isemann   EXPECT_FALSE(f.AnyClear(eFlag0 | eFlag1));
13439148330SRaphael Isemann 
13539148330SRaphael Isemann   f.Clear(eFlag1);
13639148330SRaphael Isemann   EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1));
13739148330SRaphael Isemann 
13839148330SRaphael Isemann   f.Clear(eFlag0);
13939148330SRaphael Isemann   EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1));
14039148330SRaphael Isemann }
14139148330SRaphael Isemann 
TEST(Flags,IsClear)14239148330SRaphael Isemann TEST(Flags, IsClear) {
14339148330SRaphael Isemann   Flags f;
14439148330SRaphael Isemann 
14539148330SRaphael Isemann   EXPECT_TRUE(f.IsClear(eFlag0));
14639148330SRaphael Isemann   EXPECT_TRUE(f.IsClear(eFlag1));
14739148330SRaphael Isemann 
14839148330SRaphael Isemann   f.Set(eFlag0);
14939148330SRaphael Isemann   EXPECT_FALSE(f.IsClear(eFlag0));
15039148330SRaphael Isemann   EXPECT_TRUE(f.IsClear(eFlag1));
15139148330SRaphael Isemann 
15239148330SRaphael Isemann   f.Set(eFlag1);
15339148330SRaphael Isemann   EXPECT_FALSE(f.IsClear(eFlag0));
15439148330SRaphael Isemann   EXPECT_FALSE(f.IsClear(eFlag1));
15539148330SRaphael Isemann 
15639148330SRaphael Isemann   f.Clear(eFlag0);
15739148330SRaphael Isemann   EXPECT_TRUE(f.IsClear(eFlag0));
15839148330SRaphael Isemann   EXPECT_FALSE(f.IsClear(eFlag1));
15939148330SRaphael Isemann 
16039148330SRaphael Isemann   f.Clear(eFlag1);
16139148330SRaphael Isemann   EXPECT_TRUE(f.IsClear(eFlag0));
16239148330SRaphael Isemann   EXPECT_TRUE(f.IsClear(eFlag1));
16339148330SRaphael Isemann }
164