Serenity Operating System
at master 78 lines 2.1 kB view raw
1/* 2 * Copyright (c) 2021, Brian Gianforcaro <bgianf@serenityos.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include <LibTest/TestCase.h> 8 9#include <AK/EnumBits.h> 10 11enum class VideoIntro : u8 { 12 None = 0x0, 13 Well = 0x1, 14 Hello = 0x2, 15 Friends = 0x4, 16 ExclimationMark = 0x8, 17 CompleteIntro = Well | Hello | Friends | ExclimationMark, 18}; 19 20AK_ENUM_BITWISE_OPERATORS(VideoIntro); 21 22TEST_CASE(bitwise_or) 23{ 24 auto intro = VideoIntro::Well | VideoIntro::Hello | VideoIntro::Friends | VideoIntro::ExclimationMark; 25 EXPECT_EQ(intro, VideoIntro::CompleteIntro); 26} 27 28TEST_CASE(bitwise_and) 29{ 30 auto intro = VideoIntro::CompleteIntro; 31 EXPECT_EQ(intro & VideoIntro::Hello, VideoIntro::Hello); 32} 33 34TEST_CASE(bitwise_xor) 35{ 36 auto intro = VideoIntro::Well | VideoIntro::Hello | VideoIntro::Friends; 37 EXPECT_EQ(intro ^ VideoIntro::CompleteIntro, VideoIntro::ExclimationMark); 38} 39 40TEST_CASE(bitwise_not) 41{ 42 auto intro = ~VideoIntro::CompleteIntro; 43 EXPECT_EQ(intro & VideoIntro::CompleteIntro, VideoIntro::None); 44} 45 46TEST_CASE(bitwise_or_equal) 47{ 48 auto intro = VideoIntro::Well | VideoIntro::Hello | VideoIntro::Friends; 49 EXPECT_EQ(intro |= VideoIntro::ExclimationMark, VideoIntro::CompleteIntro); 50} 51 52TEST_CASE(bitwise_and_equal) 53{ 54 auto intro = VideoIntro::CompleteIntro; 55 EXPECT_EQ(intro &= VideoIntro::Hello, VideoIntro::Hello); 56} 57 58TEST_CASE(bitwise_xor_equal) 59{ 60 auto intro = VideoIntro::Well | VideoIntro::Hello | VideoIntro::Friends; 61 EXPECT_EQ(intro ^= VideoIntro::CompleteIntro, VideoIntro::ExclimationMark); 62} 63 64TEST_CASE(has_flag) 65{ 66 auto intro = VideoIntro::Hello | VideoIntro::Friends; 67 EXPECT(has_flag(intro, VideoIntro::Friends)); 68 EXPECT(!has_flag(intro, VideoIntro::Well)); 69 EXPECT(!has_flag(intro, VideoIntro::CompleteIntro)); 70} 71 72TEST_CASE(has_any_flag) 73{ 74 auto intro = VideoIntro::Hello | VideoIntro::Friends; 75 EXPECT(has_any_flag(intro, VideoIntro::Friends)); 76 EXPECT(!has_any_flag(intro, VideoIntro::Well)); 77 EXPECT(has_any_flag(intro, VideoIntro::CompleteIntro)); 78}