// Copyright 2020 Peter Dimov // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt #include #include #include enum E1 { v1_1 = 5 }; BOOST_DESCRIBE_ENUM(E1, v1_1) BOOST_DEFINE_ENUM(E3, v3_1, v3_2, v3_3) #if !defined(BOOST_DESCRIBE_CXX11) #include BOOST_PRAGMA_MESSAGE("Skipping test because C++11 is not available") int main() {} #else enum class E2 { v2_1, v2_2 = 7 }; BOOST_DESCRIBE_ENUM(E2, v2_1, v2_2) BOOST_DEFINE_FIXED_ENUM(E4, int, v4_1, v4_2, v4_3, v4_4) BOOST_DEFINE_ENUM_CLASS(E5, v5_1, v5_2, v5_3, v5_4, v5_5) BOOST_DEFINE_FIXED_ENUM_CLASS(E6, int, v6_1, v6_2, v6_3, v6_4, v6_5, v6_6) #if !defined(BOOST_DESCRIBE_CXX14) #include BOOST_PRAGMA_MESSAGE("Skipping test because C++14 is not available") int main() {} #else #include using namespace boost::mp11; int main() { { using D1 = boost::describe::describe_enumerators; BOOST_TEST_EQ( mp_size::value, 1 ); BOOST_TEST_EQ( (mp_at_c::value), v1_1 ); BOOST_TEST_CSTR_EQ( (mp_at_c::name), "v1_1" ); } { using D2 = boost::describe::describe_enumerators; BOOST_TEST_EQ( mp_size::value, 2 ); BOOST_TEST_EQ( (int)(mp_at_c::value), (int)E2::v2_1 ); BOOST_TEST_CSTR_EQ( (mp_at_c::name), "v2_1" ); BOOST_TEST_EQ( (int)(mp_at_c::value), (int)E2::v2_2 ); BOOST_TEST_CSTR_EQ( (mp_at_c::name), "v2_2" ); } { using D3 = boost::describe::describe_enumerators; BOOST_TEST_EQ( mp_size::value, 3 ); BOOST_TEST_EQ( (mp_at_c::value), v3_1 ); BOOST_TEST_CSTR_EQ( (mp_at_c::name), "v3_1" ); BOOST_TEST_EQ( (mp_at_c::value), v3_2 ); BOOST_TEST_CSTR_EQ( (mp_at_c::name), "v3_2" ); BOOST_TEST_EQ( (mp_at_c::value), v3_3 ); BOOST_TEST_CSTR_EQ( (mp_at_c::name), "v3_3" ); } { using D4 = boost::describe::describe_enumerators; BOOST_TEST_EQ( mp_size::value, 4 ); BOOST_TEST_EQ( (mp_at_c::value), v4_1 ); BOOST_TEST_CSTR_EQ( (mp_at_c::name), "v4_1" ); BOOST_TEST_EQ( (mp_at_c::value), v4_2 ); BOOST_TEST_CSTR_EQ( (mp_at_c::name), "v4_2" ); BOOST_TEST_EQ( (mp_at_c::value), v4_3 ); BOOST_TEST_CSTR_EQ( (mp_at_c::name), "v4_3" ); BOOST_TEST_EQ( (mp_at_c::value), v4_4 ); BOOST_TEST_CSTR_EQ( (mp_at_c::name), "v4_4" ); } { using D5 = boost::describe::describe_enumerators; BOOST_TEST_EQ( mp_size::value, 5 ); BOOST_TEST_EQ( (int)(mp_at_c::value), (int)E5::v5_1 ); BOOST_TEST_CSTR_EQ( (mp_at_c::name), "v5_1" ); BOOST_TEST_EQ( (int)(mp_at_c::value), (int)E5::v5_2 ); BOOST_TEST_CSTR_EQ( (mp_at_c::name), "v5_2" ); BOOST_TEST_EQ( (int)(mp_at_c::value), (int)E5::v5_3 ); BOOST_TEST_CSTR_EQ( (mp_at_c::name), "v5_3" ); BOOST_TEST_EQ( (int)(mp_at_c::value), (int)E5::v5_4 ); BOOST_TEST_CSTR_EQ( (mp_at_c::name), "v5_4" ); BOOST_TEST_EQ( (int)(mp_at_c::value), (int)E5::v5_5 ); BOOST_TEST_CSTR_EQ( (mp_at_c::name), "v5_5" ); } { using D6 = boost::describe::describe_enumerators; BOOST_TEST_EQ( mp_size::value, 6 ); BOOST_TEST_EQ( (int)(mp_at_c::value), (int)E6::v6_1 ); BOOST_TEST_CSTR_EQ( (mp_at_c::name), "v6_1" ); BOOST_TEST_EQ( (int)(mp_at_c::value), (int)E6::v6_2 ); BOOST_TEST_CSTR_EQ( (mp_at_c::name), "v6_2" ); BOOST_TEST_EQ( (int)(mp_at_c::value), (int)E6::v6_3 ); BOOST_TEST_CSTR_EQ( (mp_at_c::name), "v6_3" ); BOOST_TEST_EQ( (int)(mp_at_c::value), (int)E6::v6_4 ); BOOST_TEST_CSTR_EQ( (mp_at_c::name), "v6_4" ); BOOST_TEST_EQ( (int)(mp_at_c::value), (int)E6::v6_5 ); BOOST_TEST_CSTR_EQ( (mp_at_c::name), "v6_5" ); BOOST_TEST_EQ( (int)(mp_at_c::value), (int)E6::v6_6 ); BOOST_TEST_CSTR_EQ( (mp_at_c::name), "v6_6" ); } return boost::report_errors(); } #endif // !defined(BOOST_DESCRIBE_CXX14) #endif // !defined(BOOST_DESCRIBE_CXX11)