1// Copyright 2020 Peter Dimov
2// Distributed under the Boost Software License, Version 1.0.
3// https://www.boost.org/LICENSE_1_0.txt
4
5#include <boost/describe/enumerators.hpp>
6#include <boost/describe/enum.hpp>
7#include <boost/core/lightweight_test.hpp>
8
9enum E1
10{
11 v1_1 = 5
12};
13
14BOOST_DESCRIBE_ENUM(E1, v1_1)
15
16BOOST_DEFINE_ENUM(E3, v3_1, v3_2, v3_3)
17
18#if !defined(BOOST_DESCRIBE_CXX11)
19
20#include <boost/config/pragma_message.hpp>
21
22BOOST_PRAGMA_MESSAGE("Skipping test because C++11 is not available")
23int main() {}
24
25#else
26
27enum class E2
28{
29 v2_1,
30 v2_2 = 7
31};
32
33BOOST_DESCRIBE_ENUM(E2, v2_1, v2_2)
34
35BOOST_DEFINE_FIXED_ENUM(E4, int, v4_1, v4_2, v4_3, v4_4)
36
37BOOST_DEFINE_ENUM_CLASS(E5, v5_1, v5_2, v5_3, v5_4, v5_5)
38BOOST_DEFINE_FIXED_ENUM_CLASS(E6, int, v6_1, v6_2, v6_3, v6_4, v6_5, v6_6)
39
40#if !defined(BOOST_DESCRIBE_CXX14)
41
42#include <boost/config/pragma_message.hpp>
43
44BOOST_PRAGMA_MESSAGE("Skipping test because C++14 is not available")
45int main() {}
46
47#else
48
49#include <boost/mp11.hpp>
50using namespace boost::mp11;
51
52int main()
53{
54 {
55 using D1 = boost::describe::describe_enumerators<E1>;
56
57 BOOST_TEST_EQ( mp_size<D1>::value, 1 );
58
59 BOOST_TEST_EQ( (mp_at_c<D1, 0>::value), v1_1 );
60 BOOST_TEST_CSTR_EQ( (mp_at_c<D1, 0>::name), "v1_1" );
61 }
62
63 {
64 using D2 = boost::describe::describe_enumerators<E2>;
65
66 BOOST_TEST_EQ( mp_size<D2>::value, 2 );
67
68 BOOST_TEST_EQ( (int)(mp_at_c<D2, 0>::value), (int)E2::v2_1 );
69 BOOST_TEST_CSTR_EQ( (mp_at_c<D2, 0>::name), "v2_1" );
70
71 BOOST_TEST_EQ( (int)(mp_at_c<D2, 1>::value), (int)E2::v2_2 );
72 BOOST_TEST_CSTR_EQ( (mp_at_c<D2, 1>::name), "v2_2" );
73 }
74
75 {
76 using D3 = boost::describe::describe_enumerators<E3>;
77
78 BOOST_TEST_EQ( mp_size<D3>::value, 3 );
79
80 BOOST_TEST_EQ( (mp_at_c<D3, 0>::value), v3_1 );
81 BOOST_TEST_CSTR_EQ( (mp_at_c<D3, 0>::name), "v3_1" );
82
83 BOOST_TEST_EQ( (mp_at_c<D3, 1>::value), v3_2 );
84 BOOST_TEST_CSTR_EQ( (mp_at_c<D3, 1>::name), "v3_2" );
85
86 BOOST_TEST_EQ( (mp_at_c<D3, 2>::value), v3_3 );
87 BOOST_TEST_CSTR_EQ( (mp_at_c<D3, 2>::name), "v3_3" );
88 }
89
90 {
91 using D4 = boost::describe::describe_enumerators<E4>;
92
93 BOOST_TEST_EQ( mp_size<D4>::value, 4 );
94
95 BOOST_TEST_EQ( (mp_at_c<D4, 0>::value), v4_1 );
96 BOOST_TEST_CSTR_EQ( (mp_at_c<D4, 0>::name), "v4_1" );
97
98 BOOST_TEST_EQ( (mp_at_c<D4, 1>::value), v4_2 );
99 BOOST_TEST_CSTR_EQ( (mp_at_c<D4, 1>::name), "v4_2" );
100
101 BOOST_TEST_EQ( (mp_at_c<D4, 2>::value), v4_3 );
102 BOOST_TEST_CSTR_EQ( (mp_at_c<D4, 2>::name), "v4_3" );
103
104 BOOST_TEST_EQ( (mp_at_c<D4, 3>::value), v4_4 );
105 BOOST_TEST_CSTR_EQ( (mp_at_c<D4, 3>::name), "v4_4" );
106 }
107
108 {
109 using D5 = boost::describe::describe_enumerators<E5>;
110
111 BOOST_TEST_EQ( mp_size<D5>::value, 5 );
112
113 BOOST_TEST_EQ( (int)(mp_at_c<D5, 0>::value), (int)E5::v5_1 );
114 BOOST_TEST_CSTR_EQ( (mp_at_c<D5, 0>::name), "v5_1" );
115
116 BOOST_TEST_EQ( (int)(mp_at_c<D5, 1>::value), (int)E5::v5_2 );
117 BOOST_TEST_CSTR_EQ( (mp_at_c<D5, 1>::name), "v5_2" );
118
119 BOOST_TEST_EQ( (int)(mp_at_c<D5, 2>::value), (int)E5::v5_3 );
120 BOOST_TEST_CSTR_EQ( (mp_at_c<D5, 2>::name), "v5_3" );
121
122 BOOST_TEST_EQ( (int)(mp_at_c<D5, 3>::value), (int)E5::v5_4 );
123 BOOST_TEST_CSTR_EQ( (mp_at_c<D5, 3>::name), "v5_4" );
124
125 BOOST_TEST_EQ( (int)(mp_at_c<D5, 4>::value), (int)E5::v5_5 );
126 BOOST_TEST_CSTR_EQ( (mp_at_c<D5, 4>::name), "v5_5" );
127 }
128
129 {
130 using D6 = boost::describe::describe_enumerators<E6>;
131
132 BOOST_TEST_EQ( mp_size<D6>::value, 6 );
133
134 BOOST_TEST_EQ( (int)(mp_at_c<D6, 0>::value), (int)E6::v6_1 );
135 BOOST_TEST_CSTR_EQ( (mp_at_c<D6, 0>::name), "v6_1" );
136
137 BOOST_TEST_EQ( (int)(mp_at_c<D6, 1>::value), (int)E6::v6_2 );
138 BOOST_TEST_CSTR_EQ( (mp_at_c<D6, 1>::name), "v6_2" );
139
140 BOOST_TEST_EQ( (int)(mp_at_c<D6, 2>::value), (int)E6::v6_3 );
141 BOOST_TEST_CSTR_EQ( (mp_at_c<D6, 2>::name), "v6_3" );
142
143 BOOST_TEST_EQ( (int)(mp_at_c<D6, 3>::value), (int)E6::v6_4 );
144 BOOST_TEST_CSTR_EQ( (mp_at_c<D6, 3>::name), "v6_4" );
145
146 BOOST_TEST_EQ( (int)(mp_at_c<D6, 4>::value), (int)E6::v6_5 );
147 BOOST_TEST_CSTR_EQ( (mp_at_c<D6, 4>::name), "v6_5" );
148
149 BOOST_TEST_EQ( (int)(mp_at_c<D6, 5>::value), (int)E6::v6_6 );
150 BOOST_TEST_CSTR_EQ( (mp_at_c<D6, 5>::name), "v6_6" );
151 }
152
153 return boost::report_errors();
154}
155
156#endif // !defined(BOOST_DESCRIBE_CXX14)
157#endif // !defined(BOOST_DESCRIBE_CXX11)
158

source code of boost/libs/describe/test/enumerators_test.cpp