LCOV - code coverage report
Current view: top level - test/unittests/base - flags-unittest.cc (source / functions) Hit Total Coverage
Test: app.info Lines: 25 25 100.0 %
Date: 2019-01-20 Functions: 8 11 72.7 %

          Line data    Source code
       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 <stdint.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 {
      15             :   kFlag1None = 0,
      16             :   kFlag1First = 1u << 1,
      17             :   kFlag1Second = 1u << 2,
      18             :   kFlag1All = kFlag1None | kFlag1First | kFlag1Second
      19             : };
      20             : typedef Flags<Flag1> Flags1;
      21             : 
      22             : 
      23             : DEFINE_OPERATORS_FOR_FLAGS(Flags1)
      24             : 
      25             : 
      26             : Flags1 bar(Flags1 flags1) { return flags1; }
      27             : 
      28             : }  // namespace
      29             : 
      30             : 
      31       15128 : TEST(FlagsTest, BasicOperations) {
      32           1 :   Flags1 a;
      33           2 :   EXPECT_EQ(kFlag1None, static_cast<int>(a));
      34             :   a |= kFlag1First;
      35           2 :   EXPECT_EQ(kFlag1First, static_cast<int>(a));
      36           1 :   a = a | kFlag1Second;
      37           2 :   EXPECT_EQ(kFlag1All, static_cast<int>(a));
      38             :   a &= kFlag1Second;
      39           2 :   EXPECT_EQ(kFlag1Second, static_cast<int>(a));
      40           1 :   a = kFlag1None & a;
      41           2 :   EXPECT_EQ(kFlag1None, static_cast<int>(a));
      42             :   a ^= (kFlag1All | kFlag1None);
      43           2 :   EXPECT_EQ(kFlag1All, static_cast<int>(a));
      44           1 :   Flags1 b = ~a;
      45           2 :   EXPECT_EQ(kFlag1All, static_cast<int>(a));
      46           3 :   EXPECT_EQ(~static_cast<int>(a), static_cast<int>(b));
      47           1 :   Flags1 c = a;
      48           1 :   EXPECT_EQ(a, c);
      49           1 :   EXPECT_NE(a, b);
      50           2 :   EXPECT_EQ(a, bar(a));
      51           2 :   EXPECT_EQ(a, bar(kFlag1All));
      52           1 : }
      53             : 
      54             : 
      55             : namespace {
      56             : namespace foo {
      57             : 
      58             : enum Option {
      59             :   kNoOptions = 0,
      60             :   kOption1 = 1,
      61             :   kOption2 = 2,
      62             :   kAllOptions = kNoOptions | kOption1 | kOption2
      63             : };
      64             : typedef Flags<Option> Options;
      65             : 
      66             : }  // namespace foo
      67             : 
      68             : 
      69             : DEFINE_OPERATORS_FOR_FLAGS(foo::Options)
      70             : 
      71             : }  // namespace
      72             : 
      73             : 
      74       15128 : TEST(FlagsTest, NamespaceScope) {
      75             :   foo::Options options;
      76             :   options ^= foo::kNoOptions;
      77             :   options |= foo::kOption1 | foo::kOption2;
      78           2 :   EXPECT_EQ(foo::kAllOptions, static_cast<int>(options));
      79           1 : }
      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             : 
      90             : DEFINE_OPERATORS_FOR_FLAGS(Foo::Enums)
      91             : 
      92             : }  // namespace
      93             : 
      94             : 
      95       15128 : 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           1 : }
     102             : 
     103             : }  // namespace base
     104        9075 : }  // namespace v8

Generated by: LCOV version 1.10