File: test_doc_whyhow.cxx

package info (click to toggle)
boost1.88 1.88.0-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 576,932 kB
  • sloc: cpp: 4,149,234; xml: 136,789; ansic: 35,092; python: 33,910; asm: 5,698; sh: 4,604; ada: 1,681; makefile: 1,633; pascal: 1,139; perl: 1,124; sql: 640; yacc: 478; ruby: 271; java: 77; lisp: 24; csh: 6
file content (130 lines) | stat: -rw-r--r-- 4,585 bytes parent folder | download | duplicates (14)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130

//  (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/elem.hpp>
#include <boost/vmd/equal.hpp>
#include <boost/vmd/get_type.hpp>
#include <boost/vmd/is_identifier.hpp>
#include <boost/vmd/is_seq.hpp>
#include <boost/vmd/is_tuple.hpp>
#include <boost/vmd/to_tuple.hpp>
#include <boost/preprocessor/control/iif.hpp>
#include <boost/detail/lightweight_test.hpp>

int main()
  {
  
#if BOOST_PP_VARIADICS

 #define BOOST_VMD_REGISTER_Seq (Seq)
 #define BOOST_VMD_REGISTER_Tuple (Tuple)
 #define BOOST_VMD_REGISTER_Unknown (Unknown)

 #define BOOST_VMD_DETECT_Seq_Seq
 #define BOOST_VMD_DETECT_Tuple_Tuple
 #define BOOST_VMD_DETECT_Unknown_Unknown

 #define AMACRO(param)                 \
   BOOST_PP_IIF                        \
     (                                 \
     BOOST_VMD_IS_SEQ(param),          \
     Seq,                              \
     BOOST_PP_IIF                      \
       (                               \
       BOOST_VMD_IS_TUPLE(param),      \
       Tuple,                          \
       Unknown                         \
       )                               \
     )
     
 BOOST_TEST(BOOST_VMD_EQUAL(AMACRO((0)(1)),Seq));
 BOOST_TEST(BOOST_VMD_EQUAL(AMACRO((0,1)),Tuple));
 BOOST_TEST(BOOST_VMD_EQUAL(AMACRO(24),Unknown));
     
 #define BOOST_VMD_REGISTER_NAME (NAME)
 #define BOOST_VMD_REGISTER_ADDRESS (ADDRESS)
 
 #define AMACRO1(param)              \
   BOOST_PP_IIF                      \
     (                               \
     BOOST_VMD_IS_IDENTIFIER(param), \
     AMACRO1_IDENTIFIER,             \
     AMACRO1_NO_IDENTIFIER           \
     )                               \
   (param)
   
 #define AMACRO1_IDENTIFIER(param) AMACRO1_ ## param
 #define AMACRO1_NO_IDENTIFIER(param) Parameter is not an identifier
 #define AMACRO1_NAME Identifier is a NAME
 #define AMACRO1_ADDRESS Identifier is an ADDRESS
 
 #define BOOST_VMD_REGISTER_Parameter (Parameter)
 #define BOOST_VMD_REGISTER_is (is)
 #define BOOST_VMD_REGISTER_not (not)
 #define BOOST_VMD_REGISTER_an (an)
 #define BOOST_VMD_REGISTER_identifier (identifier)
 #define BOOST_VMD_REGISTER_Identifier (Identifier)
 #define BOOST_VMD_REGISTER_a (a)
 
 #define BOOST_VMD_DETECT_NAME_NAME
 #define BOOST_VMD_DETECT_ADDRESS_ADDRESS
 #define BOOST_VMD_DETECT_Parameter_Parameter
 #define BOOST_VMD_DETECT_is_is
 #define BOOST_VMD_DETECT_not_not
 #define BOOST_VMD_DETECT_an_an
 #define BOOST_VMD_DETECT_identifier_identifier
 #define BOOST_VMD_DETECT_Identifier_Identifier
 #define BOOST_VMD_DETECT_a_a
 
 BOOST_TEST(BOOST_VMD_EQUAL(AMACRO1((44)),Parameter is not an identifier));
 BOOST_TEST(BOOST_VMD_EQUAL(AMACRO1(NAME),Identifier is a NAME));
 BOOST_TEST(BOOST_VMD_EQUAL(AMACRO1(ADDRESS),Identifier is an ADDRESS));
 
 #define AMACRO2(param)                        \
   BOOST_PP_IIF                                \
     (                                         \
     BOOST_VMD_IS_IDENTIFIER(param,NAME),      \
     AMACRO2_NAME,                             \
     BOOST_PP_IIF                              \
       (                                       \
       BOOST_VMD_IS_IDENTIFIER(param,ADDRESS), \
       AMACRO2_ADDRESS,                        \
       AMACRO2_NO_IDENTIFIER                   \
       )                                       \
     )                                         \
   (param)
   
 #define BOOST_VMD_REGISTER_or (or)
 #define BOOST_VMD_DETECT_or_or
 
 #define AMACRO2_NO_IDENTIFIER(param) Parameter is not a NAME or ADDRESS identifier
 #define AMACRO2_NAME(param) Identifier is a NAME
 #define AMACRO2_ADDRESS(param) Identifier is an ADDRESS
 
 BOOST_TEST(BOOST_VMD_EQUAL(AMACRO2((44)),Parameter is not a NAME or ADDRESS identifier));
 BOOST_TEST(BOOST_VMD_EQUAL(AMACRO2(NAME),Identifier is a NAME));
 BOOST_TEST(BOOST_VMD_EQUAL(AMACRO2(ADDRESS),Identifier is an ADDRESS));
 
 #define ASEQUENCE (1,2) NAME 147 BOOST_VMD_TYPE_NUMBER (a)(b)
 
 #define BOOST_VMD_REGISTER_b (b)
 #define BOOST_VMD_DETECT_b_b
 
 BOOST_TEST(BOOST_VMD_EQUAL(BOOST_VMD_TO_TUPLE(ASEQUENCE),((1,2),NAME,147,BOOST_VMD_TYPE_NUMBER,(a)(b))));
 BOOST_TEST(BOOST_VMD_EQUAL(BOOST_VMD_ELEM(2,ASEQUENCE),147));
 
 BOOST_TEST(BOOST_VMD_EQUAL(BOOST_VMD_GET_TYPE((1,2)),BOOST_VMD_TYPE_TUPLE));
 BOOST_TEST(BOOST_VMD_EQUAL(BOOST_VMD_GET_TYPE(235),BOOST_VMD_TYPE_NUMBER));
 
#else

BOOST_ERROR("No variadic macro support");
  
#endif

  return boost::report_errors();
  
  }