V8 Project
flags-unittest.cc
Go to the documentation of this file.
1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "include/v8stdint.h"
6 #include "src/base/flags.h"
7 #include "testing/gtest/include/gtest/gtest.h"
8 
9 namespace v8 {
10 namespace base {
11 
12 namespace {
13 
14 enum Flag1 {
16  kFlag1First = 1u << 1,
17  kFlag1Second = 1u << 2,
19 };
20 typedef Flags<Flag1> Flags1;
21 
22 
24 
25 
26 Flags1 bar(Flags1 flags1) { return flags1; }
27 
28 } // namespace
29 
30 
31 TEST(FlagsTest, BasicOperations) {
32  Flags1 a;
33  EXPECT_EQ(kFlag1None, static_cast<int>(a));
34  a |= kFlag1First;
35  EXPECT_EQ(kFlag1First, static_cast<int>(a));
36  a = a | kFlag1Second;
37  EXPECT_EQ(kFlag1All, static_cast<int>(a));
38  a &= kFlag1Second;
39  EXPECT_EQ(kFlag1Second, static_cast<int>(a));
40  a = kFlag1None & a;
41  EXPECT_EQ(kFlag1None, static_cast<int>(a));
42  a ^= (kFlag1All | kFlag1None);
43  EXPECT_EQ(kFlag1All, static_cast<int>(a));
44  Flags1 b = ~a;
45  EXPECT_EQ(kFlag1All, static_cast<int>(a));
46  EXPECT_EQ(~static_cast<int>(a), static_cast<int>(b));
47  Flags1 c = a;
48  EXPECT_EQ(a, c);
49  EXPECT_NE(a, b);
50  EXPECT_EQ(a, bar(a));
51  EXPECT_EQ(a, bar(kFlag1All));
52 }
53 
54 
55 namespace {
56 namespace foo {
57 
58 enum Option {
60  kOption1 = 1,
61  kOption2 = 2,
63 };
64 typedef Flags<Option> Options;
65 
66 } // namespace foo
67 
68 
70 
71 } // namespace
72 
73 
74 TEST(FlagsTest, NamespaceScope) {
75  foo::Options options;
76  options ^= foo::kNoOptions;
77  options |= foo::kOption1 | foo::kOption2;
78  EXPECT_EQ(foo::kAllOptions, static_cast<int>(options));
79 }
80 
81 
82 namespace {
83 
84 struct Foo {
85  enum Enum { kEnum1 = 1, kEnum2 = 2 };
86  typedef Flags<Enum, uint32_t> Enums;
87 };
88 
89 
91 
92 } // namespace
93 
94 
95 TEST(FlagsTest, ClassScope) {
96  Foo::Enums enums;
97  enums |= Foo::kEnum1;
98  enums |= Foo::kEnum2;
99  EXPECT_TRUE(enums & Foo::kEnum1);
100  EXPECT_TRUE(enums & Foo::kEnum2);
101 }
102 
103 } // namespace base
104 } // namespace v8
#define DEFINE_OPERATORS_FOR_FLAGS(Type)
Definition: flags.h:67
TEST(CPUTest, FeatureImplications)
Definition: cpu-unittest.cc:11
Debugger support for the V8 JavaScript engine.
Definition: accessors.cc:20