]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - unittests/Utility/FlagsTest.cpp
Vendor import of lldb trunk r351319 (just before the release_80 branch
[FreeBSD/FreeBSD.git] / unittests / Utility / FlagsTest.cpp
1 //===-- FlagsTest.cpp -------------------===---------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #include "gtest/gtest.h"
11
12 #include "lldb/Utility/Flags.h"
13
14 using namespace lldb_private;
15
16 enum DummyFlags {
17   eFlag0     = 1 << 0,
18   eFlag1     = 1 << 1,
19   eFlag2     = 1 << 2,
20   eAllFlags  = (eFlag0 | eFlag1 | eFlag2)
21 };
22
23 TEST(Flags, GetBitSize) {
24   Flags f;
25   // Methods like ClearCount depend on this specific value, so we test
26   // against it here.
27   EXPECT_EQ(32U, f.GetBitSize());
28 }
29
30 TEST(Flags, Reset) {
31   Flags f;
32   f.Reset(0x3);
33   EXPECT_EQ(0x3U, f.Get());
34   EXPECT_EQ(2U, f.SetCount());
35 }
36
37 TEST(Flags, Clear) {
38   Flags f;
39   f.Reset(0x3);
40   EXPECT_EQ(2U, f.SetCount());
41
42   f.Clear(0x5);
43   EXPECT_EQ(1U, f.SetCount());
44
45   f.Clear();
46   EXPECT_EQ(0U, f.SetCount());
47 }
48
49 TEST(Flags, AllSet) {
50   Flags f;
51
52   EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1));
53
54   f.Set(eFlag0);
55   EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1));
56
57   f.Set(eFlag1);
58   EXPECT_TRUE(f.AllSet(eFlag0 | eFlag1));
59
60   f.Clear(eFlag1);
61   EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1));
62
63   f.Clear(eFlag0);
64   EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1));
65 }
66
67 TEST(Flags, AnySet) {
68   Flags f;
69
70   EXPECT_FALSE(f.AnySet(eFlag0 | eFlag1));
71
72   f.Set(eFlag0);
73   EXPECT_TRUE(f.AnySet(eFlag0 | eFlag1));
74
75   f.Set(eFlag1);
76   EXPECT_TRUE(f.AnySet(eFlag0 | eFlag1));
77
78   f.Clear(eFlag1);
79   EXPECT_TRUE(f.AnySet(eFlag0 | eFlag1));
80
81   f.Clear(eFlag0);
82   EXPECT_FALSE(f.AnySet(eFlag0 | eFlag1));
83 }
84
85 TEST(Flags, Test) {
86   Flags f;
87
88   EXPECT_FALSE(f.Test(eFlag0));
89   EXPECT_FALSE(f.Test(eFlag1));
90   EXPECT_FALSE(f.Test(eFlag2));
91
92   f.Set(eFlag0);
93   EXPECT_TRUE(f.Test(eFlag0));
94   EXPECT_FALSE(f.Test(eFlag1));
95   EXPECT_FALSE(f.Test(eFlag2));
96
97   f.Set(eFlag1);
98   EXPECT_TRUE(f.Test(eFlag0));
99   EXPECT_TRUE(f.Test(eFlag1));
100   EXPECT_FALSE(f.Test(eFlag2));
101
102   f.Clear(eFlag0);
103   EXPECT_FALSE(f.Test(eFlag0));
104   EXPECT_TRUE(f.Test(eFlag1));
105   EXPECT_FALSE(f.Test(eFlag2));
106
107   // FIXME: Should Flags assert on Test(eFlag0 | eFlag1) (more than one bit)?
108 }
109
110 TEST(Flags, AllClear) {
111   Flags f;
112
113   EXPECT_TRUE(f.AllClear(eFlag0 | eFlag1));
114
115   f.Set(eFlag0);
116   EXPECT_FALSE(f.AllClear(eFlag0 | eFlag1));
117
118   f.Set(eFlag1);
119   f.Clear(eFlag0);
120   EXPECT_FALSE(f.AllClear(eFlag0 | eFlag1));
121
122   f.Clear(eFlag1);
123   EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1));
124 }
125
126 TEST(Flags, AnyClear) {
127   Flags f;
128   EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1));
129
130   f.Set(eFlag0);
131   EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1));
132
133   f.Set(eFlag1);
134   f.Set(eFlag0);
135   EXPECT_FALSE(f.AnyClear(eFlag0 | eFlag1));
136
137   f.Clear(eFlag1);
138   EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1));
139
140   f.Clear(eFlag0);
141   EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1));
142 }
143
144 TEST(Flags, IsClear) {
145   Flags f;
146
147   EXPECT_TRUE(f.IsClear(eFlag0));
148   EXPECT_TRUE(f.IsClear(eFlag1));
149
150   f.Set(eFlag0);
151   EXPECT_FALSE(f.IsClear(eFlag0));
152   EXPECT_TRUE(f.IsClear(eFlag1));
153
154   f.Set(eFlag1);
155   EXPECT_FALSE(f.IsClear(eFlag0));
156   EXPECT_FALSE(f.IsClear(eFlag1));
157
158   f.Clear(eFlag0);
159   EXPECT_TRUE(f.IsClear(eFlag0));
160   EXPECT_FALSE(f.IsClear(eFlag1));
161
162   f.Clear(eFlag1);
163   EXPECT_TRUE(f.IsClear(eFlag0));
164   EXPECT_TRUE(f.IsClear(eFlag1));
165 }
166
167 TEST(Flags, ClearCount) {
168   Flags f;
169   EXPECT_EQ(32U, f.ClearCount());
170
171   f.Set(eFlag0);
172   EXPECT_EQ(31U, f.ClearCount());
173
174   f.Set(eFlag0);
175   EXPECT_EQ(31U, f.ClearCount());
176
177   f.Set(eFlag1);
178   EXPECT_EQ(30U, f.ClearCount());
179
180   f.Set(eAllFlags);
181   EXPECT_EQ(29U, f.ClearCount());
182 }
183
184 TEST(Flags, SetCount) {
185   Flags f;
186   EXPECT_EQ(0U, f.SetCount());
187
188   f.Set(eFlag0);
189   EXPECT_EQ(1U, f.SetCount());
190
191   f.Set(eFlag0);
192   EXPECT_EQ(1U, f.SetCount());
193
194   f.Set(eFlag1);
195   EXPECT_EQ(2U, f.SetCount());
196
197   f.Set(eAllFlags);
198   EXPECT_EQ(3U, f.SetCount());
199 }