| Index: test/base-unittests/flags-unittest.cc
|
| diff --git a/test/base-unittests/flags-unittest.cc b/test/base-unittests/flags-unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..da526cb12160faf63bff7a5f41899de46dc15394
|
| --- /dev/null
|
| +++ b/test/base-unittests/flags-unittest.cc
|
| @@ -0,0 +1,103 @@
|
| +// Copyright 2014 the V8 project authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "src/base/flags.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace v8 {
|
| +namespace base {
|
| +
|
| +namespace {
|
| +
|
| +enum Flag1 {
|
| + kFlag1None = 0,
|
| + kFlag1First = 1u << 1,
|
| + kFlag1Second = 1u << 2,
|
| + kFlag1All = kFlag1None | kFlag1First | kFlag1Second
|
| +};
|
| +DEFINE_FLAGS(Flags1, Flag1);
|
| +
|
| +
|
| +DEFINE_OPERATORS_FOR_FLAGS(Flags1)
|
| +
|
| +
|
| +Flags1 bar(Flags1 flags1) { return flags1; }
|
| +
|
| +} // namespace
|
| +
|
| +
|
| +TEST(FlagsTest, BasicOperations) {
|
| + Flags1 a;
|
| + EXPECT_EQ(kFlag1None, static_cast<int>(a));
|
| + a |= kFlag1First;
|
| + EXPECT_EQ(kFlag1First, static_cast<int>(a));
|
| + a = a | kFlag1Second;
|
| + EXPECT_EQ(kFlag1All, static_cast<int>(a));
|
| + a &= kFlag1Second;
|
| + EXPECT_EQ(kFlag1Second, static_cast<int>(a));
|
| + a = kFlag1None & a;
|
| + EXPECT_EQ(kFlag1None, static_cast<int>(a));
|
| + a ^= (kFlag1All | kFlag1None);
|
| + EXPECT_EQ(kFlag1All, static_cast<int>(a));
|
| + Flags1 b = ~a;
|
| + EXPECT_EQ(kFlag1All, static_cast<int>(a));
|
| + EXPECT_EQ(~static_cast<int>(a), static_cast<int>(b));
|
| + Flags1 c = a;
|
| + EXPECT_EQ(a, c);
|
| + EXPECT_NE(a, b);
|
| + EXPECT_EQ(a, bar(a));
|
| + EXPECT_EQ(a, bar(kFlag1All));
|
| +}
|
| +
|
| +
|
| +namespace {
|
| +namespace foo {
|
| +
|
| +enum Option {
|
| + kNoOptions = 0,
|
| + kOption1 = 1,
|
| + kOption2 = 2,
|
| + kAllOptions = kNoOptions | kOption1 | kOption2
|
| +};
|
| +DEFINE_FLAGS(Options, Option);
|
| +
|
| +} // namespace foo
|
| +
|
| +
|
| +DEFINE_OPERATORS_FOR_FLAGS(foo::Options)
|
| +
|
| +} // namespace
|
| +
|
| +
|
| +TEST(FlagsTest, NamespaceScope) {
|
| + foo::Options options;
|
| + options ^= foo::kNoOptions;
|
| + options |= foo::kOption1 | foo::kOption2;
|
| + EXPECT_EQ(foo::kAllOptions, static_cast<int>(options));
|
| +}
|
| +
|
| +
|
| +namespace {
|
| +
|
| +struct Foo {
|
| + enum Enum { kEnum1 = 1, kEnum2 = 2 };
|
| + DEFINE_FLAGS(Enums, Enum);
|
| +};
|
| +
|
| +
|
| +DEFINE_OPERATORS_FOR_FLAGS(Foo::Enums)
|
| +
|
| +} // namespace
|
| +
|
| +
|
| +TEST(FlagsTest, ClassScope) {
|
| + Foo::Enums enums;
|
| + enums |= Foo::kEnum1;
|
| + enums |= Foo::kEnum2;
|
| + EXPECT_TRUE(enums & Foo::kEnum1);
|
| + EXPECT_TRUE(enums & Foo::kEnum2);
|
| +}
|
| +
|
| +} // namespace base
|
| +} // namespace v8
|
|
|