1# /* **************************************************************************
2# * *
3# * (C) Copyright Paul Mensonides 2002.
4# * Distributed under the Boost Software License, Version 1.0. (See
5# * accompanying file LICENSE_1_0.txt or copy at
6# * http://www.boost.org/LICENSE_1_0.txt)
7# * *
8# ************************************************************************** */
9#
10# /* See http://www.boost.org for most recent version. */
11#
12# include <boost/preprocessor/cat.hpp>
13# include <boost/preprocessor/facilities.hpp>
14# include <boost/preprocessor/arithmetic/add.hpp>
15# include <boost/preprocessor/arithmetic/mul.hpp>
16# include "test.h"
17
18BEGIN BOOST_PP_APPLY(BOOST_PP_NIL) 0 == 0 END
19BEGIN BOOST_PP_APPLY((0)) == 0 END
20
21BEGIN BOOST_PP_APPLY((BOOST_PP_EMPTY))() 0 == 0 END
22
23# define MACRO(x, y, z) 1
24# define ARGS (1, 2, 3)
25
26BEGIN BOOST_PP_EXPAND(MACRO ARGS) == 1 END
27
28BEGIN BOOST_PP_IDENTITY(1)() == 1 END
29BEGIN BOOST_PP_IDENTITY_N(36,10)(0,1,2,3,4,5,6,7,8,9) == 36 END
30
31BEGIN BOOST_PP_CAT(BOOST_PP_INTERCEPT, 2) 1 == 1 END
32
33#define OVMAC_1(x) BOOST_PP_ADD(x,5)
34#define OVMAC_2(x,y) BOOST_PP_ADD(x,y)
35#define OVMAC_3(x,y,z) BOOST_PP_ADD(BOOST_PP_MUL(x,y),z)
36#define OVMAC_4(x,y,z,a) BOOST_PP_ADD(BOOST_PP_MUL(x,y),BOOST_PP_MUL(a,z))
37
38#if BOOST_PP_VARIADICS_MSVC
39
40#define OVTEST(...) BOOST_PP_CAT(BOOST_PP_OVERLOAD(OVMAC_,__VA_ARGS__)(__VA_ARGS__),BOOST_PP_EMPTY())
41
42#else
43
44#define OVTEST(...) BOOST_PP_OVERLOAD(OVMAC_,__VA_ARGS__)(__VA_ARGS__)
45
46#endif
47
48BEGIN OVTEST(3,4,5) == 17 END
49BEGIN OVTEST(9,3,2,7) == 41 END
50BEGIN OVTEST(8) == 13 END
51BEGIN OVTEST(24,61) == 85 END
52

source code of boost/libs/preprocessor/test/facilities.cxx