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