/* * 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 "experimental/graphite/src/EnumBitMask.h" #include "tests/Test.h" enum class Flags { kNone = 0, kA = 1, kB = 2, kC = 4 }; SKGPU_MAKE_MASK_OPS(Flags); using namespace skgpu; DEF_GRAPHITE_TEST(skgpu_Mask, r) { Mask 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)); }