]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // Copyright Louis Dionne 2013-2016 |
2 | // Distributed under the Boost Software License, Version 1.0. | |
3 | // (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt) | |
4 | ||
5 | #include <boost/hana/assert.hpp> | |
6 | #include <boost/hana/detail/preprocessor.hpp> | |
7 | ||
8 | #include <string> | |
9 | #include <vector> | |
10 | ||
11 | ||
12 | ////////////////////////////////////////////////////////////////////////////// | |
13 | // BOOST_HANA_PP_CONCAT | |
14 | ////////////////////////////////////////////////////////////////////////////// | |
15 | static_assert(BOOST_HANA_PP_CONCAT(1, 2) == 12, ""); | |
16 | ||
17 | ||
18 | ////////////////////////////////////////////////////////////////////////////// | |
19 | // BOOST_HANA_PP_NARG | |
20 | ////////////////////////////////////////////////////////////////////////////// | |
21 | static_assert(BOOST_HANA_PP_NARG(x) == 1, ""); | |
22 | static_assert(BOOST_HANA_PP_NARG(x, x) == 2, ""); | |
23 | static_assert(BOOST_HANA_PP_NARG(x, x, x) == 3, ""); | |
24 | static_assert(BOOST_HANA_PP_NARG(x, x, x, x) == 4, ""); | |
25 | static_assert(BOOST_HANA_PP_NARG( | |
26 | x, x, x, x, x, x, x, x, x, x, | |
27 | x, x, x, x, x, x, x, x, x, x, | |
28 | x, x, x, x, x, x, x, x, x, x, | |
29 | x, x, x, x, x, x, x, x, x, x, | |
30 | x, x, x, x, x, x, x, x, x, x, | |
31 | x, x, x, x, x, x, x, x, x, x) == 60, ""); | |
32 | ||
33 | static_assert(BOOST_HANA_PP_NARG( | |
34 | x, x, x, x, x, x, x, x, x, x, | |
35 | x, x, x, x, x, x, x, x, x, x, | |
36 | x, x, x, x, x, x, x, x, x, x, | |
37 | x, x, x, x, x, x, x, x, x, x, | |
38 | x, x, x, x, x, x, x, x, x, x, | |
39 | x, x, x, x, x, x, x, x, x, x, | |
40 | x) == 61, ""); | |
41 | ||
42 | static_assert(BOOST_HANA_PP_NARG( | |
43 | x, x, x, x, x, x, x, x, x, x, | |
44 | x, x, x, x, x, x, x, x, x, x, | |
45 | x, x, x, x, x, x, x, x, x, x, | |
46 | x, x, x, x, x, x, x, x, x, x, | |
47 | x, x, x, x, x, x, x, x, x, x, | |
48 | x, x, x, x, x, x, x, x, x, x, | |
49 | x, x) == 62, ""); | |
50 | ||
51 | static_assert(BOOST_HANA_PP_NARG( | |
52 | x, x, x, x, x, x, x, x, x, x, | |
53 | x, x, x, x, x, x, x, x, x, x, | |
54 | x, x, x, x, x, x, x, x, x, x, | |
55 | x, x, x, x, x, x, x, x, x, x, | |
56 | x, x, x, x, x, x, x, x, x, x, | |
57 | x, x, x, x, x, x, x, x, x, x, | |
58 | x, x, x) == 63, ""); | |
59 | ||
60 | static_assert(BOOST_HANA_PP_NARG( | |
61 | x, x, x, x, x, x, x, x, x, x, | |
62 | x, x, x, x, x, x, x, x, x, x, | |
63 | x, x, x, x, x, x, x, x, x, x, | |
64 | x, x, x, x, x, x, x, x, x, x, | |
65 | x, x, x, x, x, x, x, x, x, x, | |
66 | x, x, x, x, x, x, x, x, x, x, | |
67 | x, x, x, x) == 64, ""); | |
68 | ||
69 | ||
70 | ////////////////////////////////////////////////////////////////////////////// | |
71 | // BOOST_HANA_PP_BACK | |
72 | ////////////////////////////////////////////////////////////////////////////// | |
73 | static_assert(BOOST_HANA_PP_BACK(0) == 0, ""); | |
74 | static_assert(BOOST_HANA_PP_BACK(0, 1) == 1, ""); | |
75 | static_assert(BOOST_HANA_PP_BACK(0, 1, 2) == 2, ""); | |
76 | static_assert(BOOST_HANA_PP_BACK(0, 1, 2, 3) == 3, ""); | |
77 | ||
78 | static_assert(BOOST_HANA_PP_BACK(0, 1, 2, 3, 4, 5, 6, 6, 8, 9, | |
79 | 10, 11, 12, 13, 14, 15, 16, 16, 18) == 18, ""); | |
80 | ||
81 | static_assert(BOOST_HANA_PP_BACK(0, 1, 2, 3, 4, 5, 6, 6, 8, 9, | |
82 | 10, 11, 12, 13, 14, 15, 16, 16, 18, 19) == 19, ""); | |
83 | ||
84 | ////////////////////////////////////////////////////////////////////////////// | |
85 | // BOOST_HANA_PP_FRONT | |
86 | ////////////////////////////////////////////////////////////////////////////// | |
87 | static_assert(BOOST_HANA_PP_FRONT(0) == 0, ""); | |
88 | static_assert(BOOST_HANA_PP_FRONT(0, 1) == 0, ""); | |
89 | static_assert(BOOST_HANA_PP_FRONT(0, 1, 2) == 0, ""); | |
90 | static_assert(BOOST_HANA_PP_FRONT(0, 1, 2, 3) == 0, ""); | |
91 | ||
92 | static_assert(BOOST_HANA_PP_FRONT(0, 1, 2, 3, 4, 5, 6, 6, 8, 9, | |
93 | 10, 11, 12, 13, 14, 15, 16, 16, 18) == 0, ""); | |
94 | ||
95 | static_assert(BOOST_HANA_PP_FRONT(0, 1, 2, 3, 4, 5, 6, 6, 8, 9, | |
96 | 10, 11, 12, 13, 14, 15, 16, 16, 18, 19) == 0, ""); | |
97 | ||
98 | ||
99 | int main() { | |
100 | using Vector = std::vector<int>; | |
101 | ||
102 | ////////////////////////////////////////////////////////////////////////// | |
103 | // BOOST_HANA_PP_STRINGIZE | |
104 | ////////////////////////////////////////////////////////////////////////// | |
105 | { | |
106 | constexpr char const* xyz = BOOST_HANA_PP_STRINGIZE(xyz); | |
107 | BOOST_HANA_RUNTIME_CHECK(std::string{xyz} == "xyz"); | |
108 | }{ | |
109 | constexpr char const* xyz = BOOST_HANA_PP_STRINGIZE(foo{bar, baz}); | |
110 | BOOST_HANA_RUNTIME_CHECK(std::string{xyz} == "foo{bar, baz}"); | |
111 | }{ | |
112 | constexpr char const* xyz = BOOST_HANA_PP_STRINGIZE(foo, bar, baz); | |
113 | BOOST_HANA_RUNTIME_CHECK(std::string{xyz} == "foo, bar, baz"); | |
114 | } | |
115 | ||
116 | ////////////////////////////////////////////////////////////////////////// | |
117 | // BOOST_HANA_PP_DROP_BACK | |
118 | ////////////////////////////////////////////////////////////////////////// | |
119 | { | |
120 | Vector args = {BOOST_HANA_PP_DROP_BACK(0)}; | |
121 | BOOST_HANA_RUNTIME_CHECK(args.empty()); | |
122 | }{ | |
123 | Vector args = {BOOST_HANA_PP_DROP_BACK(0, 1)}; | |
124 | BOOST_HANA_RUNTIME_CHECK(args == Vector{0}); | |
125 | }{ | |
126 | Vector args = {BOOST_HANA_PP_DROP_BACK(0, 1, 2)}; | |
127 | BOOST_HANA_RUNTIME_CHECK(args == Vector{0, 1}); | |
128 | }{ | |
129 | Vector args = {BOOST_HANA_PP_DROP_BACK(0, 1, 2, 3)}; | |
130 | BOOST_HANA_RUNTIME_CHECK(args == Vector{0, 1, 2}); | |
131 | }{ | |
132 | Vector args = {BOOST_HANA_PP_DROP_BACK(0, 1, 2, 3, 4)}; | |
133 | BOOST_HANA_RUNTIME_CHECK(args == Vector{0, 1, 2, 3}); | |
134 | }{ | |
135 | Vector args = {BOOST_HANA_PP_DROP_BACK( | |
136 | 0, 1, 2, 3, 4, 5, 6, 6, 8, 9, | |
137 | 10, 11, 12, 13, 14, 15, 16, 16, 18 | |
138 | )}; | |
139 | BOOST_HANA_RUNTIME_CHECK(args == Vector{ | |
140 | 0, 1, 2, 3, 4, 5, 6, 6, 8, 9, | |
141 | 10, 11, 12, 13, 14, 15, 16, 16}); | |
142 | }{ | |
143 | Vector args = {BOOST_HANA_PP_DROP_BACK( | |
144 | 0, 1, 2, 3, 4, 5, 6, 6, 8, 9, | |
145 | 10, 11, 12, 13, 14, 15, 16, 16, 18, 19 | |
146 | )}; | |
147 | BOOST_HANA_RUNTIME_CHECK(args == Vector{ | |
148 | 0, 1, 2, 3, 4, 5, 6, 6, 8, 9, | |
149 | 10, 11, 12, 13, 14, 15, 16, 16, 18}); | |
150 | } | |
151 | ||
152 | ////////////////////////////////////////////////////////////////////////// | |
153 | // BOOST_HANA_PP_DROP_FRONT | |
154 | ////////////////////////////////////////////////////////////////////////// | |
155 | { | |
156 | Vector args = {BOOST_HANA_PP_DROP_FRONT(0, 1)}; | |
157 | BOOST_HANA_RUNTIME_CHECK(args == Vector{1}); | |
158 | }{ | |
159 | Vector args = {BOOST_HANA_PP_DROP_FRONT(0, 1, 2)}; | |
160 | BOOST_HANA_RUNTIME_CHECK(args == Vector{1, 2}); | |
161 | }{ | |
162 | Vector args = {BOOST_HANA_PP_DROP_FRONT(0, 1, 2, 3)}; | |
163 | BOOST_HANA_RUNTIME_CHECK(args == Vector{1, 2, 3}); | |
164 | }{ | |
165 | Vector args = {BOOST_HANA_PP_DROP_FRONT(0, 1, 2, 3, 4)}; | |
166 | BOOST_HANA_RUNTIME_CHECK(args == Vector{1, 2, 3, 4}); | |
167 | } | |
168 | } |