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/is_identifier.hpp>
10 #include <boost/detail/lightweight_test.hpp>
15 #if BOOST_PP_VARIADICS
17 #define BOOST_VMD_REGISTER_yellow (yellow)
18 #define BOOST_VMD_REGISTER_green (green)
19 #define BOOST_VMD_REGISTER_blue (blue)
20 #define BOOST_VMD_REGISTER_red (red)
22 #define BOOST_VMD_DETECT_yellow_yellow
23 #define BOOST_VMD_DETECT_green_green
24 #define BOOST_VMD_DETECT_blue_blue
26 BOOST_TEST(BOOST_VMD_IS_IDENTIFIER(yellow
,yellow
));
27 BOOST_TEST(!BOOST_VMD_IS_IDENTIFIER(green
,yellow
));
28 BOOST_TEST(!BOOST_VMD_IS_IDENTIFIER(blue
,yellow
));
29 BOOST_TEST(!BOOST_VMD_IS_IDENTIFIER(red
,yellow
));
31 BOOST_TEST(BOOST_VMD_IS_IDENTIFIER(yellow
,yellow
,blue
));
32 BOOST_TEST(BOOST_VMD_IS_IDENTIFIER(blue
,yellow
,blue
));
33 BOOST_TEST(!BOOST_VMD_IS_IDENTIFIER(green
,yellow
,blue
));
34 BOOST_TEST(!BOOST_VMD_IS_IDENTIFIER(red
,yellow
,blue
));
36 BOOST_TEST(BOOST_VMD_IS_IDENTIFIER(yellow
,(yellow
,green
)));
37 BOOST_TEST(BOOST_VMD_IS_IDENTIFIER(green
,(yellow
,green
)));
38 BOOST_TEST(!BOOST_VMD_IS_IDENTIFIER(blue
,(yellow
,green
)));
39 BOOST_TEST(!BOOST_VMD_IS_IDENTIFIER(red
,(yellow
,green
)));
41 BOOST_TEST(!BOOST_VMD_IS_IDENTIFIER(red
,red
));
42 BOOST_TEST(BOOST_VMD_IS_IDENTIFIER(red
));
44 #define BOOST_VMD_REGISTER_ANAME (ANAME)
45 #define BOOST_VMD_REGISTER_APLACE (APLACE)
46 #define BOOST_VMD_REGISTER_ACOUNTRY (ACOUNTRY)
48 #define BOOST_VMD_DETECT_ANAME_ANAME
49 #define BOOST_VMD_DETECT_APLACE_APLACE
51 #define A_SEQUENCE (1,2,3) ANAME 46 BOOST_VMD_TYPE_SEQ ACOUNTRY
53 BOOST_TEST(BOOST_VMD_EQUAL(BOOST_VMD_ELEM(1,A_SEQUENCE
),ANAME
));
54 BOOST_TEST(BOOST_VMD_EQUAL(BOOST_VMD_ELEM(1,A_SEQUENCE
,BOOST_VMD_TYPE_IDENTIFIER
),ANAME
));
55 BOOST_TEST(BOOST_VMD_EQUAL(BOOST_VMD_ELEM(1,A_SEQUENCE
,BOOST_VMD_TYPE_IDENTIFIER
,APLACE
,ACOUNTRY
),));
56 BOOST_TEST(BOOST_VMD_EQUAL(BOOST_VMD_ELEM(1,A_SEQUENCE
,BOOST_VMD_TYPE_IDENTIFIER
,ANAME
,APLACE
,ACOUNTRY
),ANAME
));
57 BOOST_TEST(BOOST_VMD_EQUAL(BOOST_VMD_ELEM(1,A_SEQUENCE
,BOOST_VMD_TYPE_IDENTIFIER
,(APLACE
,ACOUNTRY
,ANAME
)),ANAME
));
59 BOOST_TEST(BOOST_VMD_IS_IDENTIFIER(BOOST_VMD_ELEM(4,A_SEQUENCE
)));
60 BOOST_TEST(BOOST_VMD_IS_IDENTIFIER(BOOST_VMD_ELEM(4,A_SEQUENCE
,BOOST_VMD_TYPE_IDENTIFIER
)));
61 BOOST_TEST(BOOST_VMD_EQUAL(BOOST_VMD_ELEM(4,A_SEQUENCE
,BOOST_VMD_TYPE_IDENTIFIER
,ACOUNTRY
,ANAME
),));
63 BOOST_TEST(BOOST_VMD_EQUAL(BOOST_VMD_ELEM(3,A_SEQUENCE
),BOOST_VMD_TYPE_SEQ
));
64 BOOST_TEST(BOOST_VMD_EQUAL(BOOST_VMD_ELEM(3,A_SEQUENCE
,BOOST_VMD_TYPE_IDENTIFIER
),BOOST_VMD_TYPE_SEQ
));
65 BOOST_TEST(BOOST_VMD_EQUAL(BOOST_VMD_ELEM(3,A_SEQUENCE
,BOOST_VMD_TYPE_IDENTIFIER
,BOOST_VMD_TYPE_SEQ
,BOOST_VMD_TYPE_TUPLE
),));
67 BOOST_TEST(BOOST_VMD_EQUAL(BOOST_VMD_ELEM(3,A_SEQUENCE
,BOOST_VMD_TYPE_IDENTIFIER
,(BOOST_VMD_TYPE_SEQ
,BOOST_VMD_TYPE_TUPLE
)),BOOST_VMD_TYPE_SEQ
));
71 BOOST_ERROR("No variadic macro support");
75 return boost::report_errors();