xref: /llvm-project/lldb/unittests/Utility/FlagsTest.cpp (revision 808142876c10b52e7ee57cdc6dcf0acc5c97c1b7)
1 //===-- FlagsTest.cpp -----------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "gtest/gtest.h"
10 
11 #include "lldb/Utility/Flags.h"
12 
13 using namespace lldb_private;
14 
15 enum DummyFlags {
16   eFlag0     = 1 << 0,
17   eFlag1     = 1 << 1,
18   eFlag2     = 1 << 2,
19   eAllFlags  = (eFlag0 | eFlag1 | eFlag2)
20 };
21 
TEST(Flags,GetBitSize)22 TEST(Flags, GetBitSize) {
23   Flags f;
24   // Methods like ClearCount depend on this specific value, so we test
25   // against it here.
26   EXPECT_EQ(32U, f.GetBitSize());
27 }
28 
TEST(Flags,Reset)29 TEST(Flags, Reset) {
30   Flags f;
31   f.Reset(0x3);
32   EXPECT_EQ(0x3U, f.Get());
33 }
34 
TEST(Flags,Clear)35 TEST(Flags, Clear) {
36   Flags f;
37   f.Reset(0x3);
38   EXPECT_EQ(0x3U, f.Get());
39 
40   f.Clear(0x5);
41   EXPECT_EQ(0x2U, f.Get());
42 
43   f.Clear();
44   EXPECT_EQ(0x0U, f.Get());
45 }
46 
TEST(Flags,AllSet)47 TEST(Flags, AllSet) {
48   Flags f;
49 
50   EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1));
51 
52   f.Set(eFlag0);
53   EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1));
54 
55   f.Set(eFlag1);
56   EXPECT_TRUE(f.AllSet(eFlag0 | eFlag1));
57 
58   f.Clear(eFlag1);
59   EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1));
60 
61   f.Clear(eFlag0);
62   EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1));
63 }
64 
TEST(Flags,AnySet)65 TEST(Flags, AnySet) {
66   Flags f;
67 
68   EXPECT_FALSE(f.AnySet(eFlag0 | eFlag1));
69 
70   f.Set(eFlag0);
71   EXPECT_TRUE(f.AnySet(eFlag0 | eFlag1));
72 
73   f.Set(eFlag1);
74   EXPECT_TRUE(f.AnySet(eFlag0 | eFlag1));
75 
76   f.Clear(eFlag1);
77   EXPECT_TRUE(f.AnySet(eFlag0 | eFlag1));
78 
79   f.Clear(eFlag0);
80   EXPECT_FALSE(f.AnySet(eFlag0 | eFlag1));
81 }
82 
TEST(Flags,Test)83 TEST(Flags, Test) {
84   Flags f;
85 
86   EXPECT_FALSE(f.Test(eFlag0));
87   EXPECT_FALSE(f.Test(eFlag1));
88   EXPECT_FALSE(f.Test(eFlag2));
89 
90   f.Set(eFlag0);
91   EXPECT_TRUE(f.Test(eFlag0));
92   EXPECT_FALSE(f.Test(eFlag1));
93   EXPECT_FALSE(f.Test(eFlag2));
94 
95   f.Set(eFlag1);
96   EXPECT_TRUE(f.Test(eFlag0));
97   EXPECT_TRUE(f.Test(eFlag1));
98   EXPECT_FALSE(f.Test(eFlag2));
99 
100   f.Clear(eFlag0);
101   EXPECT_FALSE(f.Test(eFlag0));
102   EXPECT_TRUE(f.Test(eFlag1));
103   EXPECT_FALSE(f.Test(eFlag2));
104 
105   // FIXME: Should Flags assert on Test(eFlag0 | eFlag1) (more than one bit)?
106 }
107 
TEST(Flags,AllClear)108 TEST(Flags, AllClear) {
109   Flags f;
110 
111   EXPECT_TRUE(f.AllClear(eFlag0 | eFlag1));
112 
113   f.Set(eFlag0);
114   EXPECT_FALSE(f.AllClear(eFlag0 | eFlag1));
115 
116   f.Set(eFlag1);
117   f.Clear(eFlag0);
118   EXPECT_FALSE(f.AllClear(eFlag0 | eFlag1));
119 
120   f.Clear(eFlag1);
121   EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1));
122 }
123 
TEST(Flags,AnyClear)124 TEST(Flags, AnyClear) {
125   Flags f;
126   EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1));
127 
128   f.Set(eFlag0);
129   EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1));
130 
131   f.Set(eFlag1);
132   f.Set(eFlag0);
133   EXPECT_FALSE(f.AnyClear(eFlag0 | eFlag1));
134 
135   f.Clear(eFlag1);
136   EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1));
137 
138   f.Clear(eFlag0);
139   EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1));
140 }
141 
TEST(Flags,IsClear)142 TEST(Flags, IsClear) {
143   Flags f;
144 
145   EXPECT_TRUE(f.IsClear(eFlag0));
146   EXPECT_TRUE(f.IsClear(eFlag1));
147 
148   f.Set(eFlag0);
149   EXPECT_FALSE(f.IsClear(eFlag0));
150   EXPECT_TRUE(f.IsClear(eFlag1));
151 
152   f.Set(eFlag1);
153   EXPECT_FALSE(f.IsClear(eFlag0));
154   EXPECT_FALSE(f.IsClear(eFlag1));
155 
156   f.Clear(eFlag0);
157   EXPECT_TRUE(f.IsClear(eFlag0));
158   EXPECT_FALSE(f.IsClear(eFlag1));
159 
160   f.Clear(eFlag1);
161   EXPECT_TRUE(f.IsClear(eFlag0));
162   EXPECT_TRUE(f.IsClear(eFlag1));
163 }
164