|  | /* | 
|  | * Copyright 2019 Google Inc. | 
|  | * | 
|  | * Use of this source code is governed by a BSD-style license that can be | 
|  | * found in the LICENSE file. | 
|  | */ | 
|  |  | 
|  | #include "src/core/SkEnumBitMask.h" | 
|  | #include "tests/Test.h" | 
|  |  | 
|  | enum class Flags { | 
|  | kNone = 0, | 
|  | kA = 1, | 
|  | kB = 2, | 
|  | kC = 4 | 
|  | }; | 
|  | SK_MAKE_BITMASK_OPS(Flags) | 
|  |  | 
|  | DEF_TEST(skgpu_Mask, r) { | 
|  | SkEnumBitMask<Flags> flags = Flags::kNone; | 
|  | REPORTER_ASSERT(r, !flags); | 
|  | flags |= Flags::kA; | 
|  | REPORTER_ASSERT(r, flags); | 
|  | REPORTER_ASSERT(r, !(flags & Flags::kB)); | 
|  | REPORTER_ASSERT(r, (flags & Flags::kA)); | 
|  | flags |= (Flags::kB | Flags::kC); | 
|  | auto mask = Flags::kB | Flags::kC; | 
|  | REPORTER_ASSERT(r, (flags & mask) == mask); | 
|  | REPORTER_ASSERT(r, flags == (Flags::kA | Flags::kB | Flags::kC)); | 
|  | flags &= ~Flags::kC; | 
|  | REPORTER_ASSERT(r, flags == (Flags::kA | Flags::kB)); | 
|  | REPORTER_ASSERT(r, (flags & mask) != mask); | 
|  | REPORTER_ASSERT(r, (flags & mask) != Flags::kNone); | 
|  | REPORTER_ASSERT(r, (flags & mask)); | 
|  | REPORTER_ASSERT(r, flags); | 
|  | flags &= ~Flags::kB; | 
|  | REPORTER_ASSERT(r, (flags & mask) == Flags::kNone); | 
|  | REPORTER_ASSERT(r, !(flags & mask)); | 
|  | REPORTER_ASSERT(r, flags); | 
|  | flags = (flags | flags) ^ (flags); | 
|  | REPORTER_ASSERT(r, !flags); | 
|  | flags ^= mask; | 
|  | REPORTER_ASSERT(r, flags == mask); | 
|  | REPORTER_ASSERT(r, !(Flags::kA & Flags::kB)); | 
|  | REPORTER_ASSERT(r, (Flags::kA ^ Flags::kB) == (Flags::kA | Flags::kB)); | 
|  | } |