]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/vmd/test/test_doc_whyhow.cxx
2 // (C) Copyright Edward Diener 2011-2015
3 // Use, modification and distribution are subject to the Boost Software License,
4 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
5 // http://www.boost.org/LICENSE_1_0.txt).
7 #include <boost/vmd/elem.hpp>
8 #include <boost/vmd/equal.hpp>
9 #include <boost/vmd/get_type.hpp>
10 #include <boost/vmd/is_identifier.hpp>
11 #include <boost/vmd/is_seq.hpp>
12 #include <boost/vmd/is_tuple.hpp>
13 #include <boost/vmd/to_tuple.hpp>
14 #include <boost/preprocessor/control/iif.hpp>
15 #include <boost/detail/lightweight_test.hpp>
20 #if BOOST_PP_VARIADICS
22 #define BOOST_VMD_REGISTER_Seq (Seq)
23 #define BOOST_VMD_REGISTER_Tuple (Tuple)
24 #define BOOST_VMD_REGISTER_Unknown (Unknown)
26 #define BOOST_VMD_DETECT_Seq_Seq
27 #define BOOST_VMD_DETECT_Tuple_Tuple
28 #define BOOST_VMD_DETECT_Unknown_Unknown
30 #define AMACRO(param) \
33 BOOST_VMD_IS_SEQ(param), \
37 BOOST_VMD_IS_TUPLE(param), \
43 BOOST_TEST(BOOST_VMD_EQUAL(AMACRO((0)(1)),Seq
));
44 BOOST_TEST(BOOST_VMD_EQUAL(AMACRO((0,1)),Tuple
));
45 BOOST_TEST(BOOST_VMD_EQUAL(AMACRO(24),Unknown
));
47 #define BOOST_VMD_REGISTER_NAME (NAME)
48 #define BOOST_VMD_REGISTER_ADDRESS (ADDRESS)
50 #define AMACRO1(param) \
53 BOOST_VMD_IS_IDENTIFIER(param), \
55 AMACRO1_NO_IDENTIFIER \
59 #define AMACRO1_IDENTIFIER(param) AMACRO1_ ## param
60 #define AMACRO1_NO_IDENTIFIER(param) Parameter is not an identifier
61 #define AMACRO1_NAME Identifier is a NAME
62 #define AMACRO1_ADDRESS Identifier is an ADDRESS
64 #define BOOST_VMD_REGISTER_Parameter (Parameter)
65 #define BOOST_VMD_REGISTER_is (is)
66 #define BOOST_VMD_REGISTER_not (not)
67 #define BOOST_VMD_REGISTER_an (an)
68 #define BOOST_VMD_REGISTER_identifier (identifier)
69 #define BOOST_VMD_REGISTER_Identifier (Identifier)
70 #define BOOST_VMD_REGISTER_a (a)
72 #define BOOST_VMD_DETECT_NAME_NAME
73 #define BOOST_VMD_DETECT_ADDRESS_ADDRESS
74 #define BOOST_VMD_DETECT_Parameter_Parameter
75 #define BOOST_VMD_DETECT_is_is
76 #define BOOST_VMD_DETECT_not_not
77 #define BOOST_VMD_DETECT_an_an
78 #define BOOST_VMD_DETECT_identifier_identifier
79 #define BOOST_VMD_DETECT_Identifier_Identifier
80 #define BOOST_VMD_DETECT_a_a
82 BOOST_TEST(BOOST_VMD_EQUAL(AMACRO1((44)),Parameter is
not an identifier
));
83 BOOST_TEST(BOOST_VMD_EQUAL(AMACRO1(NAME
),Identifier is a NAME
));
84 BOOST_TEST(BOOST_VMD_EQUAL(AMACRO1(ADDRESS
),Identifier is an ADDRESS
));
86 #define AMACRO2(param) \
89 BOOST_VMD_IS_IDENTIFIER(param,NAME), \
93 BOOST_VMD_IS_IDENTIFIER(param,ADDRESS), \
95 AMACRO2_NO_IDENTIFIER \
100 #define BOOST_VMD_REGISTER_or (or)
101 #define BOOST_VMD_DETECT_or_or
103 #define AMACRO2_NO_IDENTIFIER(param) Parameter is not a NAME or ADDRESS identifier
104 #define AMACRO2_NAME(param) Identifier is a NAME
105 #define AMACRO2_ADDRESS(param) Identifier is an ADDRESS
107 BOOST_TEST(BOOST_VMD_EQUAL(AMACRO2((44)),Parameter is
not a NAME
or ADDRESS identifier
));
108 BOOST_TEST(BOOST_VMD_EQUAL(AMACRO2(NAME
),Identifier is a NAME
));
109 BOOST_TEST(BOOST_VMD_EQUAL(AMACRO2(ADDRESS
),Identifier is an ADDRESS
));
111 #define ASEQUENCE (1,2) NAME 147 BOOST_VMD_TYPE_NUMBER (a)(b)
113 #define BOOST_VMD_REGISTER_b (b)
114 #define BOOST_VMD_DETECT_b_b
116 BOOST_TEST(BOOST_VMD_EQUAL(BOOST_VMD_TO_TUPLE(ASEQUENCE
),((1,2),NAME
,147,BOOST_VMD_TYPE_NUMBER
,(a
)(b
))));
117 BOOST_TEST(BOOST_VMD_EQUAL(BOOST_VMD_ELEM(2,ASEQUENCE
),147));
119 BOOST_TEST(BOOST_VMD_EQUAL(BOOST_VMD_GET_TYPE((1,2)),BOOST_VMD_TYPE_TUPLE
));
120 BOOST_TEST(BOOST_VMD_EQUAL(BOOST_VMD_GET_TYPE(235),BOOST_VMD_TYPE_NUMBER
));
124 BOOST_ERROR("No variadic macro support");
128 return boost::report_errors();