mirror of
https://github.com/BlackMATov/enum.hpp.git
synced 2025-12-13 06:59:45 +07:00
add enum_type to traits
This commit is contained in:
@@ -22,8 +22,35 @@ namespace
|
||||
ENUM_HPP_REGISTER_TRAITS(color)
|
||||
}
|
||||
|
||||
namespace some_namespace
|
||||
{
|
||||
ENUM_HPP_CLASS_DECL(color, unsigned,
|
||||
(red = 0xFF0000)
|
||||
(green = 0x00FF00)
|
||||
(blue = 0x0000FF)
|
||||
(white = red | green | blue))
|
||||
|
||||
ENUM_HPP_REGISTER_TRAITS(color)
|
||||
}
|
||||
|
||||
namespace external_ns
|
||||
{
|
||||
enum class external_enum : unsigned short {
|
||||
a = 10,
|
||||
b,
|
||||
c = a + b
|
||||
};
|
||||
|
||||
ENUM_HPP_TRAITS_DECL(external_enum,
|
||||
(a)
|
||||
(b)
|
||||
(c))
|
||||
|
||||
ENUM_HPP_REGISTER_TRAITS(external_enum)
|
||||
}
|
||||
|
||||
TEST_CASE("examples") {
|
||||
SUBCASE("traits_using") {
|
||||
SUBCASE("traits using") {
|
||||
// size
|
||||
static_assert(color_traits::size == 4);
|
||||
|
||||
@@ -47,16 +74,24 @@ TEST_CASE("examples") {
|
||||
static_assert(color_traits::from_index(42) == std::nullopt);
|
||||
|
||||
// names
|
||||
for ( auto n : color_traits::names ) {
|
||||
for ( std::string_view n : color_traits::names ) {
|
||||
std::cout << n << ",";
|
||||
} // stdout: red,green,blue,
|
||||
}
|
||||
|
||||
SUBCASE("generic_context") {
|
||||
SUBCASE("generic context") {
|
||||
using color = some_namespace::color;
|
||||
|
||||
// to string
|
||||
static_assert(enum_hpp::to_string(color::red) == "red");
|
||||
|
||||
// from string
|
||||
static_assert(enum_hpp::from_string<color>("red") == color::red);
|
||||
}
|
||||
|
||||
SUBCASE("external enums") {
|
||||
using ee = external_ns::external_enum;
|
||||
static_assert(enum_hpp::to_string(ee::a) == "a");
|
||||
static_assert(enum_hpp::from_string<ee>("c") == ee::c);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,6 +82,10 @@ TEST_CASE("enum") {
|
||||
std::underlying_type_t<sn::color>,
|
||||
unsigned>);
|
||||
|
||||
STATIC_CHECK(std::is_same_v<
|
||||
sn::color_traits::enum_type,
|
||||
sn::color>);
|
||||
|
||||
STATIC_CHECK(std::is_same_v<
|
||||
sn::color_traits::underlying_type,
|
||||
enum_hpp::underlying_type<sn::color>>);
|
||||
|
||||
Reference in New Issue
Block a user