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(for_each, 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    square<
typename vtr_colln_t::value_type>::last=0;
 
  284    auto const &context=pool<<joinable()<<pool.for_each(v, 
square<
typename vtr_colln_t::value_type>());
 
  285    pool.min_time(vtr_colln_t::memory_access_mode);
 
  286    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  288    BOOST_CHECK_EQUAL(v.empty(), 
true);
 
  289    BOOST_CHECK_EQUAL(square<
typename vtr_colln_t::value_type>::last, 0);
 
  290    BOOST_CHECK_EQUAL(pool.min_time(context), 0U);
 
  291    BOOST_CHECK_EQUAL(pool.min_processors(context), 0U);
 
  294 BOOST_AUTO_TEST_CASE_TEMPLATE(for_each_cliques_1, T, finite_test_types) {
 
  295    typedef typename T::vtr_colln_t vtr_colln_t;
 
  296    typedef typename T::pool_type pool_type;
 
  297    typedef typename pool_type::joinable joinable;
 
  299    pool_type pool(T::pool_size);
 
  301    square<
typename vtr_colln_t::value_type>::last=0;
 
  302    auto const &context=pool<<joinable()<<
cliques(1
)<<pool.for_each(v, 
square<
typename vtr_colln_t::value_type>());
 
  303    pool.min_time(vtr_colln_t::memory_access_mode);
 
  304    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  306    BOOST_CHECK_EQUAL(v.empty(), 
true);
 
  307    BOOST_CHECK_EQUAL(square<
typename vtr_colln_t::value_type>::last, 0);
 
  310 BOOST_AUTO_TEST_CASE_TEMPLATE(overlapped_write_held_by_reads, T, finite_test_types) {
 
  311    typedef typename T::vtr_colln_t vtr_colln_t;
 
  312    typedef typename T::pool_type pool_type;
 
  313    typedef typename pool_type::joinable joinable;
 
  315    pool_type pool(T::pool_size);
 
  317    square<
typename vtr_colln_t::value_type>::last=0;
 
  318    auto const &context=pool<<joinable()<<pool.for_each(v, 
square<
typename vtr_colln_t::value_type>());
 
  321    BOOST_CHECK_EQUAL(v.empty(), 
true);
 
  322    BOOST_CHECK_EQUAL(square<
typename vtr_colln_t::value_type>::last, 0);
 
  325 BOOST_AUTO_TEST_CASE_TEMPLATE(count, T, finite_test_types) {
 
  326    typedef typename T::vtr_colln_t vtr_colln_t;
 
  327    typedef typename T::pool_type pool_type;
 
  328    typedef typename pool_type::joinable joinable;
 
  330    pool_type pool(T::pool_size);
 
  332    auto const &context=pool<<joinable()<<pool.count(v,1);
 
  333    pool.min_time(vtr_colln_t::memory_access_mode);
 
  334    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  335    BOOST_CHECK_EQUAL(*context, 0U);
 
  336    BOOST_CHECK_EQUAL(v.empty(), 
true);
 
  337    BOOST_CHECK_EQUAL(pool.min_time(context), 0U);
 
  338    BOOST_CHECK_EQUAL(pool.min_processors(context), 0U);
 
  341 BOOST_AUTO_TEST_CASE_TEMPLATE(count_if, T, finite_test_types) {
 
  342    typedef typename T::vtr_colln_t vtr_colln_t;
 
  343    typedef typename T::pool_type pool_type;
 
  344    typedef typename pool_type::joinable joinable;
 
  346    pool_type pool(T::pool_size);
 
  348    auto const &context=pool<<joinable()<<pool.count_if(v, 
std::bind2nd(
std::not_equal_to<
typename vtr_colln_t::value_type>(),1));
 
  349    pool.min_time(vtr_colln_t::memory_access_mode);
 
  350    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  351    BOOST_CHECK_EQUAL(*context, 0U);
 
  352    BOOST_CHECK_EQUAL(v.empty(), 
true);
 
  353    BOOST_CHECK_EQUAL(pool.min_time(context), 0U);
 
  354    BOOST_CHECK_EQUAL(pool.min_processors(context), 0U);
 
  357 BOOST_AUTO_TEST_CASE_TEMPLATE(find, T, finite_test_types) {
 
  358    typedef typename T::vtr_colln_t vtr_colln_t;
 
  359    typedef typename T::pool_type pool_type;
 
  360    typedef typename pool_type::joinable joinable;
 
  362    pool_type pool(T::pool_size);
 
  364    auto const &context=pool<<joinable()<<pool.find(v,1);
 
  365    pool.min_time(vtr_colln_t::memory_access_mode);
 
  366    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  367    BOOST_CHECK_EQUAL(*context, 
false);
 
  368    BOOST_CHECK_EQUAL(v.empty(), 
true);
 
  369    BOOST_CHECK_EQUAL(pool.min_time(context), 0U);
 
  370    BOOST_CHECK_EQUAL(pool.min_processors(context), 0U);
 
  373 BOOST_AUTO_TEST_CASE_TEMPLATE(find_if, T, finite_test_types) {
 
  374    typedef typename T::vtr_colln_t vtr_colln_t;
 
  375    typedef typename T::pool_type pool_type;
 
  376    typedef typename pool_type::joinable joinable;
 
  378    pool_type pool(T::pool_size);
 
  380    auto const &context=pool<<joinable()<<pool.find_if(v, 
std::bind2nd(
std::not_equal_to<
typename vtr_colln_t::value_type>(),1));
 
  381    pool.min_time(vtr_colln_t::memory_access_mode);
 
  382    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  383    BOOST_CHECK_EQUAL(*context, 
false);
 
  384    BOOST_CHECK_EQUAL(v.empty(), 
true);
 
  385    BOOST_CHECK_EQUAL(pool.min_time(context), 0U);
 
  386    BOOST_CHECK_EQUAL(pool.min_processors(context), 0U);
 
  389 BOOST_AUTO_TEST_SUITE_END()
 
  391 BOOST_AUTO_TEST_SUITE(nonempty_colln)
 
  393 BOOST_AUTO_TEST_SUITE(one_element)
 
  395 BOOST_AUTO_TEST_CASE_TEMPLATE(for_each, T, finite_test_types) {
 
  396    typedef typename T::vtr_colln_t vtr_colln_t;
 
  397    typedef typename T::pool_type pool_type;
 
  398    typedef typename pool_type::joinable joinable;
 
  400    pool_type pool(T::pool_size);
 
  403    square<
typename vtr_colln_t::value_type>::last=0;
 
  404    auto const &context=pool<<joinable()<<pool.for_each(v, 
square<
typename vtr_colln_t::value_type>());
 
  405    pool.min_time(vtr_colln_t::memory_access_mode);
 
  406    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  408    BOOST_CHECK_EQUAL(pool.queue_size(), 0U);
 
  409    BOOST_CHECK_EQUAL(v.size(), 1U);
 
  410    BOOST_CHECK_EQUAL(square<
typename vtr_colln_t::value_type>::last, 1);
 
  413 BOOST_AUTO_TEST_CASE_TEMPLATE(for_each_cliques_1, T, finite_test_types) {
 
  414    typedef typename T::vtr_colln_t vtr_colln_t;
 
  415    typedef typename T::pool_type pool_type;
 
  416    typedef typename pool_type::joinable joinable;
 
  418    pool_type pool(T::pool_size);
 
  421    square<
typename vtr_colln_t::value_type>::last=0;
 
  422    auto const &context=pool<<joinable()<<
cliques(1
)<<pool.for_each(v, 
square<
typename vtr_colln_t::value_type>());
 
  423    pool.min_time(vtr_colln_t::memory_access_mode);
 
  424    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  426    BOOST_CHECK_EQUAL(pool.queue_size(), 0U);
 
  427    BOOST_CHECK_EQUAL(v.size(), 1U);
 
  428    BOOST_CHECK_EQUAL(square<
typename vtr_colln_t::value_type>::last, 1);
 
  431 BOOST_AUTO_TEST_CASE_TEMPLATE(overlapped_write_held_by_reads, T, finite_test_types) {
 
  432    typedef typename T::vtr_colln_t vtr_colln_t;
 
  433    typedef typename T::pool_type pool_type;
 
  434    typedef typename pool_type::joinable joinable;
 
  436    pool_type pool(T::pool_size);
 
  439    square<
typename vtr_colln_t::value_type>::last=0;
 
  440    auto const &context=pool<<joinable()<<pool.for_each(v, 
square<
typename vtr_colln_t::value_type>());
 
  443    BOOST_CHECK_EQUAL(v.empty(), 
true);
 
  444    BOOST_CHECK_EQUAL(square<
typename vtr_colln_t::value_type>::last, 1);
 
  447 BOOST_AUTO_TEST_CASE_TEMPLATE(count, T, finite_test_types) {
 
  448    typedef typename T::vtr_colln_t vtr_colln_t;
 
  449    typedef typename T::pool_type pool_type;
 
  450    typedef typename pool_type::joinable joinable;
 
  452    pool_type pool(T::pool_size);
 
  455    auto const &context=pool<<joinable()<<pool.count(v, 1);
 
  456    pool.min_time(vtr_colln_t::memory_access_mode);
 
  457    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  458    BOOST_CHECK_EQUAL(*context, 1U);
 
  459    BOOST_CHECK_EQUAL(v.size(), 1U);
 
  462 BOOST_AUTO_TEST_CASE_TEMPLATE(count_if, T, finite_test_types) {
 
  463    typedef typename T::vtr_colln_t vtr_colln_t;
 
  464    typedef typename T::pool_type pool_type;
 
  465    typedef typename pool_type::joinable joinable;
 
  467    pool_type pool(T::pool_size);
 
  470    auto const &context=pool<<joinable()<<pool.count_if(v, 
std::bind2nd(
std::not_equal_to<
typename vtr_colln_t::value_type>(), 1));
 
  471    pool.min_time(vtr_colln_t::memory_access_mode);
 
  472    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  473    BOOST_CHECK_EQUAL(*context, 0U);
 
  474    BOOST_CHECK_EQUAL(v.size(), 1U);
 
  477 BOOST_AUTO_TEST_CASE_TEMPLATE(find, T, finite_test_types) {
 
  478    typedef typename T::vtr_colln_t vtr_colln_t;
 
  479    typedef typename T::pool_type pool_type;
 
  480    typedef typename pool_type::joinable joinable;
 
  482    pool_type pool(T::pool_size);
 
  485    auto const &context=pool<<joinable()<<pool.find(v,1);
 
  486    pool.min_time(vtr_colln_t::memory_access_mode);
 
  487    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  488    BOOST_CHECK_EQUAL(*context, 
true);
 
  489    BOOST_CHECK_EQUAL(v.size(), 1U);
 
  492 BOOST_AUTO_TEST_CASE_TEMPLATE(find_if, T, finite_test_types) {
 
  493    typedef typename T::vtr_colln_t vtr_colln_t;
 
  494    typedef typename T::pool_type pool_type;
 
  495    typedef typename pool_type::joinable joinable;
 
  497    pool_type pool(T::pool_size);
 
  500    auto const &context=pool<<joinable()<<pool.find_if(v, 
std::bind2nd(
std::not_equal_to<
typename vtr_colln_t::value_type>(), 1));
 
  501    pool.min_time(vtr_colln_t::memory_access_mode);
 
  502    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  503    BOOST_CHECK_EQUAL(*context, 
false);
 
  504    BOOST_CHECK_EQUAL(v.size(), 1U);
 
  507 BOOST_AUTO_TEST_SUITE_END()
 
  509 BOOST_AUTO_TEST_SUITE(two_elements)
 
  511 BOOST_AUTO_TEST_CASE_TEMPLATE(for_each, T, finite_test_types) {
 
  512    typedef typename T::vtr_colln_t vtr_colln_t;
 
  513    typedef typename T::pool_type pool_type;
 
  514    typedef typename pool_type::joinable joinable;
 
  516    pool_type pool(T::pool_size);
 
  520    square<
typename vtr_colln_t::value_type>::last=0;
 
  521    auto const &context=pool<<joinable()<<pool.for_each(v, 
square<
typename vtr_colln_t::value_type>());
 
  522    pool.min_time(vtr_colln_t::memory_access_mode);
 
  523    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  525    BOOST_CHECK_EQUAL(v.size(), 2U);
 
  526    BOOST_CHECK_EQUAL(square<
typename vtr_colln_t::value_type>::last, 3);
 
  529 BOOST_AUTO_TEST_CASE_TEMPLATE(overlapped_write_held_by_reads, T, finite_test_types) {
 
  530    typedef typename T::vtr_colln_t vtr_colln_t;
 
  531    typedef typename T::pool_type pool_type;
 
  532    typedef typename pool_type::joinable joinable;
 
  534    pool_type pool(T::pool_size);
 
  538    square<
typename vtr_colln_t::value_type>::last=0;
 
  539    auto const &context=pool<<joinable()<<pool.for_each(v, 
square<
typename vtr_colln_t::value_type>());
 
  542    BOOST_CHECK_EQUAL(v.empty(), 
true);
 
  543    BOOST_CHECK_EQUAL(square<
typename vtr_colln_t::value_type>::last, 3);
 
  546 BOOST_AUTO_TEST_CASE_TEMPLATE(count, T, finite_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;
 
  551    pool_type pool(T::pool_size);
 
  555    auto const &context=pool<<joinable()<<pool.count(v,1);
 
  556    pool.min_time(vtr_colln_t::memory_access_mode);
 
  557    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  558    BOOST_CHECK_EQUAL(*context, 1U);
 
  559    BOOST_CHECK_EQUAL(v.size(), 2U);
 
  562 BOOST_AUTO_TEST_CASE_TEMPLATE(count_if, T, finite_test_types) {
 
  563    typedef typename T::vtr_colln_t vtr_colln_t;
 
  564    typedef typename T::pool_type pool_type;
 
  565    typedef typename pool_type::joinable joinable;
 
  567    pool_type pool(T::pool_size);
 
  571    auto const &context=pool<<joinable()<<pool.count_if(v, 
std::bind2nd(
std::not_equal_to<
typename vtr_colln_t::value_type>(), 1));
 
  572    pool.min_time(vtr_colln_t::memory_access_mode);
 
  573    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  574    BOOST_CHECK_EQUAL(*context, 1U);
 
  575    BOOST_CHECK_EQUAL(v.size(), 2U);
 
  578 BOOST_AUTO_TEST_CASE_TEMPLATE(find, T, finite_test_types) {
 
  579    typedef typename T::vtr_colln_t vtr_colln_t;
 
  580    typedef typename T::pool_type pool_type;
 
  581    typedef typename pool_type::joinable joinable;
 
  583    pool_type pool(T::pool_size);
 
  587    auto const &context=pool<<joinable()<<pool.find(v,1);
 
  588    pool.min_time(vtr_colln_t::memory_access_mode);
 
  589    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  590    BOOST_CHECK_EQUAL(*context, 
true);
 
  591    BOOST_CHECK_EQUAL(v.size(), 2U);
 
  594 BOOST_AUTO_TEST_CASE_TEMPLATE(find_if, T, finite_test_types) {
 
  595    typedef typename T::vtr_colln_t vtr_colln_t;
 
  596    typedef typename T::pool_type pool_type;
 
  597    typedef typename pool_type::joinable joinable;
 
  599    pool_type pool(T::pool_size);
 
  603    auto const &context=pool<<joinable()<<pool.find_if(v, 
std::bind2nd(
std::not_equal_to<
typename vtr_colln_t::value_type>(), 1));
 
  604    pool.min_time(vtr_colln_t::memory_access_mode);
 
  605    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  606    BOOST_CHECK_EQUAL(*context, 
true);
 
  607    BOOST_CHECK_EQUAL(v.size(), 2U);
 
  610 BOOST_AUTO_TEST_SUITE_END()
 
  612 BOOST_AUTO_TEST_SUITE(n_elements)
 
  614 BOOST_AUTO_TEST_CASE_TEMPLATE(for_each, T, finite_test_types) {
 
  615    typedef typename T::vtr_colln_t vtr_colln_t;
 
  616    typedef typename T::pool_type pool_type;
 
  617    typedef typename pool_type::joinable joinable;
 
  619    pool_type pool(T::pool_size);
 
  629    square<
typename vtr_colln_t::value_type>::last=0;
 
  630    auto const &context=pool<<joinable()<<pool.for_each(v, 
square<
typename vtr_colln_t::value_type>());
 
  631    pool.min_time(vtr_colln_t::memory_access_mode);
 
  632    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  634    BOOST_CHECK_EQUAL(v.size(), 8U);
 
  635    BOOST_CHECK_EQUAL(square<
typename vtr_colln_t::value_type>::last, 36);
 
  638 BOOST_AUTO_TEST_CASE_TEMPLATE(for_each_cliques_1, T, finite_test_types) {
 
  639    typedef typename T::vtr_colln_t vtr_colln_t;
 
  640    typedef typename T::pool_type pool_type;
 
  641    typedef typename pool_type::joinable joinable;
 
  643    pool_type pool(T::pool_size);
 
  653    square<
typename vtr_colln_t::value_type>::last=0;
 
  654    auto const &context=pool<<joinable()<<
cliques(1
)<<pool.for_each(v, 
square<
typename vtr_colln_t::value_type>());
 
  655    pool.min_time(vtr_colln_t::memory_access_mode);
 
  656    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  658    BOOST_CHECK_EQUAL(v.size(), 8U);
 
  659    BOOST_CHECK_EQUAL(square<
typename vtr_colln_t::value_type>::last, 36);
 
  662 BOOST_AUTO_TEST_CASE_TEMPLATE(for_each_cliques_2, T, finite_test_types) {
 
  663    typedef typename T::vtr_colln_t vtr_colln_t;
 
  664    typedef typename T::pool_type pool_type;
 
  665    typedef typename pool_type::joinable joinable;
 
  667    pool_type pool(T::pool_size);
 
  677    square<
typename vtr_colln_t::value_type>::last=0;
 
  678    auto const &context=pool<<joinable()<<
cliques(2
)<<pool.for_each(v, 
square<
typename vtr_colln_t::value_type>());
 
  679    pool.min_time(vtr_colln_t::memory_access_mode);
 
  680    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  682    BOOST_CHECK_EQUAL(v.size(), 8U);
 
  683    BOOST_CHECK_EQUAL(square<
typename vtr_colln_t::value_type>::last, 36);
 
  686 BOOST_AUTO_TEST_CASE_TEMPLATE(overlapped_write_held_by_reads, T, finite_test_types) {
 
  687    typedef typename T::vtr_colln_t vtr_colln_t;
 
  688    typedef typename T::pool_type pool_type;
 
  689    typedef typename pool_type::joinable joinable;
 
  691    pool_type pool(T::pool_size);
 
  701    square<
typename vtr_colln_t::value_type>::last=0;
 
  702    auto const &context=pool<<joinable()<<pool.for_each(v, 
square<
typename vtr_colln_t::value_type>());
 
  705    BOOST_CHECK_EQUAL(v.empty(), 
true);
 
  706    BOOST_CHECK_EQUAL(square<
typename vtr_colln_t::value_type>::last, 36);
 
  709 BOOST_AUTO_TEST_CASE_TEMPLATE(count, T, finite_test_types) {
 
  710    typedef typename T::vtr_colln_t vtr_colln_t;
 
  711    typedef typename T::pool_type pool_type;
 
  712    typedef typename pool_type::joinable joinable;
 
  714    pool_type pool(T::pool_size);
 
  724    auto const &context=pool<<joinable()<<pool.count(v,1);
 
  725    pool.min_time(vtr_colln_t::memory_access_mode);
 
  726    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  727    BOOST_CHECK_EQUAL(*context, 2U);
 
  728    BOOST_CHECK_EQUAL(v.size(), 8U);
 
  731 BOOST_AUTO_TEST_CASE_TEMPLATE(count_if, T, finite_test_types) {
 
  732    typedef typename T::vtr_colln_t vtr_colln_t;
 
  733    typedef typename T::pool_type pool_type;
 
  734    typedef typename pool_type::joinable joinable;
 
  736    pool_type pool(T::pool_size);
 
  746    auto const &context=pool<<joinable()<<pool.count_if(v, 
std::bind2nd(
std::not_equal_to<
typename vtr_colln_t::value_type>(), 1));
 
  747    pool.min_time(vtr_colln_t::memory_access_mode);
 
  748    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  749    BOOST_CHECK_EQUAL(*context, 6U);
 
  750    BOOST_CHECK_EQUAL(v.size(), 8U);
 
  753 BOOST_AUTO_TEST_CASE_TEMPLATE(find, T, finite_test_types) {
 
  754    typedef typename T::vtr_colln_t vtr_colln_t;
 
  755    typedef typename T::pool_type pool_type;
 
  756    typedef typename pool_type::joinable joinable;
 
  758    pool_type pool(T::pool_size);
 
  768    auto const &context=pool<<joinable()<<pool.find(v,1);
 
  769    pool.min_time(vtr_colln_t::memory_access_mode);
 
  770    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  771    BOOST_CHECK_EQUAL(*context, 
true);
 
  772    BOOST_CHECK_EQUAL(v.size(), 8U);
 
  775 BOOST_AUTO_TEST_CASE_TEMPLATE(find_if, T, finite_test_types) {
 
  776    typedef typename T::vtr_colln_t vtr_colln_t;
 
  777    typedef typename T::pool_type pool_type;
 
  778    typedef typename pool_type::joinable joinable;
 
  780    pool_type pool(T::pool_size);
 
  790    auto const &context=pool<<joinable()<<pool.find_if(v, 
std::bind2nd(
std::not_equal_to<
typename vtr_colln_t::value_type>(), 1));
 
  791    pool.min_time(vtr_colln_t::memory_access_mode);
 
  792    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  793    BOOST_CHECK_EQUAL(*context, 
true);
 
  794    BOOST_CHECK_EQUAL(v.size(), 8U);
 
  797 BOOST_AUTO_TEST_SUITE_END()
 
  799 BOOST_AUTO_TEST_SUITE_END()
 
  801 BOOST_AUTO_TEST_SUITE_END()
 
  803 BOOST_AUTO_TEST_SUITE(infinite)
 
  805 BOOST_AUTO_TEST_SUITE(empty_colln)
 
  807 BOOST_AUTO_TEST_CASE_TEMPLATE(for_each, T, infinite_test_types) {
 
  808    typedef typename T::vtr_colln_t vtr_colln_t;
 
  809    typedef typename T::pool_type pool_type;
 
  810    typedef typename pool_type::joinable joinable;
 
  814    square<
typename vtr_colln_t::value_type>::last=0;
 
  815    auto const &context=pool<<joinable()<<pool.for_each(v, 
square<
typename vtr_colln_t::value_type>());
 
  816    pool.min_time(vtr_colln_t::memory_access_mode);
 
  817    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  819    BOOST_CHECK_EQUAL(v.empty(), 
true);
 
  820    BOOST_CHECK_EQUAL(square<
typename vtr_colln_t::value_type>::last, 0);
 
  821    BOOST_CHECK_EQUAL(pool.min_time(context), 0U);
 
  822    BOOST_CHECK_EQUAL(pool.min_processors(context), 0U);
 
  825 BOOST_AUTO_TEST_CASE_TEMPLATE(count, T, infinite_test_types) {
 
  826    typedef typename T::vtr_colln_t vtr_colln_t;
 
  827    typedef typename T::pool_type pool_type;
 
  828    typedef typename pool_type::joinable joinable;
 
  832    auto const &context=pool<<joinable()<<pool.count(v,1);
 
  833    BOOST_CHECK_EQUAL(*context, 0U);
 
  834    BOOST_CHECK_EQUAL(v.empty(), 
true);
 
  835    BOOST_CHECK_EQUAL(pool.min_time(context), 0U);
 
  836    BOOST_CHECK_EQUAL(pool.min_processors(context), 0U);
 
  839 BOOST_AUTO_TEST_CASE_TEMPLATE(count_if, T, infinite_test_types) {
 
  840    typedef typename T::vtr_colln_t vtr_colln_t;
 
  841    typedef typename T::pool_type pool_type;
 
  842    typedef typename pool_type::joinable joinable;
 
  846    auto const &context=pool<<joinable()<<pool.count_if(v, 
std::bind2nd(
std::not_equal_to<
typename vtr_colln_t::value_type>(), 1));
 
  847    pool.min_time(vtr_colln_t::memory_access_mode);
 
  848    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  849    BOOST_CHECK_EQUAL(*context, 0U);
 
  850    BOOST_CHECK_EQUAL(v.empty(), 
true);
 
  851    BOOST_CHECK_EQUAL(pool.min_time(context), 0U);
 
  852    BOOST_CHECK_EQUAL(pool.min_processors(context), 0U);
 
  855 BOOST_AUTO_TEST_CASE_TEMPLATE(find, T, infinite_test_types) {
 
  856    typedef typename T::vtr_colln_t vtr_colln_t;
 
  857    typedef typename T::pool_type pool_type;
 
  858    typedef typename pool_type::joinable joinable;
 
  862    auto const &context=pool<<joinable()<<pool.find(v,1);
 
  863    pool.min_time(vtr_colln_t::memory_access_mode);
 
  864    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  865    BOOST_CHECK_EQUAL(*context, 
false);
 
  866    BOOST_CHECK_EQUAL(v.empty(), 
true);
 
  867    BOOST_CHECK_EQUAL(pool.min_time(context), 0U);
 
  868    BOOST_CHECK_EQUAL(pool.min_processors(context), 0U);
 
  871 BOOST_AUTO_TEST_CASE_TEMPLATE(find_if, T, infinite_test_types) {
 
  872    typedef typename T::vtr_colln_t vtr_colln_t;
 
  873    typedef typename T::pool_type pool_type;
 
  874    typedef typename pool_type::joinable joinable;
 
  878    auto const &context=pool<<joinable()<<pool.find_if(v, 
std::bind2nd(
std::not_equal_to<
typename vtr_colln_t::value_type>(), 1));
 
  879    pool.min_time(vtr_colln_t::memory_access_mode);
 
  880    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  881    BOOST_CHECK_EQUAL(*context, 
false);
 
  882    BOOST_CHECK_EQUAL(v.empty(), 
true);
 
  883    BOOST_CHECK_EQUAL(pool.min_time(context), 0U);
 
  884    BOOST_CHECK_EQUAL(pool.min_processors(context), 0U);
 
  887 BOOST_AUTO_TEST_SUITE_END()
 
  889 BOOST_AUTO_TEST_SUITE_END()
 
  891 BOOST_AUTO_TEST_SUITE(nonempty_colln)
 
  893 BOOST_AUTO_TEST_SUITE(one_element)
 
  895 BOOST_AUTO_TEST_CASE_TEMPLATE(for_each, T, infinite_test_types) {
 
  896    typedef typename T::vtr_colln_t vtr_colln_t;
 
  897    typedef typename T::pool_type pool_type;
 
  898    typedef typename pool_type::joinable joinable;
 
  903    square<
typename vtr_colln_t::value_type>::last=0;
 
  904    auto const &context=pool<<joinable()<<pool.for_each(v, 
square<
typename vtr_colln_t::value_type>());
 
  905    pool.min_time(vtr_colln_t::memory_access_mode);
 
  906    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  908    BOOST_CHECK_EQUAL(v.size(), 1U);
 
  909    BOOST_CHECK_EQUAL(square<
typename vtr_colln_t::value_type>::last, 1);
 
  912 BOOST_AUTO_TEST_CASE_TEMPLATE(count, T, infinite_test_types) {
 
  913    typedef typename T::vtr_colln_t vtr_colln_t;
 
  914    typedef typename T::pool_type pool_type;
 
  915    typedef typename pool_type::joinable joinable;
 
  920    auto const &context=pool<<joinable()<<pool.count(v,1);
 
  921    pool.min_time(vtr_colln_t::memory_access_mode);
 
  922    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  923    BOOST_CHECK_EQUAL(*context, 1U);
 
  924    BOOST_CHECK_EQUAL(v.size(), 1U);
 
  927 BOOST_AUTO_TEST_CASE_TEMPLATE(count_if, T, infinite_test_types) {
 
  928    typedef typename T::vtr_colln_t vtr_colln_t;
 
  929    typedef typename T::pool_type pool_type;
 
  930    typedef typename pool_type::joinable joinable;
 
  935    auto const &context=pool<<joinable()<<pool.count_if(v, 
std::bind2nd(
std::not_equal_to<
typename vtr_colln_t::value_type>(), 1));
 
  936    pool.min_time(vtr_colln_t::memory_access_mode);
 
  937    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  938    BOOST_CHECK_EQUAL(*context, 0U);
 
  939    BOOST_CHECK_EQUAL(v.size(), 1U);
 
  942 BOOST_AUTO_TEST_CASE_TEMPLATE(find, T, infinite_test_types) {
 
  943    typedef typename T::vtr_colln_t vtr_colln_t;
 
  944    typedef typename T::pool_type pool_type;
 
  945    typedef typename pool_type::joinable joinable;
 
  950    auto const &context=pool<<joinable()<<pool.find(v,1);
 
  951    pool.min_time(vtr_colln_t::memory_access_mode);
 
  952    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  953    BOOST_CHECK_EQUAL(*context, 
true);
 
  954    BOOST_CHECK_EQUAL(v.size(), 1U);
 
  957 BOOST_AUTO_TEST_CASE_TEMPLATE(find_if, T, infinite_test_types) {
 
  958    typedef typename T::vtr_colln_t vtr_colln_t;
 
  959    typedef typename T::pool_type pool_type;
 
  960    typedef typename pool_type::joinable joinable;
 
  965    auto const &context=pool<<joinable()<<pool.find_if(v, 
std::bind2nd(
std::not_equal_to<
typename vtr_colln_t::value_type>(), 1));
 
  966    pool.min_time(vtr_colln_t::memory_access_mode);
 
  967    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  968    BOOST_CHECK_EQUAL(*context, 
false);
 
  969    BOOST_CHECK_EQUAL(v.size(), 1U);
 
  972 BOOST_AUTO_TEST_SUITE_END()
 
  974 BOOST_AUTO_TEST_SUITE(two_elements)
 
  976 BOOST_AUTO_TEST_CASE_TEMPLATE(for_each, T, infinite_test_types) {
 
  977    typedef typename T::vtr_colln_t vtr_colln_t;
 
  978    typedef typename T::pool_type pool_type;
 
  979    typedef typename pool_type::joinable joinable;
 
  985    square<
typename vtr_colln_t::value_type>::last=0;
 
  986    auto const &context=pool<<joinable()<<pool.for_each(v, 
square<
typename vtr_colln_t::value_type>());
 
  987    pool.min_time(vtr_colln_t::memory_access_mode);
 
  988    pool.min_processors(vtr_colln_t::memory_access_mode);
 
  990    BOOST_CHECK_EQUAL(v.size(), 2U);
 
  991    BOOST_CHECK_EQUAL(square<
typename vtr_colln_t::value_type>::last, 3);
 
  994 BOOST_AUTO_TEST_CASE_TEMPLATE(count, T, infinite_test_types) {
 
  995    typedef typename T::vtr_colln_t vtr_colln_t;
 
  996    typedef typename T::pool_type pool_type;
 
  997    typedef typename pool_type::joinable joinable;
 
 1003    auto const &context=pool<<joinable()<<pool.count(v,1);
 
 1004    pool.min_time(vtr_colln_t::memory_access_mode);
 
 1005    pool.min_processors(vtr_colln_t::memory_access_mode);
 
 1006    BOOST_CHECK_EQUAL(*context, 1U);
 
 1007    BOOST_CHECK_EQUAL(v.size(), 2U);
 
 1010 BOOST_AUTO_TEST_CASE_TEMPLATE(count_if, T, infinite_test_types) {
 
 1011    typedef typename T::vtr_colln_t vtr_colln_t;
 
 1012    typedef typename T::pool_type pool_type;
 
 1013    typedef typename pool_type::joinable joinable;
 
 1019    auto const &context=pool<<joinable()<<pool.count_if(v, 
std::bind2nd(
std::not_equal_to<
typename vtr_colln_t::value_type>(), 1));
 
 1020    pool.min_time(vtr_colln_t::memory_access_mode);
 
 1021    pool.min_processors(vtr_colln_t::memory_access_mode);
 
 1022    BOOST_CHECK_EQUAL(*context, 1U);
 
 1023    BOOST_CHECK_EQUAL(v.size(), 2U);
 
 1026 BOOST_AUTO_TEST_CASE_TEMPLATE(find, T, infinite_test_types) {
 
 1027    typedef typename T::vtr_colln_t vtr_colln_t;
 
 1028    typedef typename T::pool_type pool_type;
 
 1029    typedef typename pool_type::joinable joinable;
 
 1035    auto const &context=pool<<joinable()<<pool.find(v,1);
 
 1036    pool.min_time(vtr_colln_t::memory_access_mode);
 
 1037    pool.min_processors(vtr_colln_t::memory_access_mode);
 
 1038    BOOST_CHECK_EQUAL(*context, 
true);
 
 1039    BOOST_CHECK_EQUAL(v.size(), 2U);
 
 1042 BOOST_AUTO_TEST_CASE_TEMPLATE(find_if, T, infinite_test_types) {
 
 1043    typedef typename T::vtr_colln_t vtr_colln_t;
 
 1044    typedef typename T::pool_type pool_type;
 
 1045    typedef typename pool_type::joinable joinable;
 
 1051    auto const &context=pool<<joinable()<<pool.find_if(v, 
std::bind2nd(
std::not_equal_to<
typename vtr_colln_t::value_type>(), 1));
 
 1052    pool.min_time(vtr_colln_t::memory_access_mode);
 
 1053    pool.min_processors(vtr_colln_t::memory_access_mode);
 
 1054    BOOST_CHECK_EQUAL(*context, 
true);
 
 1055    BOOST_CHECK_EQUAL(v.size(), 2U);
 
 1058 BOOST_AUTO_TEST_SUITE_END()
 
 1060 BOOST_AUTO_TEST_SUITE(n_elements)
 
 1062 BOOST_AUTO_TEST_CASE_TEMPLATE(for_each, T, infinite_test_types) {
 
 1063    typedef typename T::vtr_colln_t vtr_colln_t;
 
 1064    typedef typename T::pool_type pool_type;
 
 1065    typedef typename pool_type::joinable joinable;
 
 1077    square<
typename vtr_colln_t::value_type>::last=0;
 
 1078    auto const &context=pool<<joinable()<<pool.for_each(v, 
square<
typename vtr_colln_t::value_type>());
 
 1079    pool.min_time(vtr_colln_t::memory_access_mode);
 
 1080    pool.min_processors(vtr_colln_t::memory_access_mode);
 
 1082    BOOST_CHECK_EQUAL(v.size(), 8U);
 
 1083    BOOST_CHECK_EQUAL(square<
typename vtr_colln_t::value_type>::last, 36);
 
 1086 BOOST_AUTO_TEST_CASE_TEMPLATE(count, T, infinite_test_types) {
 
 1087    typedef typename T::vtr_colln_t vtr_colln_t;
 
 1088    typedef typename T::pool_type pool_type;
 
 1089    typedef typename pool_type::joinable joinable;
 
 1101    auto const &context=pool<<joinable()<<pool.count(v,1);
 
 1102    pool.min_time(vtr_colln_t::memory_access_mode);
 
 1103    pool.min_processors(vtr_colln_t::memory_access_mode);
 
 1104    BOOST_CHECK_EQUAL(*context, 2U);
 
 1105    BOOST_CHECK_EQUAL(v.size(), 8U);
 
 1108 BOOST_AUTO_TEST_CASE_TEMPLATE(count_if, T, infinite_test_types) {
 
 1109    typedef typename T::vtr_colln_t vtr_colln_t;
 
 1110    typedef typename T::pool_type pool_type;
 
 1111    typedef typename pool_type::joinable joinable;
 
 1123    auto const &context=pool<<joinable()<<pool.count_if(v, 
std::bind2nd(
std::not_equal_to<
typename vtr_colln_t::value_type>(), 1));
 
 1124    pool.min_time(vtr_colln_t::memory_access_mode);
 
 1125    pool.min_processors(vtr_colln_t::memory_access_mode);
 
 1126    BOOST_CHECK_EQUAL(*context, 6U);
 
 1127    BOOST_CHECK_EQUAL(v.size(), 8U);
 
 1130 BOOST_AUTO_TEST_CASE_TEMPLATE(find, T, infinite_test_types) {
 
 1131    typedef typename T::vtr_colln_t vtr_colln_t;
 
 1132    typedef typename T::pool_type pool_type;
 
 1133    typedef typename pool_type::joinable joinable;
 
 1145    auto const &context=pool<<joinable()<<pool.find(v,1);
 
 1146    pool.min_time(vtr_colln_t::memory_access_mode);
 
 1147    pool.min_processors(vtr_colln_t::memory_access_mode);
 
 1148    BOOST_CHECK_EQUAL(*context, 
true);
 
 1149    BOOST_CHECK_EQUAL(v.size(), 8U);
 
 1152 BOOST_AUTO_TEST_CASE_TEMPLATE(find_if, T, infinite_test_types) {
 
 1153    typedef typename T::vtr_colln_t vtr_colln_t;
 
 1154    typedef typename T::pool_type pool_type;
 
 1155    typedef typename pool_type::joinable joinable;
 
 1167    auto const &context=pool<<joinable()<<pool.find_if(v, 
std::bind2nd(
std::not_equal_to<
typename vtr_colln_t::value_type>(), 1));
 
 1168    pool.min_time(vtr_colln_t::memory_access_mode);
 
 1169    pool.min_processors(vtr_colln_t::memory_access_mode);
 
 1170    BOOST_CHECK_EQUAL(*context, 
true);
 
 1171    BOOST_CHECK_EQUAL(v.size(), 8U);
 
 1174 BOOST_AUTO_TEST_SUITE_END()
 
 1176 BOOST_AUTO_TEST_SUITE_END()
 
 1178 BOOST_AUTO_TEST_SUITE_END()
 
 1180 BOOST_AUTO_TEST_SUITE_END()