Use compile-time flag setting

This commit is contained in:
jadebenn
2024-04-20 14:17:34 -05:00
parent 5ddf4ce28b
commit f41321eb7b
7 changed files with 196 additions and 64 deletions

View File

@@ -10,9 +10,65 @@ enum class TestFlag : uint8_t {
};
/**
* Test bitset flags
* Test bitset flags (compile-time methods)
*/
TEST(FlagTests, FlagMethodTest) {
TEST(FlagTests, FlagMethodTestCompileTime) {
using enum TestFlag;
auto flag = Flag<TestFlag>{};
// Test setting and reading single flags, exclusively
flag.Reset<FLAG0>();
ASSERT_TRUE(flag.HasOnly<FLAG0>());
flag.Reset<FLAG2>();
ASSERT_TRUE(flag.HasOnly<FLAG2>());
ASSERT_FALSE(flag.HasOnly<FLAG1>());
// Test setting and reading multiple flags, exclusively
flag.Reset<FLAG3, FLAG1>();
ASSERT_FALSE(flag.Has<FLAG2>());
ASSERT_TRUE(flag.Has<FLAG3>());
ASSERT_TRUE(flag.Has<FLAG1>());
ASSERT_TRUE((flag.Has<FLAG3, FLAG1>()));
ASSERT_FALSE(flag.HasOnly<FLAG3>());
ASSERT_FALSE(flag.HasOnly<FLAG1>());
ASSERT_TRUE((flag.HasOnly<FLAG3, FLAG1>()));
// Test flags are being properly reset for next batch of tests
flag.Reset<FLAG0>();
ASSERT_TRUE(flag.Has<FLAG0>());
ASSERT_TRUE(flag.HasOnly<FLAG0>());
ASSERT_FALSE(flag.Has<FLAG3>());
ASSERT_FALSE((flag.Has<FLAG3, FLAG1, FLAG2>()));
// Test setting and reading single flags, non-exclusively
flag.Set<FLAG3>();
ASSERT_TRUE(flag.Has<FLAG3>());
ASSERT_FALSE(flag.Has<FLAG1>());
// Test setting and reading multiple flags, non-exclusively
flag.Set<FLAG2, FLAG4>();
ASSERT_TRUE((flag.Has<FLAG2, FLAG4>()));
ASSERT_TRUE(flag.Has<FLAG3>());
ASSERT_FALSE((flag.Has<FLAG3, FLAG1>()));
ASSERT_TRUE((flag.Has<FLAG3, FLAG2, FLAG4>()));
ASSERT_FALSE(flag.Has<FLAG1>());
ASSERT_FALSE((flag.Has<FLAG1, FLAG3, FLAG2, FLAG4>()));
// Test unsetting and reading multiple flags, non-exclusively
flag.Unset<FLAG3, FLAG1>();
ASSERT_FALSE((flag.Has<FLAG3, FLAG1>()));
ASSERT_FALSE(flag.Has<FLAG3>());
ASSERT_TRUE((flag.Has<FLAG2, FLAG4>()));
ASSERT_FALSE((flag.Has<FLAG3, FLAG2, FLAG4>()));
ASSERT_FALSE(flag.Has<FLAG1>());
ASSERT_FALSE((flag.Has<FLAG1, FLAG3, FLAG2, FLAG4>()));
}
/**
* Test bitset flags (run-time methods)
*/
TEST(FlagTests, FlagMethodTestRunTime) {
using enum TestFlag;
auto flag = Flag<TestFlag>{};
@@ -64,4 +120,3 @@ TEST(FlagTests, FlagMethodTest) {
ASSERT_FALSE(flag.Has(FLAG1));
ASSERT_FALSE(flag.Has(FLAG1, FLAG3, FLAG2, FLAG4));
}