]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/lambda/test/switch_construct.cpp
1 // switch_test.cpp -- The Boost Lambda Library --------------------------
3 // Copyright (C) 2000-2003 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
4 // Copyright (C) 2000-2003 Gary Powell (powellg@amazon.com)
6 // Distributed under the Boost Software License, Version 1.0. (See
7 // accompanying file LICENSE_1_0.txt or copy at
8 // http://www.boost.org/LICENSE_1_0.txt)
10 // For more information, see www.boost.org
12 // -----------------------------------------------------------------------
15 #include <boost/core/lightweight_test.hpp>
16 #define BOOST_CHECK BOOST_TEST
19 #include "boost/lambda/lambda.hpp"
20 #include "boost/lambda/if.hpp"
21 #include "boost/lambda/switch.hpp"
30 // Check that elements 0 -- index are 1, and the rest are 0
31 bool check(const std::vector
<int>& v
, int index
) {
32 using namespace boost::lambda
;
34 std::vector
<int>::const_iterator
35 result
= std::find_if(v
.begin(), v
.end(),
36 ! if_then_else_return(
37 var(counter
)++ <= index
,
41 return result
== v
.end();
46 void do_switch_no_defaults_tests() {
48 using namespace boost::lambda
;
53 // elements from 0 to 9
54 std::generate_n(std::back_inserter(v
),
57 std::fill_n(std::back_inserter(w
), 10, 0);
60 std::for_each(v
.begin(), v
.end(),
63 case_statement
<0>(++var(w
[0]))
67 BOOST_CHECK(check(w
, 0));
68 std::fill_n(w
.begin(), 10, 0);
71 std::for_each(v
.begin(), v
.end(),
74 case_statement
<0>(++var(w
[0])),
75 case_statement
<1>(++var(w
[1]))
79 BOOST_CHECK(check(w
, 1));
80 std::fill_n(w
.begin(), 10, 0);
83 std::for_each(v
.begin(), v
.end(),
86 case_statement
<0>(++var(w
[0])),
87 case_statement
<1>(++var(w
[1])),
88 case_statement
<2>(++var(w
[2]))
92 BOOST_CHECK(check(w
, 2));
93 std::fill_n(w
.begin(), 10, 0);
96 std::for_each(v
.begin(), v
.end(),
99 case_statement
<0>(++var(w
[0])),
100 case_statement
<1>(++var(w
[1])),
101 case_statement
<2>(++var(w
[2])),
102 case_statement
<3>(++var(w
[3]))
106 BOOST_CHECK(check(w
, 3));
107 std::fill_n(w
.begin(), 10, 0);
110 std::for_each(v
.begin(), v
.end(),
113 case_statement
<0>(++var(w
[0])),
114 case_statement
<1>(++var(w
[1])),
115 case_statement
<2>(++var(w
[2])),
116 case_statement
<3>(++var(w
[3])),
117 case_statement
<4>(++var(w
[4]))
121 BOOST_CHECK(check(w
, 4));
122 std::fill_n(w
.begin(), 10, 0);
125 std::for_each(v
.begin(), v
.end(),
128 case_statement
<0>(++var(w
[0])),
129 case_statement
<1>(++var(w
[1])),
130 case_statement
<2>(++var(w
[2])),
131 case_statement
<3>(++var(w
[3])),
132 case_statement
<4>(++var(w
[4])),
133 case_statement
<5>(++var(w
[5]))
137 BOOST_CHECK(check(w
, 5));
138 std::fill_n(w
.begin(), 10, 0);
141 std::for_each(v
.begin(), v
.end(),
144 case_statement
<0>(++var(w
[0])),
145 case_statement
<1>(++var(w
[1])),
146 case_statement
<2>(++var(w
[2])),
147 case_statement
<3>(++var(w
[3])),
148 case_statement
<4>(++var(w
[4])),
149 case_statement
<5>(++var(w
[5])),
150 case_statement
<6>(++var(w
[6]))
154 BOOST_CHECK(check(w
, 6));
155 std::fill_n(w
.begin(), 10, 0);
158 std::for_each(v
.begin(), v
.end(),
161 case_statement
<0>(++var(w
[0])),
162 case_statement
<1>(++var(w
[1])),
163 case_statement
<2>(++var(w
[2])),
164 case_statement
<3>(++var(w
[3])),
165 case_statement
<4>(++var(w
[4])),
166 case_statement
<5>(++var(w
[5])),
167 case_statement
<6>(++var(w
[6])),
168 case_statement
<7>(++var(w
[7]))
172 BOOST_CHECK(check(w
, 7));
173 std::fill_n(w
.begin(), 10, 0);
176 std::for_each(v
.begin(), v
.end(),
179 case_statement
<0>(++var(w
[0])),
180 case_statement
<1>(++var(w
[1])),
181 case_statement
<2>(++var(w
[2])),
182 case_statement
<3>(++var(w
[3])),
183 case_statement
<4>(++var(w
[4])),
184 case_statement
<5>(++var(w
[5])),
185 case_statement
<6>(++var(w
[6])),
186 case_statement
<7>(++var(w
[7])),
187 case_statement
<8>(++var(w
[8]))
191 BOOST_CHECK(check(w
, 8));
192 std::fill_n(w
.begin(), 10, 0);
197 void do_switch_yes_defaults_tests() {
199 using namespace boost::lambda
;
202 std::vector
<int> v
,w
;
204 // elements from 0 to 9
205 std::generate_n(std::back_inserter(v
),
208 std::fill_n(std::back_inserter(w
), 10, 0);
213 std::for_each(v
.begin(), v
.end(),
216 default_statement(++var(default_count
))
220 BOOST_CHECK(check(w
, -1));
221 BOOST_CHECK(default_count
== 10);
222 std::fill_n(w
.begin(), 10, 0);
226 std::for_each(v
.begin(), v
.end(),
229 case_statement
<0>(++var(w
[0])),
230 default_statement(++var(default_count
))
234 BOOST_CHECK(check(w
, 0));
235 BOOST_CHECK(default_count
== 9);
236 std::fill_n(w
.begin(), 10, 0);
240 std::for_each(v
.begin(), v
.end(),
243 case_statement
<0>(++var(w
[0])),
244 case_statement
<1>(++var(w
[1])),
245 default_statement(++var(default_count
))
249 BOOST_CHECK(check(w
, 1));
250 BOOST_CHECK(default_count
== 8);
251 std::fill_n(w
.begin(), 10, 0);
255 std::for_each(v
.begin(), v
.end(),
258 case_statement
<0>(++var(w
[0])),
259 case_statement
<1>(++var(w
[1])),
260 case_statement
<2>(++var(w
[2])),
261 default_statement(++var(default_count
))
265 BOOST_CHECK(check(w
, 2));
266 BOOST_CHECK(default_count
== 7);
267 std::fill_n(w
.begin(), 10, 0);
271 std::for_each(v
.begin(), v
.end(),
274 case_statement
<0>(++var(w
[0])),
275 case_statement
<1>(++var(w
[1])),
276 case_statement
<2>(++var(w
[2])),
277 case_statement
<3>(++var(w
[3])),
278 default_statement(++var(default_count
))
282 BOOST_CHECK(check(w
, 3));
283 BOOST_CHECK(default_count
== 6);
284 std::fill_n(w
.begin(), 10, 0);
288 std::for_each(v
.begin(), v
.end(),
291 case_statement
<0>(++var(w
[0])),
292 case_statement
<1>(++var(w
[1])),
293 case_statement
<2>(++var(w
[2])),
294 case_statement
<3>(++var(w
[3])),
295 case_statement
<4>(++var(w
[4])),
296 default_statement(++var(default_count
))
300 BOOST_CHECK(check(w
, 4));
301 BOOST_CHECK(default_count
== 5);
302 std::fill_n(w
.begin(), 10, 0);
306 std::for_each(v
.begin(), v
.end(),
309 case_statement
<0>(++var(w
[0])),
310 case_statement
<1>(++var(w
[1])),
311 case_statement
<2>(++var(w
[2])),
312 case_statement
<3>(++var(w
[3])),
313 case_statement
<4>(++var(w
[4])),
314 case_statement
<5>(++var(w
[5])),
315 default_statement(++var(default_count
))
319 BOOST_CHECK(check(w
, 5));
320 BOOST_CHECK(default_count
== 4);
321 std::fill_n(w
.begin(), 10, 0);
325 std::for_each(v
.begin(), v
.end(),
328 case_statement
<0>(++var(w
[0])),
329 case_statement
<1>(++var(w
[1])),
330 case_statement
<2>(++var(w
[2])),
331 case_statement
<3>(++var(w
[3])),
332 case_statement
<4>(++var(w
[4])),
333 case_statement
<5>(++var(w
[5])),
334 case_statement
<6>(++var(w
[6])),
335 default_statement(++var(default_count
))
339 BOOST_CHECK(check(w
, 6));
340 BOOST_CHECK(default_count
== 3);
341 std::fill_n(w
.begin(), 10, 0);
345 std::for_each(v
.begin(), v
.end(),
348 case_statement
<0>(++var(w
[0])),
349 case_statement
<1>(++var(w
[1])),
350 case_statement
<2>(++var(w
[2])),
351 case_statement
<3>(++var(w
[3])),
352 case_statement
<4>(++var(w
[4])),
353 case_statement
<5>(++var(w
[5])),
354 case_statement
<6>(++var(w
[6])),
355 case_statement
<7>(++var(w
[7])),
356 default_statement(++var(default_count
))
360 BOOST_CHECK(check(w
, 7));
361 BOOST_CHECK(default_count
== 2);
362 std::fill_n(w
.begin(), 10, 0);
366 void test_empty_cases() {
368 using namespace boost::lambda
;
385 do_switch_no_defaults_tests();
386 do_switch_yes_defaults_tests();
390 return boost::report_errors();