21 #define BOOST_TEST_MODULE libjmmcg_tests
22 #include <boost/test/included/unit_test.hpp>
24 #include <boost/mpl/list.hpp>
26 #include "core/thread_pool_sequential.hpp"
27 #include "core/thread_pool_master.hpp"
28 #include "core/thread_pool_workers.hpp"
30 using namespace libjmmcg;
56 const typename erew_normal_fifo_t<Db, Sz, Jn, Mdl, PoolSize, GSSk>::
pool_type::
pool_type::
size_type erew_normal_fifo_t<Db, Sz, Jn, Mdl, PoolSize, GSSk>::
pool_size;
81 const typename erew_normal_lifo_t<Db, Sz, Jn, Mdl, PoolSize, GSSk>::
pool_type::
pool_type::
size_type erew_normal_lifo_t<Db, Sz, Jn, Mdl, PoolSize, GSSk>::
pool_size;
106 const typename erew_priority_queue_t<Db, Sz, Jn, Mdl, PoolSize, GSSk>::
pool_type::
pool_type::
size_type erew_priority_queue_t<Db, Sz, Jn, Mdl, PoolSize, GSSk>::
pool_size;
132 const typename crew_normal_fifo_t<Db, Sz, Jn, Mdl, PoolSize, GSSk>::
pool_type::
pool_type::
size_type crew_normal_fifo_t<Db, Sz, Jn, Mdl, PoolSize, GSSk>::
pool_size;
158 const typename crew_normal_lifo_t<Db, Sz, Jn, Mdl, PoolSize, GSSk>::
pool_type::
pool_type::
size_type crew_normal_lifo_t<Db, Sz, Jn, Mdl, PoolSize, GSSk>::
pool_size;
184 const typename crew_priority_queue_t<Db, Sz, Jn, Mdl, PoolSize, GSSk>::
pool_type::
pool_type::
size_type crew_priority_queue_t<Db, Sz, Jn, Mdl, PoolSize, GSSk>::
pool_size;
186 typedef boost::mpl::list<
187 erew_normal_fifo_t<pool_traits::work_distribution_mode_t::worker_threads_get_work<pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue>, pool_traits::size_mode_t::sequential, generic_traits::return_data::joinable, sequential_mode>,
188 crew_normal_fifo_t<pool_traits::work_distribution_mode_t::worker_threads_get_work<pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue>, pool_traits::size_mode_t::sequential, generic_traits::return_data::joinable, sequential_mode>,
189 erew_normal_lifo_t<pool_traits::work_distribution_mode_t::worker_threads_get_work<pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue>, pool_traits::size_mode_t::sequential, generic_traits::return_data::joinable, sequential_mode>,
190 crew_normal_lifo_t<pool_traits::work_distribution_mode_t::worker_threads_get_work<pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue>, pool_traits::size_mode_t::sequential, generic_traits::return_data::joinable, sequential_mode>,
191 erew_priority_queue_t<pool_traits::work_distribution_mode_t::worker_threads_get_work<pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue>, pool_traits::size_mode_t::sequential, generic_traits::return_data::joinable, sequential_mode>,
192 crew_priority_queue_t<pool_traits::work_distribution_mode_t::worker_threads_get_work<pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue>, pool_traits::size_mode_t::sequential, generic_traits::return_data::joinable, sequential_mode>,
194 erew_normal_fifo_t<pool_traits::work_distribution_mode_t::worker_threads_get_work<pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue>, pool_traits::size_mode_t::fixed_size, generic_traits::return_data::joinable, heavyweight_threading, 1>,
196 crew_normal_fifo_t<pool_traits::work_distribution_mode_t::worker_threads_get_work<pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue>, pool_traits::size_mode_t::fixed_size, generic_traits::return_data::joinable, heavyweight_threading, 1>,
198 erew_normal_lifo_t<pool_traits::work_distribution_mode_t::worker_threads_get_work<pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue>, pool_traits::size_mode_t::fixed_size, generic_traits::return_data::joinable, heavyweight_threading, 1>,
200 crew_normal_lifo_t<pool_traits::work_distribution_mode_t::worker_threads_get_work<pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue>, pool_traits::size_mode_t::fixed_size, generic_traits::return_data::joinable, heavyweight_threading, 1>,
202 erew_priority_queue_t<pool_traits::work_distribution_mode_t::worker_threads_get_work<pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue>, pool_traits::size_mode_t::fixed_size, generic_traits::return_data::joinable, heavyweight_threading, 1>,
204 crew_priority_queue_t<pool_traits::work_distribution_mode_t::worker_threads_get_work<pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue>, pool_traits::size_mode_t::fixed_size, generic_traits::return_data::joinable, heavyweight_threading, 1>,
207 erew_normal_fifo_t<pool_traits::work_distribution_mode_t::worker_threads_get_work<pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue>, pool_traits::size_mode_t::fixed_size, generic_traits::return_data::joinable, heavyweight_threading, 2>,
208 crew_normal_fifo_t<pool_traits::work_distribution_mode_t::worker_threads_get_work<pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue>, pool_traits::size_mode_t::fixed_size, generic_traits::return_data::joinable, heavyweight_threading, 2>,
209 erew_normal_lifo_t<pool_traits::work_distribution_mode_t::worker_threads_get_work<pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue>, pool_traits::size_mode_t::fixed_size, generic_traits::return_data::joinable, heavyweight_threading, 2>,
210 crew_normal_lifo_t<pool_traits::work_distribution_mode_t::worker_threads_get_work<pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue>, pool_traits::size_mode_t::fixed_size, generic_traits::return_data::joinable, heavyweight_threading, 2>,
211 erew_priority_queue_t<pool_traits::work_distribution_mode_t::worker_threads_get_work<pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue>, pool_traits::size_mode_t::fixed_size, generic_traits::return_data::joinable, heavyweight_threading, 2>,
212 crew_priority_queue_t<pool_traits::work_distribution_mode_t::worker_threads_get_work<pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue>, pool_traits::size_mode_t::fixed_size, generic_traits::return_data::joinable, heavyweight_threading, 2>
215 typedef boost::mpl::list<
216 erew_normal_fifo_t<pool_traits::work_distribution_mode_t::worker_threads_get_work<pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue>, pool_traits::size_mode_t::sequential, generic_traits::return_data::joinable, sequential_mode>,
217 crew_normal_fifo_t<pool_traits::work_distribution_mode_t::worker_threads_get_work<pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue>, pool_traits::size_mode_t::sequential, generic_traits::return_data::joinable, sequential_mode>,
218 erew_normal_lifo_t<pool_traits::work_distribution_mode_t::worker_threads_get_work<pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue>, pool_traits::size_mode_t::sequential, generic_traits::return_data::joinable, sequential_mode>,
219 crew_normal_lifo_t<pool_traits::work_distribution_mode_t::worker_threads_get_work<pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue>, pool_traits::size_mode_t::sequential, generic_traits::return_data::joinable, sequential_mode>,
220 erew_priority_queue_t<pool_traits::work_distribution_mode_t::worker_threads_get_work<pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue>, pool_traits::size_mode_t::sequential, generic_traits::return_data::joinable, sequential_mode>,
221 crew_priority_queue_t<pool_traits::work_distribution_mode_t::worker_threads_get_work<pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue>, pool_traits::size_mode_t::sequential, generic_traits::return_data::joinable, sequential_mode>,
222 erew_normal_fifo_t<pool_traits::work_distribution_mode_t::one_thread_distributes<>, pool_traits::size_mode_t::sequential, generic_traits::return_data::joinable, sequential_mode>,
223 crew_normal_fifo_t<pool_traits::work_distribution_mode_t::one_thread_distributes<>, pool_traits::size_mode_t::sequential, generic_traits::return_data::joinable, sequential_mode>,
224 erew_normal_lifo_t<pool_traits::work_distribution_mode_t::one_thread_distributes<>, pool_traits::size_mode_t::sequential, generic_traits::return_data::joinable, sequential_mode>,
225 crew_normal_lifo_t<pool_traits::work_distribution_mode_t::one_thread_distributes<>, pool_traits::size_mode_t::sequential, generic_traits::return_data::joinable, sequential_mode>,
226 erew_priority_queue_t<pool_traits::work_distribution_mode_t::one_thread_distributes<>, pool_traits::size_mode_t::sequential, generic_traits::return_data::joinable, sequential_mode>,
227 crew_priority_queue_t<pool_traits::work_distribution_mode_t::one_thread_distributes<>, pool_traits::size_mode_t::sequential, generic_traits::return_data::joinable, sequential_mode>,
235 erew_normal_fifo_t<pool_traits::work_distribution_mode_t::one_thread_distributes<>, pool_traits::size_mode_t::infinite, generic_traits::return_data::joinable, heavyweight_threading>,
236 erew_normal_fifo_t<pool_traits::work_distribution_mode_t::one_thread_distributes<>, pool_traits::size_mode_t::infinite, generic_traits::return_data::joinable, heavyweight_threading, 0, 2>,
237 crew_normal_fifo_t<pool_traits::work_distribution_mode_t::one_thread_distributes<>, pool_traits::size_mode_t::infinite, generic_traits::return_data::joinable, heavyweight_threading>,
238 crew_normal_fifo_t<pool_traits::work_distribution_mode_t::one_thread_distributes<>, pool_traits::size_mode_t::infinite, generic_traits::return_data::joinable, heavyweight_threading, 0, 2>,
239 erew_normal_lifo_t<pool_traits::work_distribution_mode_t::one_thread_distributes<>, pool_traits::size_mode_t::infinite, generic_traits::return_data::joinable, heavyweight_threading>,
240 erew_normal_lifo_t<pool_traits::work_distribution_mode_t::one_thread_distributes<>, pool_traits::size_mode_t::infinite, generic_traits::return_data::joinable, heavyweight_threading, 0, 2>,
241 crew_normal_lifo_t<pool_traits::work_distribution_mode_t::one_thread_distributes<>, pool_traits::size_mode_t::infinite, generic_traits::return_data::joinable, heavyweight_threading>,
242 crew_normal_lifo_t<pool_traits::work_distribution_mode_t::one_thread_distributes<>, pool_traits::size_mode_t::infinite, generic_traits::return_data::joinable, heavyweight_threading, 0, 2>,
243 erew_priority_queue_t<pool_traits::work_distribution_mode_t::one_thread_distributes<>, pool_traits::size_mode_t::infinite, generic_traits::return_data::joinable, heavyweight_threading>,
244 erew_priority_queue_t<pool_traits::work_distribution_mode_t::one_thread_distributes<>, pool_traits::size_mode_t::infinite, generic_traits::return_data::joinable, heavyweight_threading, 0, 2>,
245 crew_priority_queue_t<pool_traits::work_distribution_mode_t::one_thread_distributes<>, pool_traits::size_mode_t::infinite, generic_traits::return_data::joinable, heavyweight_threading>,
246 crew_priority_queue_t<pool_traits::work_distribution_mode_t::one_thread_distributes<>, pool_traits::size_mode_t::infinite, generic_traits::return_data::joinable, heavyweight_threading, 0, 2>
247 > infinite_test_types;
252 struct square :
std::unary_function<T,
void> {
268 BOOST_AUTO_TEST_SUITE(thread_pool_tests)
270 BOOST_AUTO_TEST_SUITE(joinable_dataflow)
272 BOOST_AUTO_TEST_SUITE(finite)
274 BOOST_AUTO_TEST_SUITE(empty_colln)
276 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate, T, finite_test_types) {
277 typedef typename T::vtr_colln_t vtr_colln_t;
278 typedef typename T::pool_type pool_type;
279 typedef typename pool_type::joinable joinable;
281 pool_type pool(T::pool_size);
283 auto const &context=pool<<joinable()<<pool.accumulate(v,
typename vtr_colln_t::value_type());
284 BOOST_CHECK_EQUAL(*context, 0);
285 BOOST_CHECK_EQUAL(v.empty(),
true);
286 BOOST_CHECK_EQUAL(pool.min_time(context), 0U);
287 BOOST_CHECK_EQUAL(pool.min_processors(context), 0U);
290 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate_op, T, finite_test_types) {
291 typedef typename T::vtr_colln_t vtr_colln_t;
292 typedef typename T::pool_type pool_type;
293 typedef typename pool_type::joinable joinable;
295 pool_type pool(T::pool_size);
297 auto const &context=pool<<joinable()<<pool.accumulate(v, 1,
std::multiplies<
typename vtr_colln_t::value_type>());
298 pool.min_time(vtr_colln_t::memory_access_mode);
299 pool.min_processors(vtr_colln_t::memory_access_mode);
300 BOOST_CHECK_EQUAL(*context, 1);
301 BOOST_CHECK_EQUAL(v.empty(),
true);
302 BOOST_CHECK_EQUAL(pool.min_time(context), 0U);
303 BOOST_CHECK_EQUAL(pool.min_processors(context), 0U);
306 BOOST_AUTO_TEST_SUITE_END()
308 BOOST_AUTO_TEST_SUITE(nonempty_colln)
310 BOOST_AUTO_TEST_SUITE(one_element)
312 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate, T, finite_test_types) {
313 typedef typename T::vtr_colln_t vtr_colln_t;
314 typedef typename T::pool_type pool_type;
315 typedef typename pool_type::joinable joinable;
317 pool_type pool(T::pool_size);
320 auto const &context=pool<<joinable()<<pool.accumulate(v,
typename vtr_colln_t::value_type());
321 pool.min_time(vtr_colln_t::memory_access_mode);
322 pool.min_processors(vtr_colln_t::memory_access_mode);
323 BOOST_CHECK_EQUAL(*context, 1);
324 BOOST_CHECK_EQUAL(v.size(), 1U);
327 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate_op, T, finite_test_types) {
328 typedef typename T::vtr_colln_t vtr_colln_t;
329 typedef typename T::pool_type pool_type;
330 typedef typename pool_type::joinable joinable;
332 pool_type pool(T::pool_size);
335 auto const &context=pool<<joinable()<<pool.accumulate(v, 1,
std::multiplies<
typename vtr_colln_t::value_type>());
336 pool.min_time(vtr_colln_t::memory_access_mode);
337 pool.min_processors(vtr_colln_t::memory_access_mode);
338 BOOST_CHECK_EQUAL(*context, 1);
339 BOOST_CHECK_EQUAL(v.size(), 1U);
342 BOOST_AUTO_TEST_SUITE_END()
344 BOOST_AUTO_TEST_SUITE(two_elements)
346 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate, T, finite_test_types) {
347 typedef typename T::vtr_colln_t vtr_colln_t;
348 typedef typename T::pool_type pool_type;
349 typedef typename pool_type::joinable joinable;
351 pool_type pool(T::pool_size);
355 auto const &context=pool<<joinable()<<pool.accumulate(v,
typename vtr_colln_t::value_type());
356 pool.min_time(vtr_colln_t::memory_access_mode);
357 pool.min_processors(vtr_colln_t::memory_access_mode);
358 BOOST_CHECK_EQUAL(*context, 3);
359 BOOST_CHECK_EQUAL(v.size(), 2U);
362 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate_op, T, finite_test_types) {
363 typedef typename T::vtr_colln_t vtr_colln_t;
364 typedef typename T::pool_type pool_type;
365 typedef typename pool_type::joinable joinable;
367 pool_type pool(T::pool_size);
371 auto const &context=pool<<joinable()<<pool.accumulate(v, 1,
std::multiplies<
typename vtr_colln_t::value_type>());
372 pool.min_time(vtr_colln_t::memory_access_mode);
373 pool.min_processors(vtr_colln_t::memory_access_mode);
374 BOOST_CHECK_EQUAL(*context, 2);
375 BOOST_CHECK_EQUAL(v.size(), 2U);
378 BOOST_AUTO_TEST_SUITE_END()
380 BOOST_AUTO_TEST_SUITE(n_elements)
382 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate, T, finite_test_types) {
383 typedef typename T::vtr_colln_t vtr_colln_t;
384 typedef typename T::pool_type pool_type;
385 typedef typename pool_type::joinable joinable;
387 pool_type pool(T::pool_size);
397 auto const &context=pool<<joinable()<<pool.accumulate(v,
typename vtr_colln_t::value_type());
398 pool.min_time(vtr_colln_t::memory_access_mode);
399 pool.min_processors(vtr_colln_t::memory_access_mode);
400 BOOST_CHECK_EQUAL(*context, 36);
401 BOOST_CHECK_EQUAL(v.size(), 8U);
404 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate_op, T, finite_test_types) {
405 typedef typename T::vtr_colln_t vtr_colln_t;
406 typedef typename T::pool_type pool_type;
407 typedef typename pool_type::joinable joinable;
409 pool_type pool(T::pool_size);
419 auto const &context=pool<<joinable()<<pool.accumulate(v, 1,
std::multiplies<
typename vtr_colln_t::value_type>());
420 pool.min_time(vtr_colln_t::memory_access_mode);
421 pool.min_processors(vtr_colln_t::memory_access_mode);
422 BOOST_CHECK_EQUAL(*context, 40320);
423 BOOST_CHECK_EQUAL(v.size(), 8U);
426 BOOST_AUTO_TEST_SUITE_END()
428 BOOST_AUTO_TEST_SUITE_END()
430 BOOST_AUTO_TEST_SUITE_END()
432 BOOST_AUTO_TEST_SUITE(infinite)
434 BOOST_AUTO_TEST_SUITE(empty_colln)
436 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate, T, infinite_test_types) {
437 typedef typename T::vtr_colln_t vtr_colln_t;
438 typedef typename T::pool_type pool_type;
439 typedef typename pool_type::joinable joinable;
443 auto const &context=pool<<joinable()<<pool.accumulate(v,
typename vtr_colln_t::value_type());
444 pool.min_time(vtr_colln_t::memory_access_mode);
445 pool.min_processors(vtr_colln_t::memory_access_mode);
446 BOOST_CHECK_EQUAL(*context, 0);
447 BOOST_CHECK_EQUAL(v.empty(),
true);
448 BOOST_CHECK_EQUAL(pool.min_time(context), 0U);
449 BOOST_CHECK_EQUAL(pool.min_processors(context), 0U);
452 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate_op, T, infinite_test_types) {
453 typedef typename T::vtr_colln_t vtr_colln_t;
454 typedef typename T::pool_type pool_type;
455 typedef typename pool_type::joinable joinable;
459 auto const &context=pool<<joinable()<<pool.accumulate(v, 1,
std::multiplies<
typename vtr_colln_t::value_type>());
460 pool.min_time(vtr_colln_t::memory_access_mode);
461 pool.min_processors(vtr_colln_t::memory_access_mode);
462 BOOST_CHECK_EQUAL(*context, 1);
463 BOOST_CHECK_EQUAL(v.empty(),
true);
464 BOOST_CHECK_EQUAL(pool.min_time(context), 0U);
465 BOOST_CHECK_EQUAL(pool.min_processors(context), 0U);
468 BOOST_AUTO_TEST_SUITE_END()
470 BOOST_AUTO_TEST_SUITE_END()
472 BOOST_AUTO_TEST_SUITE(nonempty_colln)
474 BOOST_AUTO_TEST_SUITE(one_element)
476 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate, T, infinite_test_types) {
477 typedef typename T::vtr_colln_t vtr_colln_t;
478 typedef typename T::pool_type pool_type;
479 typedef typename pool_type::joinable joinable;
484 auto const &context=pool<<joinable()<<pool.accumulate(v,
typename vtr_colln_t::value_type());
485 pool.min_time(vtr_colln_t::memory_access_mode);
486 pool.min_processors(vtr_colln_t::memory_access_mode);
487 BOOST_CHECK_EQUAL(*context, 1);
488 BOOST_CHECK_EQUAL(v.size(), 1U);
491 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate_op, T, infinite_test_types) {
492 typedef typename T::vtr_colln_t vtr_colln_t;
493 typedef typename T::pool_type pool_type;
494 typedef typename pool_type::joinable joinable;
499 auto const &context=pool<<joinable()<<pool.accumulate(v, 1,
std::multiplies<
typename vtr_colln_t::value_type>());
500 pool.min_time(vtr_colln_t::memory_access_mode);
501 pool.min_processors(vtr_colln_t::memory_access_mode);
502 BOOST_CHECK_EQUAL(*context, 1);
503 BOOST_CHECK_EQUAL(v.size(), 1U);
506 BOOST_AUTO_TEST_SUITE_END()
508 BOOST_AUTO_TEST_SUITE(two_elements)
510 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate, T, infinite_test_types) {
511 typedef typename T::vtr_colln_t vtr_colln_t;
512 typedef typename T::pool_type pool_type;
513 typedef typename pool_type::joinable joinable;
519 auto const &context=pool<<joinable()<<pool.accumulate(v,
typename vtr_colln_t::value_type());
520 pool.min_time(vtr_colln_t::memory_access_mode);
521 pool.min_processors(vtr_colln_t::memory_access_mode);
522 BOOST_CHECK_EQUAL(*context, 3);
523 BOOST_CHECK_EQUAL(v.size(), 2U);
526 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate_op, T, infinite_test_types) {
527 typedef typename T::vtr_colln_t vtr_colln_t;
528 typedef typename T::pool_type pool_type;
529 typedef typename pool_type::joinable joinable;
535 auto const &context=pool<<joinable()<<pool.accumulate(v, 1,
std::multiplies<
typename vtr_colln_t::value_type>());
536 pool.min_time(vtr_colln_t::memory_access_mode);
537 pool.min_processors(vtr_colln_t::memory_access_mode);
538 BOOST_CHECK_EQUAL(*context, 2);
539 BOOST_CHECK_EQUAL(v.size(), 2U);
542 BOOST_AUTO_TEST_SUITE_END()
544 BOOST_AUTO_TEST_SUITE(n_elements)
546 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate, T, infinite_test_types) {
547 typedef typename T::vtr_colln_t vtr_colln_t;
548 typedef typename T::pool_type pool_type;
549 typedef typename pool_type::joinable joinable;
561 auto const &context=pool<<joinable()<<pool.accumulate(v,
typename vtr_colln_t::value_type());
562 pool.min_time(vtr_colln_t::memory_access_mode);
563 pool.min_processors(vtr_colln_t::memory_access_mode);
564 BOOST_CHECK_EQUAL(*context, 36);
565 BOOST_CHECK_EQUAL(v.size(), 8U);
568 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate_op, T, infinite_test_types) {
569 typedef typename T::vtr_colln_t vtr_colln_t;
570 typedef typename T::pool_type pool_type;
571 typedef typename pool_type::joinable joinable;
583 auto const &context=pool<<joinable()<<pool.accumulate(v, 1L,
std::multiplies<
typename vtr_colln_t::value_type>());
584 pool.min_time(vtr_colln_t::memory_access_mode);
585 pool.min_processors(vtr_colln_t::memory_access_mode);
586 BOOST_CHECK_EQUAL(*context, 40320);
587 BOOST_CHECK_EQUAL(v.size(), 8U);
590 BOOST_AUTO_TEST_SUITE_END()
592 BOOST_AUTO_TEST_SUITE_END()
594 BOOST_AUTO_TEST_SUITE_END()
596 BOOST_AUTO_TEST_SUITE_END()