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