blob: 2a2e64ad424d3b55ea5cbff2c54bc89e0e478bbf [file] [log] [blame]
Chris Dalton1ab7ff62021-10-07 15:30:24 -06001/*
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 "experimental/graphite/include/GraphiteTypes.h"
9#include "tests/Test.h"
10
11enum class Flags {
12 kNone = 0,
13 kA = 1,
14 kB = 2,
15 kC = 4
16};
17
18SKGPU_MAKE_MASK_OPS(Flags);
19
20using namespace skgpu;
21
22DEF_TEST(skgpu_Mask, r) {
23 Mask<Flags> flags = Flags::kNone;
24 REPORTER_ASSERT(r, !flags);
25 flags |= Flags::kA;
26 REPORTER_ASSERT(r, flags);
27 REPORTER_ASSERT(r, !(flags & Flags::kB));
28 REPORTER_ASSERT(r, (flags & Flags::kA));
29 flags |= (Flags::kB | Flags::kC);
30 auto mask = Flags::kB | Flags::kC;
31 REPORTER_ASSERT(r, (flags & mask) == mask);
32 REPORTER_ASSERT(r, flags == (Flags::kA | Flags::kB | Flags::kC));
33 flags &= ~Flags::kC;
34 REPORTER_ASSERT(r, flags == (Flags::kA | Flags::kB));
35 REPORTER_ASSERT(r, (flags & mask) != mask);
36 REPORTER_ASSERT(r, (flags & mask) != Flags::kNone);
37 REPORTER_ASSERT(r, (flags & mask));
38 REPORTER_ASSERT(r, flags);
39 flags &= ~Flags::kB;
40 REPORTER_ASSERT(r, (flags & mask) == Flags::kNone);
41 REPORTER_ASSERT(r, !(flags & mask));
42 REPORTER_ASSERT(r, flags);
43 flags = (flags | flags) ^ (flags);
44 REPORTER_ASSERT(r, !flags);
45 flags ^= mask;
46 REPORTER_ASSERT(r, flags == mask);
47 REPORTER_ASSERT(r, !(Flags::kA & Flags::kB));
48 REPORTER_ASSERT(r, (Flags::kA ^ Flags::kB) == (Flags::kA | Flags::kB));
49}