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