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()