| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- #include <gtest/gtest.h>
- #include <entt/core/enum.hpp>
- #include <entt/core/type_traits.hpp>
- enum class detected {
- foo = 0x01,
- bar = 0x02,
- quux = 0x04,
- _entt_enum_as_bitmask
- };
- enum class registered {
- foo = 0x01,
- bar = 0x02,
- quux = 0x04
- };
- template<>
- struct entt::enum_as_bitmask<registered>
- : std::true_type {};
- template<typename Type>
- struct Enum: testing::Test {
- using type = Type;
- };
- using EnumTypes = ::testing::Types<detected, registered>;
- TYPED_TEST_SUITE(Enum, EnumTypes);
- TYPED_TEST(Enum, Functionalities) {
- using enum_type = typename TestFixture::type;
- ASSERT_TRUE(!!((enum_type::foo | enum_type::bar) & enum_type::foo));
- ASSERT_TRUE(!!((enum_type::foo | enum_type::bar) & enum_type::bar));
- ASSERT_TRUE(!((enum_type::foo | enum_type::bar) & enum_type::quux));
- ASSERT_TRUE(!!((enum_type::foo ^ enum_type::bar) & enum_type::foo));
- ASSERT_TRUE(!((enum_type::foo ^ enum_type::foo) & enum_type::foo));
- ASSERT_TRUE(!(~enum_type::foo & enum_type::foo));
- ASSERT_TRUE(!!(~enum_type::foo & enum_type::bar));
- ASSERT_TRUE(enum_type::foo == enum_type::foo);
- ASSERT_TRUE(enum_type::foo != enum_type::bar);
- enum_type value = enum_type::foo;
- ASSERT_TRUE(!!(value & enum_type::foo));
- ASSERT_TRUE(!(value & enum_type::bar));
- ASSERT_TRUE(!(value & enum_type::quux));
- value |= (enum_type::bar | enum_type::quux);
- ASSERT_TRUE(!!(value & enum_type::foo));
- ASSERT_TRUE(!!(value & enum_type::bar));
- ASSERT_TRUE(!!(value & enum_type::quux));
- value &= (enum_type::bar | enum_type::quux);
- ASSERT_TRUE(!(value & enum_type::foo));
- ASSERT_TRUE(!!(value & enum_type::bar));
- ASSERT_TRUE(!!(value & enum_type::quux));
- value ^= enum_type::bar;
- ASSERT_TRUE(!(value & enum_type::foo));
- ASSERT_TRUE(!(value & enum_type::bar));
- ASSERT_TRUE(!!(value & enum_type::quux));
- }
|