$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r51670 - in sandbox/interthreads: boost/interthreads libs/interthreads/build libs/interthreads/doc libs/interthreads/example libs/interthreads/test
From: vicente.botet_at_[hidden]
Date: 2009-03-09 17:10:29
Author: viboes
Date: 2009-03-09 17:10:28 EDT (Mon, 09 Mar 2009)
New Revision: 51670
URL: http://svn.boost.org/trac/boost/changeset/51670
Log:
0.4.2 : Adaptation to the Boost.ThreadPool Version 0.23
Text files modified: 
   sandbox/interthreads/boost/interthreads/scheduler.hpp             |    38 +++++++++++++----                       
   sandbox/interthreads/boost/interthreads/wait_for_any.hpp          |    86 +++++++++++++++++++++++++++++++++------ 
   sandbox/interthreads/libs/interthreads/build/Jamfile.v2           |    11 ++--                                    
   sandbox/interthreads/libs/interthreads/doc/changes.qbk            |     7 +++                                     
   sandbox/interthreads/libs/interthreads/example/parallel_sort.cpp  |     2                                         
   sandbox/interthreads/libs/interthreads/example/parallel_sort2.cpp |    54 +++++++++++++++++++++++-                
   sandbox/interthreads/libs/interthreads/test/Jamfile.v2            |     7 +-                                      
   sandbox/interthreads/libs/interthreads/test/test_thread_pool.cpp  |    82 +++++++++++++++++++++++++------------   
   8 files changed, 225 insertions(+), 62 deletions(-)
Modified: sandbox/interthreads/boost/interthreads/scheduler.hpp
==============================================================================
--- sandbox/interthreads/boost/interthreads/scheduler.hpp	(original)
+++ sandbox/interthreads/boost/interthreads/scheduler.hpp	2009-03-09 17:10:28 EDT (Mon, 09 Mar 2009)
@@ -112,14 +112,18 @@
 template <typename C>
 struct get_future<tp::pool<C> > {
     template <typename T>
-    shared_future<T>& operator()(
+    struct future_type {
+        typedef shared_future<T> type;
+    };
+    template <typename T>
+    shared_future<T> operator()(
 #ifdef TASK_POOL
         //typename asynchronous_completion_token<tp::pool<C>,T>::type & act
         tp::task<tp::pool<C>, T>& act
 #else
         tp::task<T>& act
 #endif
-    ) { return act.get_future(); }
+    ) { return act.result(); }
 };
 
 #ifdef TASK_POOL
@@ -154,31 +158,33 @@
 
 #ifdef TASK_POOL
 
+    
+    
     namespace partial_specialization_workaround {
         template <typename Pool, typename R, typename Duration>
         struct wait_until<tp::task<Pool, R> > {
             static typename result_of::template wait_until<tp::task<Pool, R> >::type apply( tp::task<Pool, R>& act, const system_time& abs_time ) {
-                return act.timed_wait_until(abs_time);
+                return act.result().timed_wait_until(abs_time);
             }
         };
         template <typename Pool, typename R, typename Duration>
         struct wait_for<tp::task<Pool, R>, Duration> {
             static typename result_of::template wait_for<tp::task<Pool, R>,Duration>::type 
             apply( tp::task<Pool, R>& act, Duration rel_time ) {
-                return act.timed_wait(rel_time);
+                return act.result().timed_wait(rel_time);
             }
         };
         
         template <typename Pool, typename R>
         struct join<tp::task<Pool, R> > {
             static typename result_of::template join<tp::task<Pool, R> >::type apply( tp::task<Pool, R>& act) {
-                return act.wait();
+                return act.result().wait();
             }
         };
         template <typename Pool, typename R>
         struct join_until<tp::task<Pool, R> > {
             static typename result_of::template join_until<tp::task<Pool, R> >::type apply( tp::task<Pool, R>& act, const system_time& abs_time ) {
-                return act.wait_until(abs_time);
+                return act.result().wait_until(abs_time);
             }
         };
         template <typename Pool, typename R, typename Duration>
@@ -190,16 +196,23 @@
         template< typename Pool, typename R >
         struct interruption_requested<tp::task<Pool, R> > {
             static typename result_of::template interruption_requested<tp::task<Pool, R> >::type apply( tp::task<Pool, R>& act ) {
-                return act.interrupt_requested();
+                return act.interruption_requested();
             }
         };
     }
 #else
     namespace partial_specialization_workaround {
+        template< typename R >
+        struct wait<tp::task<R> > {
+            static typename result_of::template wait<tp::task<R> >::type apply( tp::task<R>& act ) {
+                return act.result().wait();
+            }
+        };
+
         template <typename R>
         struct wait_until<tp::task<R> > {
             static typename result_of::template wait_until<tp::task<R> >::type apply( tp::task<R>& act, const system_time& abs_time ) {
-                return act.timed_wait_until(abs_time);
+                return act.result().timed_wait_until(abs_time);
             }
         };
         template <typename R, typename Duration>
@@ -209,6 +222,13 @@
             }
         };
         
+        template <typename R> 
+        struct get<tp::task<R> > {
+            static typename result_of::template get<tp::task<R> >::type apply( tp::task<R>& act ) {
+                return act.result().get();
+            }
+        };
+
         template <typename R>
         struct join<tp::task<R> > {
             static typename result_of::template join<tp::task<R> >::type apply( tp::task<R>& act) {
@@ -230,7 +250,7 @@
         template< typename R >
         struct interruption_requested<tp::task<R> > {
             static typename result_of::template interruption_requested<tp::task<R> >::type apply( tp::task<R>& act ) {
-                return act.interrupt_requested();
+                return act.interruption_requested();
             }
         };
     }
Modified: sandbox/interthreads/boost/interthreads/wait_for_any.hpp
==============================================================================
--- sandbox/interthreads/boost/interthreads/wait_for_any.hpp	(original)
+++ sandbox/interthreads/boost/interthreads/wait_for_any.hpp	2009-03-09 17:10:28 EDT (Mon, 09 Mar 2009)
@@ -14,10 +14,12 @@
 
 #include <boost/interthreads/algorithm/interrupt_all.hpp>
 #include <boost/interthreads/algorithm/wait_all.hpp>
+#include <boost/interthreads/algorithm/get.hpp>
 #include <boost/interthreads/fork_all.hpp>
 #include <boost/fusion/include/tuple.hpp>
 #include <boost/futures/future.hpp>
 #include <boost/utility/result_of.hpp>
+#include <boost/type_traits/remove_reference.hpp>
 #include <exception>
 
 #include <boost/config/abi_prefix.hpp>
@@ -53,9 +55,9 @@
         static T get(unsigned r, H &handles) {
             switch (r) {
             case 0:
-                return fusion::at_c<0>(handles).get();
+                return interthreads::get(fusion::at_c<0>(handles));
             case 1:
-                return fusion::at_c<1>(handles).get();
+                return interthreads::get(fusion::at_c<1>(handles));
             default:
                 throw std::range_error("");
             }
@@ -73,11 +75,11 @@
         static T get(unsigned r, H &handles) {
             switch (r) {
             case 0:
-                return fusion::at_c<0>(handles).get();
+                return interthreads::get(fusion::at_c<0>(handles));
             case 1:
-                return fusion::at_c<1>(handles).get();
+                return interthreads::get(fusion::at_c<1>(handles));
             case 2:
-                return fusion::at_c<2>(handles).get();
+                return interthreads::get(fusion::at_c<2>(handles));
             default:
                 throw std::range_error("");
             }
@@ -119,8 +121,20 @@
 template< typename AE, typename F1, typename F2>
 typename result_of::wait_for_any<AE, fusion::tuple<F1,F2> >::type
 wait_for_any( AE& ae, F1 f1, F2 f2 ) {
-    typename result_of::fork_all<AE, fusion::tuple<F1,F2> >::type handles=fork_all(ae, f1, f2);
-    unsigned r = boost::wait_for_any(get_future<AE>()(fusion::at_c<0>(handles)), get_future<AE>()(fusion::at_c<1>(handles)));
+    typedef typename result_of::fork_all<AE, fusion::tuple<F1,F2> >::type handles_type;
+    handles_type handles=fork_all(ae, f1, f2);
+    //unsigned r = boost::wait_for_any(get_future<AE>()(fusion::at_c<0>(handles)), get_future<AE>()(fusion::at_c<1>(handles)));
+    typename get_future<AE>::template future_type<
+        typename act_traits< typename remove_reference<
+            typename fusion::result_of::at_c<handles_type,0>::type
+        >::type >::move_dest_type
+    >::type fut0= get_future<AE>()(fusion::at_c<0>(handles));
+    typename get_future<AE>::template future_type<
+        typename act_traits< typename remove_reference<
+            typename fusion::result_of::at_c<handles_type,1>::type
+        >::type >::move_dest_type
+    >::type fut1= get_future<AE>()(fusion::at_c<1>(handles));
+    unsigned r = boost::wait_for_any(fut0, fut1);
     //std::cout << "boost::wait_for_any=" << r << std::endl;
     typename result_of::wait_for_any<AE, fusion::tuple<F1,F2> >::type res =
         detail::partial<2,typename boost::result_of<F1()>::type >::make(r,handles);
@@ -133,8 +147,25 @@
 template< typename AE, typename F1, typename F2, typename F3>
 typename result_of::wait_for_any<AE, fusion::tuple<F1,F2,F3> >::type
 wait_for_any( AE& ae, F1 f1, F2 f2 , F3 f3 ) {
-    typename result_of::fork_all<AE, fusion::tuple<F1,F2,F3> >::type handles=fork_all(ae, f1, f2, f3);
-    unsigned r = boost::wait_for_any(get_future<AE>()(fusion::at_c<0>(handles)), get_future<AE>()(fusion::at_c<1>(handles)), get_future<AE>()(fusion::at_c<2>(handles)));
+    typedef typename result_of::fork_all<AE, fusion::tuple<F1,F2,F3> >::type handles_type;
+    handles_type handles=fork_all(ae, f1, f2, f3);
+    //unsigned r = boost::wait_for_any(get_future<AE>()(fusion::at_c<0>(handles)), get_future<AE>()(fusion::at_c<1>(handles)), get_future<AE>()(fusion::at_c<2>(handles)));
+    typename get_future<AE>::template future_type<
+        typename act_traits< typename remove_reference<
+            typename fusion::result_of::at_c<handles_type,0>::type
+        >::type >::move_dest_type
+    >::type fut0= get_future<AE>()(fusion::at_c<0>(handles));
+    typename get_future<AE>::template future_type<
+        typename act_traits<  typename remove_reference<
+            typename fusion::result_of::at_c<handles_type,1>::type
+        >::type >::move_dest_type
+    >::type fut1= get_future<AE>()(fusion::at_c<1>(handles));
+    typename get_future<AE>::template future_type<
+        typename act_traits< typename remove_reference<
+            typename fusion::result_of::at_c<handles_type,2>::type
+        >::type >::move_dest_type
+    >::type fut2= get_future<AE>()(fusion::at_c<2>(handles));
+    unsigned r = boost::wait_for_any(fut0, fut1, fut2);
     typename result_of::wait_for_any<AE, fusion::tuple<F1,F2,F3> >::type res =
         detail::partial<3, typename boost::result_of<F1()>::type >::make(r,handles);
     //interrupt_all(handles);
@@ -144,8 +175,20 @@
 template< typename AE, typename F1, typename F2>
 typename result_of::wait_for_any<AE, fusion::tuple<F1,F2> >::type
 wait_for_any_and_interrupt( AE& ae, F1 f1, F2 f2 ) {
-    typename result_of::fork_all<AE, fusion::tuple<F1,F2> >::type handles=fork_all(ae, f1, f2);
-    unsigned r = boost::wait_for_any(get_future<AE>()(fusion::at_c<0>(handles)), get_future<AE>()(fusion::at_c<1>(handles)));
+    typedef typename result_of::fork_all<AE, fusion::tuple<F1,F2> >::type handles_type;
+    handles_type handles=fork_all(ae, f1, f2);
+    //unsigned r = boost::wait_for_any(get_future<AE>()(fusion::at_c<0>(handles)), get_future<AE>()(fusion::at_c<1>(handles)));
+    typename get_future<AE>::template future_type<
+        typename act_traits< typename remove_reference<
+            typename fusion::result_of::at_c<handles_type,0>::type
+        >::type >::move_dest_type
+    >::type fut0= get_future<AE>()(fusion::at_c<0>(handles));
+    typename get_future<AE>::template future_type<
+        typename act_traits< typename remove_reference<
+            typename fusion::result_of::at_c<handles_type,1>::type
+        >::type >::move_dest_type
+    >::type fut1= get_future<AE>()(fusion::at_c<1>(handles));
+    unsigned r = boost::wait_for_any(fut0, fut1);
     std::cout << "boost::wait_for_any=" << r << std::endl;
     typename result_of::wait_for_any<AE, fusion::tuple<F1,F2> >::type res =
         detail::partial<2,typename boost::result_of<F1()>::type >::make(r,handles);
@@ -157,8 +200,25 @@
 template< typename AE, typename F1, typename F2, typename F3>
 typename result_of::wait_for_any<AE, fusion::tuple<F1,F2,F3> >::type
 wait_for_any_and_interrupt( AE& ae, F1 f1, F2 f2 , F3 f3 ) {
-    typename result_of::fork_all<AE, fusion::tuple<F1,F2,F3> >::type handles=fork_all(ae, f1, f2, f3);
-    unsigned r = boost::wait_for_any(get_future<AE>()(fusion::at_c<0>(handles)), get_future<AE>()(fusion::at_c<1>(handles)), get_future<AE>()(fusion::at_c<2>(handles)));
+    typedef typename result_of::fork_all<AE, fusion::tuple<F1,F2,F3> >::type handles_type;
+    handles_type handles=fork_all(ae, f1, f2, f3);
+    //unsigned r = boost::wait_for_any(get_future<AE>()(fusion::at_c<0>(handles)), get_future<AE>()(fusion::at_c<1>(handles)), get_future<AE>()(fusion::at_c<2>(handles)));
+    typename get_future<AE>::template future_type<
+        typename act_traits< typename remove_reference<
+            typename fusion::result_of::at_c<handles_type,0>::type
+        >::type >::move_dest_type
+    >::type fut0= get_future<AE>()(fusion::at_c<0>(handles));
+    typename get_future<AE>::template future_type<
+        typename act_traits< typename remove_reference<
+            typename fusion::result_of::at_c<handles_type,1>::type
+        >::type >::move_dest_type
+    >::type fut1= get_future<AE>()(fusion::at_c<1>(handles));
+    typename get_future<AE>::template future_type<
+        typename act_traits< typename remove_reference<
+            typename fusion::result_of::at_c<handles_type,2>::type
+        >::type >::move_dest_type
+    >::type fut2= get_future<AE>()(fusion::at_c<2>(handles));
+    unsigned r = boost::wait_for_any(fut0, fut1, fut2);
     typename result_of::wait_for_any<AE, fusion::tuple<F1,F2,F3> >::type res =
         detail::partial<3, typename boost::result_of<F1()>::type >::make(r,handles);
     interrupt_all(handles);
Modified: sandbox/interthreads/libs/interthreads/build/Jamfile.v2
==============================================================================
--- sandbox/interthreads/libs/interthreads/build/Jamfile.v2	(original)
+++ sandbox/interthreads/libs/interthreads/build/Jamfile.v2	2009-03-09 17:10:28 EDT (Mon, 09 Mar 2009)
@@ -38,11 +38,12 @@
 
 project boost/interthreads
     : source-location ../src
-    : requirements <threading>multi
-#      <target-os>cygwin
-#      <interthreadapi>pthread
-      <variant>debug
-#      <define>BOOST_THREAD_HAS_THREAD_ATTR
+    : requirements 
+        <threading>multi
+#       <target-os>cygwin
+#       <interthreadapi>pthread
+        <variant>debug
+#       <define>BOOST_THREAD_HAS_THREAD_ATTR
     
       <include>../../..
       <include>../../../../../boost_1_38_0
Modified: sandbox/interthreads/libs/interthreads/doc/changes.qbk
==============================================================================
--- sandbox/interthreads/libs/interthreads/doc/changes.qbk	(original)
+++ sandbox/interthreads/libs/interthreads/doc/changes.qbk	2009-03-09 17:10:28 EDT (Mon, 09 Mar 2009)
@@ -7,6 +7,13 @@
 
 [section:changes  Appendix A: History]
 
+[section [*Version 0.4.2, Mars 9, 2009] Adaptation to the Boost.ThreadPoold Version 0.23]
+
+[*New Features:]
+
+* Adaptation to the Boost.ThreadPoold Version 0.21
+
+[endsect]
 [section [*Version 0.4.1, Mars 1, 2009] Adaptation to the Boost.ThreadPoold Version 0.21 + Scoped forking + Parallel sort]
 
 [*New Features:]
Modified: sandbox/interthreads/libs/interthreads/example/parallel_sort.cpp
==============================================================================
--- sandbox/interthreads/libs/interthreads/example/parallel_sort.cpp	(original)
+++ sandbox/interthreads/libs/interthreads/example/parallel_sort.cpp	2009-03-09 17:10:28 EDT (Mon, 09 Mar 2009)
@@ -103,7 +103,7 @@
         }
         inplace_solve<DirectSolver,Composer,AE,Range>(ae, parts[BOOST_PARTS-1], cutoff);
         for (unsigned i=0;i < BOOST_PARTS-1; ++i) {
-            tasks[i].wait();
+            tasks[i].result().wait();
         };
         
         Composer()(range);
Modified: sandbox/interthreads/libs/interthreads/example/parallel_sort2.cpp
==============================================================================
--- sandbox/interthreads/libs/interthreads/example/parallel_sort2.cpp	(original)
+++ sandbox/interthreads/libs/interthreads/example/parallel_sort2.cpp	2009-03-09 17:10:28 EDT (Mon, 09 Mar 2009)
@@ -34,6 +34,36 @@
 
 #include <assert.h>
 
+#include <boost/range/algorithm/count.hpp>
+
+#if 0
+
+struct A {
+    int x;
+    int y;
+};
+
+namespace boost {
+    //template <typename T>
+    unsigned count(A& t, const int& i) {
+        return 2;
+    }
+}
+
+
+unsigned xx() {
+    A a;
+    return boost::count(a, 1);
+}
+
+int main() {
+    std::cout << xx() << std::endl; 
+        
+}
+
+#else
+
+#define BOOST_NB_OF_THREADS 4
 #define BOOST_PARTS 2
 #define NN 400000
 
@@ -126,7 +156,21 @@
         boost::for_each(tasks, &boost::interthreads::wait_act<task_type>);
         
         //std::cout << "par_inplace_merge_fct " << size << ">>"<< std::endl;  
+        #if BOOST_PARTS == 4
+        partition<Range> sorted(range, BOOST_PARTS/2);
+        Composer composer;
+        for (unsigned i=0;i < BOOST_PARTS-1; ++i) {
+            task_type tmp(ae.submit(
+                boost::bind(
+                    composer,
+                    parts[i]
+            )));
+            tasks.push_back(tmp);
+        }
+        boost::for_each(tasks, &boost::interthreads::wait_act<task_type>);
+        #endif
         Composer()(range);
+
         //std::cout << "par_ " << size << ">>"<< std::endl;  
         
     }
@@ -190,7 +234,7 @@
     }
 
     // creates a threadpool with two worker-threads
-    pool_type pool( boost::tp::poolsize( 2) );
+    pool_type pool( boost::tp::poolsize(BOOST_NB_OF_THREADS) );
 
     for (unsigned i=0; i<NN; ++i) values5[i]=NN-i-1;
     {
@@ -244,6 +288,7 @@
     parallel_sort(pool, values5, NN/16);
     }   
 
+#if 0
     for (unsigned i=0; i<NN; ++i) values5[i]=NN-i-1;
     {
     std::cout << "parallel_sort "<<NN/32<<":  reverse 0.."<<NN;
@@ -256,10 +301,11 @@
     scoped_timer tmr;  // start timing
     parallel_sort(pool, values5, NN/32);
     }   
-
+#endif
     
-    std::cout << "shutdown"<< std::endl;
-    pool.shutdown();
+    //std::cout << "shutdown"<< std::endl;
+    //pool.shutdown();
     std::cout << "end"<< std::endl;
     return 0;
 }
+#endif
Modified: sandbox/interthreads/libs/interthreads/test/Jamfile.v2
==============================================================================
--- sandbox/interthreads/libs/interthreads/test/Jamfile.v2	(original)
+++ sandbox/interthreads/libs/interthreads/test/Jamfile.v2	2009-03-09 17:10:28 EDT (Mon, 09 Mar 2009)
@@ -23,17 +23,17 @@
     : requirements
 #       <library>/boost/test//boost_unit_test_framework/<link>static
 #       <library>/boost/thread//boost_thread/<link>static
-#       <library>$BOOST_ROOT/libs/test/build//boost_unit_test_framework/<link>static
         <library>../../../../../boost_1_38_0/libs/test/build//boost_unit_test_framework/<link>static
         <library>../build//boost_interthreads/<link>static
+        <library>../../tp/build//boost_threadpool/<link>static
         <library>../../../../../boost_1_38_0/libs/thread/build//boost_thread/<link>static
 
         <include>.
         <include>../../..
         <include>../../../../../boost_1_38_0
         <threading>multi
-#        <target-os>cygwin
-#        <interthreadapi>pthread
+#       <target-os>cygwin
+#       <interthreadapi>pthread
         <variant>debug
 #       <define>BOOST_THREAD_HAS_THREAD_ATTR
 
@@ -69,6 +69,7 @@
           [ interthreads-run ../example/multiple_algorithms.cpp ]
           [ interthreads-run ../example/parallel_sort.cpp ]
           [ interthreads-run ../example/parallel_sort2.cpp ]
+#          [ interthreads-run parallel_sort.cpp ]
 
 
     ;
Modified: sandbox/interthreads/libs/interthreads/test/test_thread_pool.cpp
==============================================================================
--- sandbox/interthreads/libs/interthreads/test/test_thread_pool.cpp	(original)
+++ sandbox/interthreads/libs/interthreads/test/test_thread_pool.cpp	2009-03-09 17:10:28 EDT (Mon, 09 Mar 2009)
@@ -19,6 +19,7 @@
 
 #include <boost/tp/unbounded_channel.hpp>
 #include <boost/tp/fifo.hpp>
+#include <boost/tp/default_pool.hpp>
 
 
 using namespace boost::unit_test;
@@ -32,9 +33,10 @@
   boost::tp::unbounded_channel< boost::tp::fifo >
 > pool_type;
 #else
-typedef boost::tp::pool<
-  boost::tp::unbounded_channel< boost::tp::fifo >
-> pool_type;
+//typedef boost::tp::pool<
+//  boost::tp::unbounded_channel< boost::tp::fifo >
+//> pool_type;
+typedef boost::tp::default_pool& pool_type;
 #endif
 
 #if 0
@@ -54,123 +56,147 @@
 }
 #endif
 void do_test_fork() {
-    pool_type ae(boost::tp::poolsize(2));
+    //pool_type ae(boost::tp::poolsize(2));
+    pool_type ae(boost::tp::get_default_pool());
     aetst::do_test_fork(ae);
 }
 
 void do_test_fork_1() {   
-    pool_type ae(boost::tp::poolsize(2));
+    //pool_type ae(boost::tp::poolsize(2));
+    pool_type ae(boost::tp::get_default_pool());
     aetst::do_test_fork_1(ae);
 }
 
 void do_test_creation_through_reference_wrapper()
 {
-    pool_type ae(boost::tp::poolsize(2));
+    //pool_type ae(boost::tp::poolsize(2));
+    pool_type ae(boost::tp::get_default_pool());
     aetst::do_test_creation_through_reference_wrapper(ae);
 }
 
 void do_test_creation_through_functor()
 {
-    pool_type ae(boost::tp::poolsize(2));
+    //pool_type ae(boost::tp::poolsize(2));
+    pool_type ae(boost::tp::get_default_pool());
     aetst::do_test_creation_through_functor(ae);
 }
 void do_test_wait() {
-    pool_type ae(boost::tp::poolsize(2));
+    //pool_type ae(boost::tp::poolsize(2));
+    pool_type ae(boost::tp::get_default_pool());
     aetst::do_test_wait(ae);
 }
 
 void do_test_wait_until() {
-    pool_type ae(boost::tp::poolsize(2));
+    //pool_type ae(boost::tp::poolsize(2));
+    pool_type ae(boost::tp::get_default_pool());
     aetst::do_test_wait_until(ae);
 }
 
 void do_test_wait_for() {
-    pool_type ae(boost::tp::poolsize(2));
+    //pool_type ae(boost::tp::poolsize(2));
+    pool_type ae(boost::tp::get_default_pool());
     aetst::do_test_wait_for(ae);
 }
 
 void do_test_join() {
-    pool_type ae(boost::tp::poolsize(2));
+    //pool_type ae(boost::tp::poolsize(2));
+    pool_type ae(boost::tp::get_default_pool());
     aetst::do_test_join(ae);
 }
 
 void do_test_join_until() {
-    pool_type ae(boost::tp::poolsize(2));
+    //pool_type ae(boost::tp::poolsize(2));
+    pool_type ae(boost::tp::get_default_pool());
     aetst::do_test_join_until(ae);
 }
 
 void do_test_join_for() {
-    pool_type ae(boost::tp::poolsize(2));
+    //pool_type ae(boost::tp::poolsize(2));
+    pool_type ae(boost::tp::get_default_pool());
     aetst::do_test_join_for(ae);
 }
 
 void do_test_join_all() {
-    pool_type ae(boost::tp::poolsize(2));
+    //pool_type ae(boost::tp::poolsize(2));
+    pool_type ae(boost::tp::get_default_pool());
     aetst::do_test_join_all(ae);
 }
 
 void do_test_join_all_until() {
-    pool_type ae(boost::tp::poolsize(2));
+    //pool_type ae(boost::tp::poolsize(2));
+    pool_type ae(boost::tp::get_default_pool());
     aetst::do_test_join_all_until(ae);
 }
 
 void do_test_join_all_for() {
-    pool_type ae(boost::tp::poolsize(2));
+    //pool_type ae(boost::tp::poolsize(2));
+    pool_type ae(boost::tp::get_default_pool());
     aetst::do_test_join_all_for(ae);
 }
 
 void do_test_thread_interrupts_at_interruption_point() {
-    pool_type ae(boost::tp::poolsize(2));
+    //pool_type ae(boost::tp::poolsize(2));
+    pool_type ae(boost::tp::get_default_pool());
     aetst::do_test_thread_interrupts_at_interruption_point_m(ae);
 }
 
 void do_test_wait_all() {
-    pool_type ae(boost::tp::poolsize(2));
+    //pool_type ae(boost::tp::poolsize(2));
+    pool_type ae(boost::tp::get_default_pool());
     aetst::do_test_wait_all(ae);
 }
 
 void do_test_wait_all_until() {
-    pool_type ae(boost::tp::poolsize(2));
+    //pool_type ae(boost::tp::poolsize(2));
+    pool_type ae(boost::tp::get_default_pool());
     aetst::do_test_wait_all_until(ae);
 }
 
 void do_test_wait_all_for() {
-    pool_type ae(boost::tp::poolsize(2));
+    //pool_type ae(boost::tp::poolsize(2));
+    pool_type ae(boost::tp::get_default_pool());
     aetst::do_test_wait_all_for(ae);
 }
 
 void do_test_wait_for_any() {
-    pool_type ae(boost::tp::poolsize(2));
+    //pool_type ae(boost::tp::poolsize(2));
+    pool_type ae(boost::tp::get_default_pool());
     aetst::do_test_wait_for_any(ae);
 }
 
 void do_test_set_all() {
-    pool_type ae(boost::tp::poolsize(2));
+    //pool_type ae(boost::tp::poolsize(2));
+    pool_type ae(boost::tp::get_default_pool());
     aetst::do_test_set_all(ae);
 }
 
 void do_test_get() {
-    pool_type ae(boost::tp::poolsize(2));
+    //pool_type ae(boost::tp::poolsize(2));
+    pool_type ae(boost::tp::get_default_pool());
     aetst::do_test_get(ae);
 }
 
 
 void do_test_get_all() {
-    pool_type ae(boost::tp::poolsize(2));
+    //pool_type ae(boost::tp::poolsize(2));
+    pool_type ae(boost::tp::get_default_pool());
     aetst::do_test_set_all(ae);
 }
 
 void do_test_wait_for_all() {
-    pool_type ae(boost::tp::poolsize(2));
+    //pool_type ae(boost::tp::poolsize(2));
+    pool_type ae(boost::tp::get_default_pool());
     aetst::do_test_wait_for_all(ae);
 }
 #if 0
 void do_test_fork_after_wait() {
-    pool_type ae(boost::tp::poolsize(2));
+    //pool_type ae(boost::tp::poolsize(2));
+    pool_type ae(boost::tp::get_default_pool());
     aetst::do_test_fork_after_wait(ae);
 }
 void do_test_fork_after_get() {
-    pool_type ae(boost::tp::poolsize(2));
+    //pool_type ae(boost::tp::poolsize(2));
+    pool_type ae(boost::tp::get_default_pool());
     aetst::do_test_fork_after_get(ae);
 }
 #endif
@@ -188,7 +214,9 @@
     test->add(BOOST_TEST_CASE(&do_test_fork_1));
     test->add(BOOST_TEST_CASE(&do_test_thread_interrupts_at_interruption_point));
     test->add(BOOST_TEST_CASE(&do_test_creation_through_functor));
+#if 0     // DO NOT WORK YET
     test->add(BOOST_TEST_CASE(&do_test_creation_through_reference_wrapper));
+#endif
 
     test->add(BOOST_TEST_CASE(&do_test_get));
     test->add(BOOST_TEST_CASE(&do_test_wait));