| /* |
| * 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)); |
| } |