boost/libs/vmd/test/test_doc_example_switch.cxx
2022-12-15 23:45:23 +08:00

158 lines
4.4 KiB
C++

// (C) Copyright Edward Diener 2011-2015
// Use, modification and distribution are subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt).
#include <boost/vmd/equal.hpp>
#include <boost/vmd/identity.hpp>
#include <libs/vmd/test/test_doc_example_switch.hpp>
#include <boost/detail/lightweight_test.hpp>
int main()
{
#if BOOST_PP_VARIADICS
//[ example_switch_defines
#define BOOST_VMD_SWITCH_TEST_1(number) \
test1_ ## number
/**/
#define BOOST_VMD_SWITCH_TEST_2(number) \
test2_ ## number
/**/
#define BOOST_VMD_SWITCH_TEST_3(number) \
test3_ ## number
/**/
#define BOOST_VMD_SWITCH_TEST_DEFAULT(number) \
test_default_ ## number
/**/
//]
#define BOOST_VMD_REGISTER_test1_7 (test1_7)
#define BOOST_VMD_REGISTER_test2_7 (test2_7)
#define BOOST_VMD_REGISTER_test3_7 (test3_7)
#define BOOST_VMD_REGISTER_test_default_7 (test_default_7)
#define BOOST_VMD_DETECT_test1_7_test1_7
#define BOOST_VMD_DETECT_test2_7_test2_7
#define BOOST_VMD_DETECT_test3_7_test3_7
#define BOOST_VMD_DETECT_test_default_7_test_default_7
BOOST_TEST(BOOST_VMD_EQUAL
(
//[ example_switch_defines_t1
BOOST_VMD_SWITCH(1,
(7),
(BOOST_VMD_SWITCH_TEST_DEFAULT),
(3,BOOST_VMD_SWITCH_TEST_3),
(1,BOOST_VMD_SWITCH_TEST_1),
(2,BOOST_VMD_SWITCH_TEST_2)
)
//]
,test1_7
)
);
BOOST_TEST(BOOST_VMD_EQUAL
(
BOOST_VMD_SWITCH(2,
(7),
(BOOST_VMD_SWITCH_TEST_DEFAULT),
(1,BOOST_VMD_SWITCH_TEST_1),
(3,BOOST_VMD_SWITCH_TEST_3),
(2,BOOST_VMD_SWITCH_TEST_2)
)
,test2_7
)
);
BOOST_TEST(BOOST_VMD_EQUAL
(
BOOST_VMD_SWITCH(3,
(7),
(BOOST_VMD_SWITCH_TEST_DEFAULT),
(1,BOOST_VMD_SWITCH_TEST_1),
(2,BOOST_VMD_SWITCH_TEST_2),
(3,BOOST_VMD_SWITCH_TEST_3)
)
,test3_7
)
);
BOOST_TEST(BOOST_VMD_EQUAL
(
//[ example_switch_defines_t4
BOOST_VMD_SWITCH(4,
(7),
(BOOST_VMD_SWITCH_TEST_DEFAULT),
(2,BOOST_VMD_SWITCH_TEST_2),
(1,BOOST_VMD_SWITCH_TEST_1),
(3,BOOST_VMD_SWITCH_TEST_3)
)
//]
,test_default_7
)
);
BOOST_TEST(BOOST_VMD_EQUAL
(
//[ example_switch_defines_t5
BOOST_VMD_SWITCH(143,
(7),
(BOOST_VMD_SWITCH_TEST_DEFAULT),
(1,BOOST_VMD_SWITCH_TEST_1),
(2,BOOST_VMD_SWITCH_TEST_2),
(3,BOOST_VMD_SWITCH_TEST_3),
(143,BOOST_VMD_SWITCH_IDENTITY(55))
)
//]
,55
)
);
BOOST_TEST(BOOST_VMD_EQUAL
(
//[ example_switch_defines_t6
BOOST_VMD_SWITCH(155,
(7),
(BOOST_VMD_SWITCH_IDENTITY(77)),
(1,BOOST_VMD_SWITCH_TEST_1),
(2,BOOST_VMD_SWITCH_TEST_2),
(3,BOOST_VMD_SWITCH_TEST_3),
(143,BOOST_VMD_SWITCH_IDENTITY(55))
)
//]
,77
)
);
BOOST_TEST(BOOST_VMD_EQUAL
(
//[ example_switch_defines_t7
BOOST_VMD_SWITCH(BOOST_VMD_TYPE_TUPLE,
(7),
(BOOST_VMD_SWITCH_TEST_DEFAULT),
(BOOST_VMD_TYPE_TUPLE,BOOST_VMD_SWITCH_TEST_1),
((1,2,3),BOOST_VMD_SWITCH_TEST_3),
(2,BOOST_VMD_SWITCH_TEST_2)
)
//]
,test1_7
)
);
#else
BOOST_ERROR("No variadic macro support");
#endif
return boost::report_errors();
}