1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2019 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#include "experimental/graphite/src/EnumBitMask.h" 9cb93a386Sopenharmony_ci#include "tests/Test.h" 10cb93a386Sopenharmony_ci 11cb93a386Sopenharmony_cienum class Flags { 12cb93a386Sopenharmony_ci kNone = 0, 13cb93a386Sopenharmony_ci kA = 1, 14cb93a386Sopenharmony_ci kB = 2, 15cb93a386Sopenharmony_ci kC = 4 16cb93a386Sopenharmony_ci}; 17cb93a386Sopenharmony_ci 18cb93a386Sopenharmony_ciSKGPU_MAKE_MASK_OPS(Flags); 19cb93a386Sopenharmony_ci 20cb93a386Sopenharmony_ciusing namespace skgpu; 21cb93a386Sopenharmony_ci 22cb93a386Sopenharmony_ciDEF_GRAPHITE_TEST(skgpu_Mask, r) { 23cb93a386Sopenharmony_ci Mask<Flags> flags = Flags::kNone; 24cb93a386Sopenharmony_ci REPORTER_ASSERT(r, !flags); 25cb93a386Sopenharmony_ci flags |= Flags::kA; 26cb93a386Sopenharmony_ci REPORTER_ASSERT(r, flags); 27cb93a386Sopenharmony_ci REPORTER_ASSERT(r, !(flags & Flags::kB)); 28cb93a386Sopenharmony_ci REPORTER_ASSERT(r, (flags & Flags::kA)); 29cb93a386Sopenharmony_ci flags |= (Flags::kB | Flags::kC); 30cb93a386Sopenharmony_ci auto mask = Flags::kB | Flags::kC; 31cb93a386Sopenharmony_ci REPORTER_ASSERT(r, (flags & mask) == mask); 32cb93a386Sopenharmony_ci REPORTER_ASSERT(r, flags == (Flags::kA | Flags::kB | Flags::kC)); 33cb93a386Sopenharmony_ci flags &= ~Flags::kC; 34cb93a386Sopenharmony_ci REPORTER_ASSERT(r, flags == (Flags::kA | Flags::kB)); 35cb93a386Sopenharmony_ci REPORTER_ASSERT(r, (flags & mask) != mask); 36cb93a386Sopenharmony_ci REPORTER_ASSERT(r, (flags & mask) != Flags::kNone); 37cb93a386Sopenharmony_ci REPORTER_ASSERT(r, (flags & mask)); 38cb93a386Sopenharmony_ci REPORTER_ASSERT(r, flags); 39cb93a386Sopenharmony_ci flags &= ~Flags::kB; 40cb93a386Sopenharmony_ci REPORTER_ASSERT(r, (flags & mask) == Flags::kNone); 41cb93a386Sopenharmony_ci REPORTER_ASSERT(r, !(flags & mask)); 42cb93a386Sopenharmony_ci REPORTER_ASSERT(r, flags); 43cb93a386Sopenharmony_ci flags = (flags | flags) ^ (flags); 44cb93a386Sopenharmony_ci REPORTER_ASSERT(r, !flags); 45cb93a386Sopenharmony_ci flags ^= mask; 46cb93a386Sopenharmony_ci REPORTER_ASSERT(r, flags == mask); 47cb93a386Sopenharmony_ci REPORTER_ASSERT(r, !(Flags::kA & Flags::kB)); 48cb93a386Sopenharmony_ci REPORTER_ASSERT(r, (Flags::kA ^ Flags::kB) == (Flags::kA | Flags::kB)); 49cb93a386Sopenharmony_ci} 50