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