1 #include "objects/wrappers/Flags.h" 2 #include "catch.hpp" 3 4 using namespace Sph; 5 6 enum class Enum { OPT1 = 1 << 0, OPT2 = 1 << 1, OPT3 = 1 << 2 }; 7 8 TEST_CASE("Flags constructor", "[flags]") { 9 Flags<Enum> flags; 10 flags.set(Enum::OPT1); 11 REQUIRE(flags.has(Enum::OPT1)); 12 REQUIRE_FALSE(flags.has(Enum::OPT2)); 13 REQUIRE_FALSE(flags.has(Enum::OPT3)); 14 15 REQUIRE(flags.hasAny(Enum::OPT1, Enum::OPT2, Enum::OPT3)); 16 REQUIRE_FALSE(flags.hasAll(Enum::OPT1, Enum::OPT2, Enum::OPT3)); 17 18 flags.set(Enum::OPT3); 19 REQUIRE(flags.has(Enum::OPT1)); 20 REQUIRE_FALSE(flags.has(Enum::OPT2)); 21 REQUIRE(flags.has(Enum::OPT3)); 22 REQUIRE_FALSE(flags.hasAll(Enum::OPT1, Enum::OPT2, Enum::OPT3)); 23 REQUIRE(flags.hasAll(Enum::OPT1, Enum::OPT3)); 24 25 flags.unset(Enum::OPT1); 26 REQUIRE(!flags.has(Enum::OPT1)); 27 REQUIRE(!flags.has(Enum::OPT2)); 28 REQUIRE(flags.has(Enum::OPT3)); 29 30 flags.setIf(Enum::OPT1, true); 31 flags.setIf(Enum::OPT2, true); 32 flags.setIf(Enum::OPT3, false); 33 REQUIRE(flags.has(Enum::OPT1)); 34 REQUIRE(flags.has(Enum::OPT2)); 35 REQUIRE(!flags.has(Enum::OPT3)); 36 } 37 38 TEST_CASE("Flags operator", "[flags]") { 39 Flags<Enum> flags; 40 flags = Enum::OPT1 | Enum::OPT2; 41 REQUIRE(flags.has(Enum::OPT1)); 42 REQUIRE(flags.has(Enum::OPT2)); 43 REQUIRE(!flags.has(Enum::OPT3)); 44 flags = Enum::OPT1 | Enum::OPT2 | Enum::OPT3; 45 REQUIRE(flags.has(Enum::OPT1)); 46 REQUIRE(flags.has(Enum::OPT2)); 47 REQUIRE(flags.has(Enum::OPT3)); 48 } 49 50 TEST_CASE("Empty flags", "[flags]") { 51 Flags<Enum> flags(Enum::OPT1); 52 flags = EMPTY_FLAGS; 53 REQUIRE(!flags.hasAny(Enum::OPT1, Enum::OPT2, Enum::OPT3)); 54 } 55