root/examples/dataflow_full_numeric_algos.cpp

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. sqr
  2. BOOST_AUTO_TEST_SUITE
  3. BOOST_AUTO_TEST_CASE_TEMPLATE
  4. BOOST_AUTO_TEST_SUITE_END
  5. BOOST_AUTO_TEST_CASE_TEMPLATE
  6. BOOST_AUTO_TEST_SUITE_END
  7. BOOST_AUTO_TEST_CASE_TEMPLATE
  8. BOOST_AUTO_TEST_SUITE_END
  9. BOOST_AUTO_TEST_CASE_TEMPLATE
  10. BOOST_AUTO_TEST_SUITE_END
  11. BOOST_AUTO_TEST_CASE_TEMPLATE
  12. BOOST_AUTO_TEST_SUITE_END
  13. BOOST_AUTO_TEST_CASE_TEMPLATE
  14. BOOST_AUTO_TEST_SUITE_END
  15. BOOST_AUTO_TEST_CASE_TEMPLATE
  16. BOOST_AUTO_TEST_SUITE_END
  17. BOOST_AUTO_TEST_CASE_TEMPLATE

   1 /******************************************************************************

   2 ** $Header: svn+ssh://jmmcg@svn.code.sf.net/p/libjmmcg/code/trunk/libjmmcg/examples/dataflow_full_numeric_algos.cpp 2185 2017-10-13 10:14:17Z jmmcg $

   3 **

   4 ** Copyright © 2002 by J.M.McGuiness, coder@hussar.me.uk

   5 **

   6 ** This library is free software; you can redistribute it and/or

   7 ** modify it under the terms of the GNU Lesser General Public

   8 ** License as published by the Free Software Foundation; either

   9 ** version 2.1 of the License, or (at your option) any later version.

  10 **

  11 ** This library is distributed in the hope that it will be useful,

  12 ** but WITHOUT ANY WARRANTY; without even the implied warranty of

  13 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU

  14 ** Lesser General Public License for more details.

  15 **

  16 ** You should have received a copy of the GNU Lesser General Public

  17 ** License along with this library; if not, write to the Free Software

  18 ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

  19 */
  20 
  21 #include "stdafx.h"
  22 
  23 #define BOOST_TEST_MODULE libjmmcg_tests
  24 #include <boost/test/included/unit_test.hpp>
  25 
  26 #include <boost/test/test_case_template.hpp>
  27 #include <boost/mpl/list.hpp>
  28 
  29 #include "core/thread_pool_sequential.hpp"
  30 #include "core/thread_pool_master.hpp"
  31 #include "core/thread_pool_workers.hpp"
  32 
  33 using namespace jmmcg;
  34 using namespace jmmcg::ppd;
  35 
  36 template<class Db, pool_traits::size_mode_t Sz, generic_traits::return_data Jn, class Mdl, unsigned int PoolSize=0, unsigned int GSSk=1>
  37 struct erew_normal_fifo_t {
  38         typedef api_lock_traits<platform_api, Mdl> lock_traits;
  39         typedef safe_colln<
  40                 std::vector<long>,
  41                 typename lock_traits::nonrecursive_anon_mutex_type
  42         > vtr_colln_t;
  43 
  44         typedef pool_aspects<
  45                 Jn,
  46                 platform_api,
  47                 Mdl,
  48                 pool_traits::normal_fifo,
  49                 std::less,
  50                 GSSk
  51         > thread_pool_traits;
  52 
  53         typedef thread_pool<Db, Sz, thread_pool_traits> pool_type;
  54 
  55         static const typename pool_type::pool_type::size_type pool_size=PoolSize;
  56 };
  57 
  58 template<class Db, pool_traits::size_mode_t Sz, generic_traits::return_data Jn, class Mdl, unsigned int PoolSize, unsigned int GSSk>
  59 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;
  60 
  61 template<class Db, pool_traits::size_mode_t Sz, generic_traits::return_data Jn, class Mdl, unsigned int PoolSize=0, unsigned int GSSk=1>
  62 struct erew_normal_lifo_t {
  63         typedef api_lock_traits<platform_api, Mdl> lock_traits;
  64         typedef safe_colln<
  65                 std::vector<long>,
  66                 typename lock_traits::nonrecursive_anon_mutex_type
  67         > vtr_colln_t;
  68 
  69         typedef pool_aspects<
  70                 Jn,
  71                 platform_api,
  72                 Mdl,
  73                 pool_traits::normal_lifo,
  74                 std::less,
  75                 GSSk
  76         > thread_pool_traits;
  77 
  78         typedef thread_pool<Db, Sz, thread_pool_traits> pool_type;
  79 
  80         static const typename pool_type::pool_type::size_type pool_size=PoolSize;
  81 };
  82 
  83 template<class Db, pool_traits::size_mode_t Sz, generic_traits::return_data Jn, class Mdl, unsigned int PoolSize, unsigned int GSSk>
  84 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;
  85 
  86 template<class Db, pool_traits::size_mode_t Sz, generic_traits::return_data Jn, class Mdl, unsigned int PoolSize=0, unsigned int GSSk=1>
  87 struct erew_priority_queue_t {
  88         typedef api_lock_traits<platform_api, Mdl> lock_traits;
  89         typedef safe_colln<
  90                 std::vector<long>,
  91                 typename lock_traits::nonrecursive_anon_mutex_type
  92         > vtr_colln_t;
  93 
  94         typedef pool_aspects<
  95                 Jn,
  96                 platform_api,
  97                 Mdl,
  98                 pool_traits::prioritised_queue,
  99                 std::less,
 100                 GSSk
 101         > thread_pool_traits;
 102 
 103         typedef thread_pool<Db, Sz, thread_pool_traits> pool_type;
 104 
 105         static const typename pool_type::pool_type::size_type pool_size=PoolSize;
 106 };
 107 
 108 template<class Db, pool_traits::size_mode_t Sz, generic_traits::return_data Jn, class Mdl, unsigned int PoolSize, unsigned int GSSk>
 109 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;
 110 
 111 template<class Db, pool_traits::size_mode_t Sz, generic_traits::return_data Jn, class Mdl, unsigned int PoolSize=0, unsigned int GSSk=1>
 112 struct crew_normal_fifo_t {
 113         typedef api_lock_traits<platform_api, Mdl> lock_traits;
 114         typedef safe_colln<
 115                 std::vector<long>,
 116                 typename lock::rw::locker<lock_traits>,
 117                 typename lock::rw::locker<lock_traits>::decaying_write_lock_type
 118         > vtr_colln_t;
 119 
 120         typedef pool_aspects<
 121                 Jn,
 122                 platform_api,
 123                 Mdl,
 124                 pool_traits::normal_fifo,
 125                 std::less,
 126                 GSSk
 127         > thread_pool_traits;
 128 
 129         typedef thread_pool<Db, Sz, thread_pool_traits> pool_type;
 130 
 131         static const typename pool_type::pool_type::size_type pool_size=PoolSize;
 132 };
 133 
 134 template<class Db, pool_traits::size_mode_t Sz, generic_traits::return_data Jn, class Mdl, unsigned int PoolSize, unsigned int GSSk>
 135 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;
 136 
 137 template<class Db, pool_traits::size_mode_t Sz, generic_traits::return_data Jn, class Mdl, unsigned int PoolSize=0, unsigned int GSSk=1>
 138 struct crew_normal_lifo_t {
 139         typedef api_lock_traits<platform_api, Mdl> lock_traits;
 140         typedef safe_colln<
 141                 std::vector<long>,
 142                 typename lock::rw::locker<lock_traits>,
 143                 typename lock::rw::locker<lock_traits>::decaying_write_lock_type
 144         > vtr_colln_t;
 145 
 146         typedef pool_aspects<
 147                 Jn,
 148                 platform_api,
 149                 Mdl,
 150                 pool_traits::normal_lifo,
 151                 std::less,
 152                 GSSk
 153         > thread_pool_traits;
 154 
 155         typedef thread_pool<Db, Sz, thread_pool_traits> pool_type;
 156 
 157         static const typename pool_type::pool_type::size_type pool_size=PoolSize;
 158 };
 159 
 160 template<class Db, pool_traits::size_mode_t Sz, generic_traits::return_data Jn, class Mdl, unsigned int PoolSize, unsigned int GSSk>
 161 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;
 162 
 163 template<class Db, pool_traits::size_mode_t Sz, generic_traits::return_data Jn, class Mdl, unsigned int PoolSize=0, unsigned int GSSk=1>
 164 struct crew_priority_queue_t {
 165         typedef api_lock_traits<platform_api, Mdl> lock_traits;
 166         typedef safe_colln<
 167                 std::vector<long>,
 168                 typename lock::rw::locker<lock_traits>,
 169                 typename lock::rw::locker<lock_traits>::decaying_write_lock_type
 170         > vtr_colln_t;
 171 
 172         typedef pool_aspects<
 173                 Jn,
 174                 platform_api,
 175                 Mdl,
 176                 pool_traits::prioritised_queue,
 177                 std::less,
 178                 GSSk
 179         > thread_pool_traits;
 180 
 181         typedef thread_pool<Db, Sz, thread_pool_traits> pool_type;
 182 
 183         static const typename pool_type::pool_type::size_type pool_size=PoolSize;
 184 };
 185 
 186 template<class Db, pool_traits::size_mode_t Sz, generic_traits::return_data Jn, class Mdl, unsigned int PoolSize, unsigned int GSSk>
 187 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;
 188 
 189 typedef boost::mpl::list<
 190         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>,
 191         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>,
 192         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>,
 193         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>,
 194         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>,
 195         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>,
 196 
 197         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>,
 198 // TODO 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, 2>,

 199         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>,
 200 // TODO 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, 2>,

 201         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>,
 202 // TODO 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, 2>,

 203         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>,
 204 // TODO 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, 2>,

 205         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>,
 206 // TODO 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, 2>,

 207         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>,
 208 // TODO 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, 2>,

 209 
 210         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>,
 211         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>,
 212         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>,
 213         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>,
 214         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>,
 215         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>
 216 > finite_test_types;
 217 
 218 typedef boost::mpl::list<
 219         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>,
 220         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>,
 221         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>,
 222         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>,
 223         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>,
 224         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>,
 225         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>,
 226         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>,
 227         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>,
 228         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>,
 229         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>,
 230         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>,
 231 
 232 // TODO 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::infinite, generic_traits::return_data::joinable, heavyweight_threading>,

 233 // TODO 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::infinite, generic_traits::return_data::joinable, heavyweight_threading>,

 234 // TODO 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::infinite, generic_traits::return_data::joinable, heavyweight_threading>,

 235 // TODO 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::infinite, generic_traits::return_data::joinable, heavyweight_threading>,

 236 // TODO 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::infinite, generic_traits::return_data::joinable, heavyweight_threading>,

 237 // TODO 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::infinite, generic_traits::return_data::joinable, heavyweight_threading>,

 238         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>,
 239         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>,
 240         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>,
 241         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>,
 242         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>,
 243         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>,
 244         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>,
 245         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>,
 246         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>,
 247         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>,
 248         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>,
 249         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>
 250 > infinite_test_types;
 251 
 252 // TODO Need to test: pool_traits::size_mode_t::tracks_to_max

 253 
 254 template<typename T>
 255 struct square : std::unary_function<T, void> {
 256         static T last;
 257 
 258         void operator()(T t) {
 259                 last+=t;
 260         };
 261 };
 262 
 263 template<typename T>
 264 T square<T>::last;
 265 
 266 inline int sqr() {
 267         static int last=0;
 268         return last++<<1;
 269 }
 270 
 271 BOOST_AUTO_TEST_SUITE(thread_pool_tests)
 272 
 273 BOOST_AUTO_TEST_SUITE(joinable_dataflow)
 274 
 275 BOOST_AUTO_TEST_SUITE(finite)
 276 
 277 BOOST_AUTO_TEST_SUITE(empty_colln)
 278 
 279 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate, T, finite_test_types) {
 280         typedef typename T::vtr_colln_t vtr_colln_t;
 281         typedef typename T::pool_type pool_type;
 282         typedef typename pool_type::joinable joinable;
 283 
 284         pool_type pool(T::pool_size);
 285         vtr_colln_t v;
 286         auto const &context=pool<<joinable()<<pool.accumulate(v, typename vtr_colln_t::value_type());
 287         BOOST_CHECK_EQUAL(*context, 0);
 288         BOOST_CHECK_EQUAL(v.empty(), true);
 289         BOOST_CHECK_EQUAL(pool.min_time(context), 0U);
 290         BOOST_CHECK_EQUAL(pool.min_processors(context), 0U);
 291 }
 292 
 293 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate_op, T, finite_test_types) {
 294         typedef typename T::vtr_colln_t vtr_colln_t;
 295         typedef typename T::pool_type pool_type;
 296         typedef typename pool_type::joinable joinable;
 297 
 298         pool_type pool(T::pool_size);
 299         vtr_colln_t v;
 300         auto const &context=pool<<joinable()<<pool.accumulate(v, 1, std::multiplies<typename vtr_colln_t::value_type>());
 301         pool.min_time(vtr_colln_t::memory_access_mode);
 302         pool.min_processors(vtr_colln_t::memory_access_mode);
 303         BOOST_CHECK_EQUAL(*context, 1);
 304         BOOST_CHECK_EQUAL(v.empty(), true);
 305         BOOST_CHECK_EQUAL(pool.min_time(context), 0U);
 306         BOOST_CHECK_EQUAL(pool.min_processors(context), 0U);
 307 }
 308 
 309 BOOST_AUTO_TEST_SUITE_END()
 310 
 311 BOOST_AUTO_TEST_SUITE(nonempty_colln)
 312 
 313 BOOST_AUTO_TEST_SUITE(one_element)
 314 
 315 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate, T, finite_test_types) {
 316         typedef typename T::vtr_colln_t vtr_colln_t;
 317         typedef typename T::pool_type pool_type;
 318         typedef typename pool_type::joinable joinable;
 319 
 320         pool_type pool(T::pool_size);
 321         vtr_colln_t v;
 322         v.push_back(1);
 323         auto const &context=pool<<joinable()<<pool.accumulate(v, typename vtr_colln_t::value_type());
 324         pool.min_time(vtr_colln_t::memory_access_mode);
 325         pool.min_processors(vtr_colln_t::memory_access_mode);
 326         BOOST_CHECK_EQUAL(*context, 1);
 327         BOOST_CHECK_EQUAL(v.size(), 1U);
 328 }
 329 
 330 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate_op, T, finite_test_types) {
 331         typedef typename T::vtr_colln_t vtr_colln_t;
 332         typedef typename T::pool_type pool_type;
 333         typedef typename pool_type::joinable joinable;
 334 
 335         pool_type pool(T::pool_size);
 336         vtr_colln_t v;
 337         v.push_back(1);
 338         auto const &context=pool<<joinable()<<pool.accumulate(v, 1, std::multiplies<typename vtr_colln_t::value_type>());
 339         pool.min_time(vtr_colln_t::memory_access_mode);
 340         pool.min_processors(vtr_colln_t::memory_access_mode);
 341         BOOST_CHECK_EQUAL(*context, 1);
 342         BOOST_CHECK_EQUAL(v.size(), 1U);
 343 }
 344 
 345 BOOST_AUTO_TEST_SUITE_END()
 346 
 347 BOOST_AUTO_TEST_SUITE(two_elements)
 348 
 349 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate, T, finite_test_types) {
 350         typedef typename T::vtr_colln_t vtr_colln_t;
 351         typedef typename T::pool_type pool_type;
 352         typedef typename pool_type::joinable joinable;
 353 
 354         pool_type pool(T::pool_size);
 355         vtr_colln_t v;
 356         v.push_back(1);
 357         v.push_back(2);
 358         auto const &context=pool<<joinable()<<pool.accumulate(v, typename vtr_colln_t::value_type());
 359         pool.min_time(vtr_colln_t::memory_access_mode);
 360         pool.min_processors(vtr_colln_t::memory_access_mode);
 361         BOOST_CHECK_EQUAL(*context, 3);
 362         BOOST_CHECK_EQUAL(v.size(), 2U);
 363 }
 364 
 365 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate_op, T, finite_test_types) {
 366         typedef typename T::vtr_colln_t vtr_colln_t;
 367         typedef typename T::pool_type pool_type;
 368         typedef typename pool_type::joinable joinable;
 369 
 370         pool_type pool(T::pool_size);
 371         vtr_colln_t v;
 372         v.push_back(1);
 373         v.push_back(2);
 374         auto const &context=pool<<joinable()<<pool.accumulate(v, 1, std::multiplies<typename vtr_colln_t::value_type>());
 375         pool.min_time(vtr_colln_t::memory_access_mode);
 376         pool.min_processors(vtr_colln_t::memory_access_mode);
 377         BOOST_CHECK_EQUAL(*context, 2);
 378         BOOST_CHECK_EQUAL(v.size(), 2U);
 379 }
 380 
 381 BOOST_AUTO_TEST_SUITE_END()
 382 
 383 BOOST_AUTO_TEST_SUITE(n_elements)
 384 
 385 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate, T, finite_test_types) {
 386         typedef typename T::vtr_colln_t vtr_colln_t;
 387         typedef typename T::pool_type pool_type;
 388         typedef typename pool_type::joinable joinable;
 389 
 390         pool_type pool(T::pool_size);
 391         vtr_colln_t v;
 392         v.push_back(1);
 393         v.push_back(2);
 394         v.push_back(3);
 395         v.push_back(4);
 396         v.push_back(5);
 397         v.push_back(6);
 398         v.push_back(7);
 399         v.push_back(8);
 400         auto const &context=pool<<joinable()<<pool.accumulate(v, typename vtr_colln_t::value_type());
 401         pool.min_time(vtr_colln_t::memory_access_mode);
 402         pool.min_processors(vtr_colln_t::memory_access_mode);
 403         BOOST_CHECK_EQUAL(*context, 36);
 404         BOOST_CHECK_EQUAL(v.size(), 8U);
 405 }
 406 
 407 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate_op, T, finite_test_types) {
 408         typedef typename T::vtr_colln_t vtr_colln_t;
 409         typedef typename T::pool_type pool_type;
 410         typedef typename pool_type::joinable joinable;
 411 
 412         pool_type pool(T::pool_size);
 413         vtr_colln_t v;
 414         v.push_back(1);
 415         v.push_back(2);
 416         v.push_back(3);
 417         v.push_back(4);
 418         v.push_back(5);
 419         v.push_back(6);
 420         v.push_back(7);
 421         v.push_back(8);
 422         auto const &context=pool<<joinable()<<pool.accumulate(v, 1, std::multiplies<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);
 425         BOOST_CHECK_EQUAL(*context, 40320);
 426         BOOST_CHECK_EQUAL(v.size(), 8U);
 427 }
 428 
 429 BOOST_AUTO_TEST_SUITE_END()
 430 
 431 BOOST_AUTO_TEST_SUITE_END()
 432 
 433 BOOST_AUTO_TEST_SUITE_END()
 434 
 435 BOOST_AUTO_TEST_SUITE(infinite)
 436 
 437 BOOST_AUTO_TEST_SUITE(empty_colln)
 438 
 439 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate, T, infinite_test_types) {
 440         typedef typename T::vtr_colln_t vtr_colln_t;
 441         typedef typename T::pool_type pool_type;
 442         typedef typename pool_type::joinable joinable;
 443 
 444         pool_type pool;
 445         vtr_colln_t v;
 446         auto const &context=pool<<joinable()<<pool.accumulate(v, typename vtr_colln_t::value_type());
 447         pool.min_time(vtr_colln_t::memory_access_mode);
 448         pool.min_processors(vtr_colln_t::memory_access_mode);
 449         BOOST_CHECK_EQUAL(*context, 0);
 450         BOOST_CHECK_EQUAL(v.empty(), true);
 451         BOOST_CHECK_EQUAL(pool.min_time(context), 0U);
 452         BOOST_CHECK_EQUAL(pool.min_processors(context), 0U);
 453 }
 454 
 455 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate_op, T, infinite_test_types) {
 456         typedef typename T::vtr_colln_t vtr_colln_t;
 457         typedef typename T::pool_type pool_type;
 458         typedef typename pool_type::joinable joinable;
 459 
 460         pool_type pool;
 461         vtr_colln_t v;
 462         auto const &context=pool<<joinable()<<pool.accumulate(v, 1, std::multiplies<typename vtr_colln_t::value_type>());
 463         pool.min_time(vtr_colln_t::memory_access_mode);
 464         pool.min_processors(vtr_colln_t::memory_access_mode);
 465         BOOST_CHECK_EQUAL(*context, 1);
 466         BOOST_CHECK_EQUAL(v.empty(), true);
 467         BOOST_CHECK_EQUAL(pool.min_time(context), 0U);
 468         BOOST_CHECK_EQUAL(pool.min_processors(context), 0U);
 469 }
 470 
 471 BOOST_AUTO_TEST_SUITE_END()
 472 
 473 BOOST_AUTO_TEST_SUITE_END()
 474 
 475 BOOST_AUTO_TEST_SUITE(nonempty_colln)
 476 
 477 BOOST_AUTO_TEST_SUITE(one_element)
 478 
 479 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate, T, infinite_test_types) {
 480         typedef typename T::vtr_colln_t vtr_colln_t;
 481         typedef typename T::pool_type pool_type;
 482         typedef typename pool_type::joinable joinable;
 483 
 484         pool_type pool;
 485         vtr_colln_t v;
 486         v.push_back(1);
 487         auto const &context=pool<<joinable()<<pool.accumulate(v, typename vtr_colln_t::value_type());
 488         pool.min_time(vtr_colln_t::memory_access_mode);
 489         pool.min_processors(vtr_colln_t::memory_access_mode);
 490         BOOST_CHECK_EQUAL(*context, 1);
 491         BOOST_CHECK_EQUAL(v.size(), 1U);
 492 }
 493 
 494 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate_op, T, infinite_test_types) {
 495         typedef typename T::vtr_colln_t vtr_colln_t;
 496         typedef typename T::pool_type pool_type;
 497         typedef typename pool_type::joinable joinable;
 498 
 499         pool_type pool;
 500         vtr_colln_t v;
 501         v.push_back(1);
 502         auto const &context=pool<<joinable()<<pool.accumulate(v, 1, std::multiplies<typename vtr_colln_t::value_type>());
 503         pool.min_time(vtr_colln_t::memory_access_mode);
 504         pool.min_processors(vtr_colln_t::memory_access_mode);
 505         BOOST_CHECK_EQUAL(*context, 1);
 506         BOOST_CHECK_EQUAL(v.size(), 1U);
 507 }
 508 
 509 BOOST_AUTO_TEST_SUITE_END()
 510 
 511 BOOST_AUTO_TEST_SUITE(two_elements)
 512 
 513 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate, T, infinite_test_types) {
 514         typedef typename T::vtr_colln_t vtr_colln_t;
 515         typedef typename T::pool_type pool_type;
 516         typedef typename pool_type::joinable joinable;
 517 
 518         pool_type pool;
 519         vtr_colln_t v;
 520         v.push_back(1);
 521         v.push_back(2);
 522         auto const &context=pool<<joinable()<<pool.accumulate(v, typename vtr_colln_t::value_type());
 523         pool.min_time(vtr_colln_t::memory_access_mode);
 524         pool.min_processors(vtr_colln_t::memory_access_mode);
 525         BOOST_CHECK_EQUAL(*context, 3);
 526         BOOST_CHECK_EQUAL(v.size(), 2U);
 527 }
 528 
 529 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate_op, T, infinite_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;
 533 
 534         pool_type pool;
 535         vtr_colln_t v;
 536         v.push_back(1);
 537         v.push_back(2);
 538         auto const &context=pool<<joinable()<<pool.accumulate(v, 1, std::multiplies<typename vtr_colln_t::value_type>());
 539         pool.min_time(vtr_colln_t::memory_access_mode);
 540         pool.min_processors(vtr_colln_t::memory_access_mode);
 541         BOOST_CHECK_EQUAL(*context, 2);
 542         BOOST_CHECK_EQUAL(v.size(), 2U);
 543 }
 544 
 545 BOOST_AUTO_TEST_SUITE_END()
 546 
 547 BOOST_AUTO_TEST_SUITE(n_elements)
 548 
 549 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate, T, infinite_test_types) {
 550         typedef typename T::vtr_colln_t vtr_colln_t;
 551         typedef typename T::pool_type pool_type;
 552         typedef typename pool_type::joinable joinable;
 553 
 554         pool_type pool;
 555         vtr_colln_t v;
 556         v.push_back(1);
 557         v.push_back(2);
 558         v.push_back(3);
 559         v.push_back(4);
 560         v.push_back(5);
 561         v.push_back(6);
 562         v.push_back(7);
 563         v.push_back(8);
 564         auto const &context=pool<<joinable()<<pool.accumulate(v, typename vtr_colln_t::value_type());
 565         pool.min_time(vtr_colln_t::memory_access_mode);
 566         pool.min_processors(vtr_colln_t::memory_access_mode);
 567         BOOST_CHECK_EQUAL(*context, 36);
 568         BOOST_CHECK_EQUAL(v.size(), 8U);
 569 }
 570 
 571 BOOST_AUTO_TEST_CASE_TEMPLATE(accumulate_op, T, infinite_test_types) {
 572         typedef typename T::vtr_colln_t vtr_colln_t;
 573         typedef typename T::pool_type pool_type;
 574         typedef typename pool_type::joinable joinable;
 575 
 576         pool_type pool;
 577         vtr_colln_t v;
 578         v.push_back(1);
 579         v.push_back(2);
 580         v.push_back(3);
 581         v.push_back(4);
 582         v.push_back(5);
 583         v.push_back(6);
 584         v.push_back(7);
 585         v.push_back(8);
 586         auto const &context=pool<<joinable()<<pool.accumulate(v, 1L, std::multiplies<typename vtr_colln_t::value_type>());
 587         pool.min_time(vtr_colln_t::memory_access_mode);
 588         pool.min_processors(vtr_colln_t::memory_access_mode);
 589         BOOST_CHECK_EQUAL(*context, 40320);
 590         BOOST_CHECK_EQUAL(v.size(), 8U);
 591 }
 592 
 593 BOOST_AUTO_TEST_SUITE_END()
 594 
 595 BOOST_AUTO_TEST_SUITE_END()
 596 
 597 BOOST_AUTO_TEST_SUITE_END()
 598 
 599 BOOST_AUTO_TEST_SUITE_END()

/* [<][>][^][v][top][bottom][index][help] */