llvm-project
163 строки · 3.2 Кб
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
13using namespace lldb_private;
14
15enum DummyFlags {
16eFlag0 = 1 << 0,
17eFlag1 = 1 << 1,
18eFlag2 = 1 << 2,
19eAllFlags = (eFlag0 | eFlag1 | eFlag2)
20};
21
22TEST(Flags, GetBitSize) {
23Flags f;
24// Methods like ClearCount depend on this specific value, so we test
25// against it here.
26EXPECT_EQ(32U, f.GetBitSize());
27}
28
29TEST(Flags, Reset) {
30Flags f;
31f.Reset(0x3);
32EXPECT_EQ(0x3U, f.Get());
33}
34
35TEST(Flags, Clear) {
36Flags f;
37f.Reset(0x3);
38EXPECT_EQ(0x3U, f.Get());
39
40f.Clear(0x5);
41EXPECT_EQ(0x2U, f.Get());
42
43f.Clear();
44EXPECT_EQ(0x0U, f.Get());
45}
46
47TEST(Flags, AllSet) {
48Flags f;
49
50EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1));
51
52f.Set(eFlag0);
53EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1));
54
55f.Set(eFlag1);
56EXPECT_TRUE(f.AllSet(eFlag0 | eFlag1));
57
58f.Clear(eFlag1);
59EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1));
60
61f.Clear(eFlag0);
62EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1));
63}
64
65TEST(Flags, AnySet) {
66Flags f;
67
68EXPECT_FALSE(f.AnySet(eFlag0 | eFlag1));
69
70f.Set(eFlag0);
71EXPECT_TRUE(f.AnySet(eFlag0 | eFlag1));
72
73f.Set(eFlag1);
74EXPECT_TRUE(f.AnySet(eFlag0 | eFlag1));
75
76f.Clear(eFlag1);
77EXPECT_TRUE(f.AnySet(eFlag0 | eFlag1));
78
79f.Clear(eFlag0);
80EXPECT_FALSE(f.AnySet(eFlag0 | eFlag1));
81}
82
83TEST(Flags, Test) {
84Flags f;
85
86EXPECT_FALSE(f.Test(eFlag0));
87EXPECT_FALSE(f.Test(eFlag1));
88EXPECT_FALSE(f.Test(eFlag2));
89
90f.Set(eFlag0);
91EXPECT_TRUE(f.Test(eFlag0));
92EXPECT_FALSE(f.Test(eFlag1));
93EXPECT_FALSE(f.Test(eFlag2));
94
95f.Set(eFlag1);
96EXPECT_TRUE(f.Test(eFlag0));
97EXPECT_TRUE(f.Test(eFlag1));
98EXPECT_FALSE(f.Test(eFlag2));
99
100f.Clear(eFlag0);
101EXPECT_FALSE(f.Test(eFlag0));
102EXPECT_TRUE(f.Test(eFlag1));
103EXPECT_FALSE(f.Test(eFlag2));
104
105// FIXME: Should Flags assert on Test(eFlag0 | eFlag1) (more than one bit)?
106}
107
108TEST(Flags, AllClear) {
109Flags f;
110
111EXPECT_TRUE(f.AllClear(eFlag0 | eFlag1));
112
113f.Set(eFlag0);
114EXPECT_FALSE(f.AllClear(eFlag0 | eFlag1));
115
116f.Set(eFlag1);
117f.Clear(eFlag0);
118EXPECT_FALSE(f.AllClear(eFlag0 | eFlag1));
119
120f.Clear(eFlag1);
121EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1));
122}
123
124TEST(Flags, AnyClear) {
125Flags f;
126EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1));
127
128f.Set(eFlag0);
129EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1));
130
131f.Set(eFlag1);
132f.Set(eFlag0);
133EXPECT_FALSE(f.AnyClear(eFlag0 | eFlag1));
134
135f.Clear(eFlag1);
136EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1));
137
138f.Clear(eFlag0);
139EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1));
140}
141
142TEST(Flags, IsClear) {
143Flags f;
144
145EXPECT_TRUE(f.IsClear(eFlag0));
146EXPECT_TRUE(f.IsClear(eFlag1));
147
148f.Set(eFlag0);
149EXPECT_FALSE(f.IsClear(eFlag0));
150EXPECT_TRUE(f.IsClear(eFlag1));
151
152f.Set(eFlag1);
153EXPECT_FALSE(f.IsClear(eFlag0));
154EXPECT_FALSE(f.IsClear(eFlag1));
155
156f.Clear(eFlag0);
157EXPECT_TRUE(f.IsClear(eFlag0));
158EXPECT_FALSE(f.IsClear(eFlag1));
159
160f.Clear(eFlag1);
161EXPECT_TRUE(f.IsClear(eFlag0));
162EXPECT_TRUE(f.IsClear(eFlag1));
163}
164