$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r56976 - in sandbox/task: boost/task libs/task/test
From: oliver.kowalke_at_[hidden]
Date: 2009-10-18 06:21:43
Author: olli
Date: 2009-10-18 06:21:43 EDT (Sun, 18 Oct 2009)
New Revision: 56976
URL: http://svn.boost.org/trac/boost/changeset/56976
Log:
- support for dispatching fibers to other threads than it was created removed
Removed:
   sandbox/task/boost/task/distrib_rr_ums.hpp
   sandbox/task/libs/task/test/test_unbounded_onelock_pool_distrib.cpp
Text files modified: 
   sandbox/task/libs/task/test/Jamfile.v2 |     1 -                                       
   1 files changed, 0 insertions(+), 1 deletions(-)
Deleted: sandbox/task/boost/task/distrib_rr_ums.hpp
==============================================================================
--- sandbox/task/boost/task/distrib_rr_ums.hpp	2009-10-18 06:21:43 EDT (Sun, 18 Oct 2009)
+++ (empty file)
@@ -1,175 +0,0 @@
-
-//          Copyright Oliver Kowalke 2009.
-// Distributed under the Boost Software License, Version 1.0.
-//    (See accompanying file LICENSE_1_0.txt or copy at
-//          http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_TASK_DISTRIB_RR_UMS_H
-#define BOOST_TASK_DISTRIB_RR_UMS_H
-
-#include <list>
-
-#include <boost/assert.hpp>
-#include <boost/cstdint.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/thread.hpp>
-
-#include <boost/task/detail/atomic.hpp>
-#include <boost/task/detail/fiber.hpp>
-
-#include <boost/config/abi_prefix.hpp>
-
-namespace boost {
-namespace task {
-
-class distrib_rr_ums
-{
-private:
-//	class twolock_fifo
-//	{
-//		struct node
-//		{
-//			typedef shared_ptr< node >	sptr_t;
-//	
-//			detail::fiber::sptr_t	fib;
-//			sptr_t					next;
-//		};
-//	
-//		node::sptr_t		head_;
-//		mutex				head_mtx_;
-//		node::sptr_t		tail_;
-//		mutex				tail_mtx_;
-//	
-//		bool empty_()
-//		{ return head_ == get_tail_(); }
-//	
-//		node::sptr_t get_tail_()
-//		{
-//			lock_guard< mutex > lk( tail_mtx_);	
-//			node::sptr_t tmp = tail_;
-//			return tmp;
-//		}
-//	
-//		node::sptr_t pop_head_()
-//		{
-//			node::sptr_t old_head = head_;
-//			head_ = old_head->next;
-//			return old_head;
-//		}
-//	
-//	public:
-//		twolock_fifo() :
-//			head_( new node),
-//			head_mtx_(),
-//			tail_( head_),
-//			tail_mtx_()
-//		{}
-//	
-//		bool empty()
-//		{
-//			unique_lock< mutex > lk( head_mtx_);
-//			return empty_();
-//		}
-//	
-//		void put( detail::fiber::sptr_t const& fib)
-//		{
-//			node::sptr_t new_node( new node);
-//			{
-//				unique_lock< mutex > lk( tail_mtx_);
-//				tail_->fib = fib;
-//				tail_->next = new_node;
-//				tail_ = new_node;
-//			}
-//		}
-//	
-//		bool try_take( detail::fiber::sptr_t & fib)
-//		{
-//			unique_lock< mutex > lk( head_mtx_);
-//			if ( empty_() )
-//				return false;
-//			fib.swap( head_->fib);
-//			pop_head_();
-//			return fib;
-//		}
-//	};	
-
-	class twolock_fifo
-	{
-	private:
-		mutex								mtx_;
-		std::list< detail::fiber::sptr_t >	lst_;
-
-		bool empty_() const
-		{ return lst_.empty(); }
-
-		void put_( detail::fiber::sptr_t const& fib)
-		{ lst_.push_back( fib); }
-
-		bool try_take_( detail::fiber::sptr_t & fib)
-		{
-			if ( empty_() ) return false;
-			fib = lst_.front();
-			lst_.pop_front();
-			return fib;
-		}
-
-	public:
-		twolock_fifo() :
-			mtx_(), lst_()
-		{}
-	
-		bool empty()
-		{
-			mutex::scoped_lock lk( mtx_);
-			return empty_();
-		}
-	
-		void put( detail::fiber::sptr_t const& fib)
-		{
-			mutex::scoped_lock lk( mtx_);
-			put_( fib);
-		}
-	
-		bool try_take( detail::fiber::sptr_t & fib)
-		{
-			mutex::scoped_lock lk( mtx_);
-			return try_take_( fib);
-		}
-	};
-
-	twolock_fifo	runnable_;
-	twolock_fifo	blocked_;
-
-public:
-	distrib_rr_ums() :
-		runnable_(), blocked_()
-	{}
-
-	void attach()
-	{}
-
-	bool has_runnable()
-	{ return ! runnable_.empty(); }
-
-	bool has_blocked()
-	{ return ! blocked_.empty(); }
-
-	void put_runnable( detail::fiber::sptr_t const& fib)
-	{ runnable_.put( fib); }
-
-	void put_blocked( detail::fiber::sptr_t const& fib)
-	{ blocked_.put( fib); }
-
-	bool try_take_runnable( detail::fiber::sptr_t & fib)
-	{ return runnable_.try_take( fib); }
-
-	bool try_take_blocked( detail::fiber::sptr_t & fib)
-	{ return blocked_.try_take( fib); }
-};
-
-}}
-
-#include <boost/config/abi_suffix.hpp>
-
-#endif // BOOST_TASK_DISTRIB_RR_UMS_H
-
Modified: sandbox/task/libs/task/test/Jamfile.v2
==============================================================================
--- sandbox/task/libs/task/test/Jamfile.v2	(original)
+++ sandbox/task/libs/task/test/Jamfile.v2	2009-10-18 06:21:43 EDT (Sun, 18 Oct 2009)
@@ -31,7 +31,6 @@
     [ task-test test_new_thread ]
     [ task-test test_unbounded_twolock_pool ]
     [ task-test test_unbounded_onelock_pool ]
-    [ task-test test_unbounded_onelock_pool_distrib ]
     [ task-test test_bounded_twolock_pool ]
     [ task-test test_bounded_onelock_pool ]
     [ task-test test_as_sub_task ]
Deleted: sandbox/task/libs/task/test/test_unbounded_onelock_pool_distrib.cpp
==============================================================================
--- sandbox/task/libs/task/test/test_unbounded_onelock_pool_distrib.cpp	2009-10-18 06:21:43 EDT (Sun, 18 Oct 2009)
+++ (empty file)
@@ -1,540 +0,0 @@
-
-//          Copyright Oliver Kowalke 2009.
-// Distributed under the Boost Software License, Version 1.0.
-//    (See accompanying file LICENSE_1_0.txt or copy at
-//          http://www.boost.org/LICENSE_1_0.txt)
-
-#include <cstdlib>
-#include <iostream>
-#include <map>
-#include <stdexcept>
-#include <vector>
-
-#include <boost/bind.hpp>
-#include <boost/date_time/posix_time/posix_time.hpp>
-#include <boost/function.hpp>
-#include <boost/ref.hpp>
-#include <boost/test/unit_test.hpp>
-#include <boost/thread.hpp>
-#include <boost/thread/barrier.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/utility.hpp>
-
-#include <boost/task.hpp>
-
-#include "test_functions.hpp"
-
-namespace pt = boost::posix_time;
-namespace tsk = boost::task;
-
-namespace {
-
-// check size and move op
-void test_case_1()
-{
-	tsk::static_pool<
-		tsk::unbounded_onelock_fifo,
-		tsk::distrib_rr_ums
-	> pool1( tsk::poolsize( 3) );
-	BOOST_CHECK( pool1);
-	BOOST_CHECK_EQUAL( pool1.size(), std::size_t( 3) );
-
-	tsk::static_pool<
-		tsk::unbounded_onelock_fifo,
-		tsk::distrib_rr_ums
-	> pool2;
-	BOOST_CHECK( ! pool2);
-	BOOST_CHECK_THROW( pool2.size(), tsk::pool_moved);
-
-	pool2 = boost::move( pool1);
-
-	BOOST_CHECK( ! pool1);
-	BOOST_CHECK_THROW( pool1.size(), tsk::pool_moved);
-
-	BOOST_CHECK( pool2);
-	BOOST_CHECK_EQUAL( pool2.size(), std::size_t( 3) );
-
-	tsk::task< int > t( fibonacci_fn, 10);
-	tsk::handle< int > h(
-		tsk::async( boost::move( t), pool2) );
-	BOOST_CHECK_EQUAL( h.get(), 55);
-}
-
-// check submit
-void test_case_2()
-{
-	tsk::static_pool<
-		tsk::unbounded_onelock_fifo,
-		tsk::distrib_rr_ums
-	> pool( tsk::poolsize( 3) );
-	tsk::task< int > t( fibonacci_fn, 10);
-	tsk::handle< int > h(
-		tsk::async( boost::move( t), pool) );
-	BOOST_CHECK_EQUAL( h.get(), 55);
-}
-
-// check assignment
-void test_case_3()
-{
-	tsk::static_pool<
-		tsk::unbounded_onelock_fifo,
-		tsk::distrib_rr_ums
-	> pool( tsk::poolsize( 3) );
-	tsk::task< int > t( fibonacci_fn, 10);
-	tsk::handle< int > h1;
-	tsk::handle< int > h2(
-		tsk::async( boost::move( t), pool) );
-	h1 = h2;
-	BOOST_CHECK_EQUAL( h1.get(), 55);
-	BOOST_CHECK_EQUAL( h2.get(), 55);
-}
-
-// check swap
-void test_case_4()
-{
-	tsk::static_pool<
-		tsk::unbounded_onelock_fifo,
-		tsk::distrib_rr_ums
-	> pool( tsk::poolsize( 3) );
-	tsk::task< int > t1( fibonacci_fn, 5);
-	tsk::task< int > t2( fibonacci_fn, 10);
-	tsk::handle< int > h1(
-		tsk::async( boost::move( t1), pool) );
-	tsk::handle< int > h2(
-		tsk::async( boost::move( t2), pool) );
-	BOOST_CHECK_EQUAL( h1.get(), 5);
-	BOOST_CHECK_EQUAL( h2.get(), 55);
-	BOOST_CHECK_NO_THROW( h1.swap( h2) );
-	BOOST_CHECK_EQUAL( h1.get(), 55);
-	BOOST_CHECK_EQUAL( h2.get(), 5);
-}
-
-// check runs in pool
-void test_case_5()
-{
-	tsk::static_pool<
-		tsk::unbounded_onelock_fifo,
-		tsk::distrib_rr_ums
-	> pool( tsk::poolsize( 1) );
-	tsk::task< bool > t( runs_in_pool_fn);
-	tsk::handle< bool > h(
-		tsk::async( boost::move( t), pool) );
-	BOOST_CHECK_EQUAL( h.get(), true);
-}
-
-// check shutdown
-void test_case_6()
-{
-	tsk::static_pool<
-		tsk::unbounded_onelock_fifo,
-		tsk::distrib_rr_ums
-	> pool( tsk::poolsize( 1) );
-	tsk::task< int > t( fibonacci_fn, 10);
-	tsk::handle< int > h(
-		tsk::async( boost::move( t), pool) );
-	pool.shutdown();
-	BOOST_CHECK( pool.closed() );
-	BOOST_CHECK_EQUAL( h.get(), 55);
-}
-
-// check runtime_error throw inside task
-void test_case_7()
-{
-	tsk::static_pool<
-		tsk::unbounded_onelock_fifo,
-		tsk::distrib_rr_ums
-	> pool( tsk::poolsize( 1) );
-	tsk::task< void > t( throwing_fn);
-	tsk::handle< void > h(
-		tsk::async( boost::move( t), pool) );
-	pool.shutdown();
-	BOOST_CHECK_THROW( h.get(), std::runtime_error);
-}
-
-// check shutdown with task_rejected exception
-void test_case_8()
-{
-	tsk::static_pool<
-		tsk::unbounded_onelock_fifo,
-		tsk::distrib_rr_ums
-	> pool( tsk::poolsize( 1) );
-	tsk::task< int > t( fibonacci_fn, 10);
-	pool.shutdown();
-	BOOST_CHECK( pool.closed() );
-	BOOST_CHECK_THROW(
-		tsk::async( boost::move( t), pool),
-		tsk::task_rejected);
-}
-
-// check shutdown_now with thread_interrupted exception
-void test_case_9()
-{
-	tsk::static_pool<
-		tsk::unbounded_onelock_fifo,
-		tsk::distrib_rr_ums
-	> pool( tsk::poolsize( 1) );
-	tsk::task< void > t( delay_fn, pt::millisec( 500) );
-	tsk::handle< void > h(
-		tsk::async( boost::move( t), pool) );
-	boost::this_thread::sleep( pt::millisec( 250) );
-	BOOST_CHECK_EQUAL( pool.size(), std::size_t( 1) );
-	pool.shutdown_now();
-	BOOST_CHECK( pool.closed() );
-	BOOST_CHECK_EQUAL( pool.size(), std::size_t( 0) );
-	BOOST_CHECK_THROW( h.get(), tsk::task_interrupted);
-}
-
-// check wait
-void test_case_10()
-{
-	tsk::static_pool<
-		tsk::unbounded_onelock_fifo,
-		tsk::distrib_rr_ums
-	> pool( tsk::poolsize( 3) );
-	tsk::task< int > t( fibonacci_fn, 10);
-	tsk::handle< int > h(
-		tsk::async( boost::move( t), pool) );
-	h.wait();
-	BOOST_CHECK( h.is_ready() );
-	BOOST_CHECK( h.has_value() );
-	BOOST_CHECK( ! h.has_exception() );
-	BOOST_CHECK_EQUAL( h.get(), 55);
-}
-
-// check wait_for
-void test_case_11()
-{
-	tsk::static_pool<
-		tsk::unbounded_onelock_fifo,
-		tsk::distrib_rr_ums
-	> pool( tsk::poolsize( 3) );
-	tsk::task< void > t( delay_fn, pt::seconds( 1) );
-	tsk::handle< void > h(
-		tsk::async( boost::move( t), pool) );
-	BOOST_CHECK( h.wait_for( pt::seconds( 3) ) );
-	BOOST_CHECK( h.is_ready() );
-	BOOST_CHECK( h.has_value() );
-	BOOST_CHECK( ! h.has_exception() );
-}
-
-// check wait_for
-void test_case_12()
-{
-	tsk::static_pool<
-		tsk::unbounded_onelock_fifo,
-		tsk::distrib_rr_ums
-	> pool( tsk::poolsize( 3) );
-	tsk::task< void > t( delay_fn, pt::seconds( 3) );
-	tsk::handle< void > h(
-		tsk::async( boost::move( t), pool) );
-	BOOST_CHECK( ! h.wait_for( pt::seconds( 1) ) );
-	BOOST_CHECK( ! h.is_ready() );
-	BOOST_CHECK( ! h.has_value() );
-	BOOST_CHECK( ! h.has_exception() );
-}
-
-// check wait_until
-void test_case_13()
-{
-	tsk::static_pool<
-		tsk::unbounded_onelock_fifo,
-		tsk::distrib_rr_ums
-	> pool( tsk::poolsize( 3) );
-	tsk::task< void > t( delay_fn, pt::seconds( 1) );
-	tsk::handle< void > h(
-		tsk::async( boost::move( t), pool) );
-	BOOST_CHECK( h.wait_until( boost::get_system_time() + pt::seconds( 3) ) );
-	BOOST_CHECK( h.is_ready() );
-	BOOST_CHECK( h.has_value() );
-	BOOST_CHECK( ! h.has_exception() );
-}
-
-// check wait_until
-void test_case_14()
-{
-	tsk::static_pool<
-		tsk::unbounded_onelock_fifo,
-		tsk::distrib_rr_ums
-	> pool( tsk::poolsize( 3) );
-	tsk::task< void > t( delay_fn, pt::seconds( 3) );
-	tsk::handle< void > h(
-		tsk::async( boost::move( t), pool) );
-	BOOST_CHECK( ! h.wait_until( boost::get_system_time() + pt::seconds( 1) ) );
-	BOOST_CHECK( ! h.is_ready() );
-	BOOST_CHECK( ! h.has_value() );
-	BOOST_CHECK( ! h.has_exception() );
-}
-
-// check interrupt
-void test_case_15()
-{
-	tsk::static_pool<
-		tsk::unbounded_onelock_fifo,
-		tsk::distrib_rr_ums
-	> pool( tsk::poolsize( 3) );
-	tsk::task< void > t( delay_fn, pt::seconds( 3) );
-	tsk::handle< void > h(
-		tsk::async( boost::move( t), pool) );
-	h.interrupt();
-	BOOST_CHECK( h.interruption_requested() );
-	BOOST_CHECK_THROW( h.get(), tsk::task_interrupted);
-}
-
-// check interrupt_all_worker
-void test_case_16()
-{
-	tsk::static_pool<
-		tsk::unbounded_onelock_fifo,
-		tsk::distrib_rr_ums
-	> pool( tsk::poolsize( 5) );
-	tsk::task< void > t1( delay_fn, pt::seconds( 3) );
-	tsk::task< void > t2( delay_fn, pt::seconds( 3) );
-	tsk::task< void > t3( delay_fn, pt::seconds( 3) );
-	tsk::handle< void > h1(
-		tsk::async( boost::move( t1), pool) );
-	tsk::handle< void > h2(
-		tsk::async( boost::move( t2), pool) );
-	tsk::handle< void > h3(
-		tsk::async( boost::move( t3), pool) );
-	boost::this_thread::sleep( pt::millisec( 250) );
-	pool.interrupt_all_worker();
-	BOOST_CHECK( ! h1.interruption_requested() );
-	BOOST_CHECK( ! h2.interruption_requested() );
-	BOOST_CHECK( ! h3.interruption_requested() );
-	BOOST_CHECK_THROW( h1.get(), tsk::task_interrupted);
-	BOOST_CHECK_THROW( h2.get(), tsk::task_interrupted);
-	BOOST_CHECK_THROW( h3.get(), tsk::task_interrupted);
-	BOOST_CHECK_EQUAL( pool.size(), std::size_t( 5) );
-}
-
-// check interrupt_and_wait
-void test_case_17()
-{
-	tsk::static_pool<
-		tsk::unbounded_onelock_fifo,
-		tsk::distrib_rr_ums
-	> pool( tsk::poolsize( 3) );
-	bool finished( false);
-	tsk::task< void > t(
-		interrupt_fn,
-		pt::seconds( 1),
-		boost::ref( finished) );
-	tsk::handle< void > h(
-		tsk::async( boost::move( t), pool) );
-	h.interrupt_and_wait();
-	BOOST_CHECK( finished);
-	BOOST_CHECK( h.is_ready() );
-	BOOST_CHECK( ! h.has_value() );
-	BOOST_CHECK( h.has_exception() );
-	BOOST_CHECK( h.interruption_requested() );
-	BOOST_CHECK_THROW( h.get(), tsk::task_interrupted);
-}
-
-// check interrupt_and_wait_for
-void test_case_18()
-{
-	tsk::static_pool<
-		tsk::unbounded_onelock_fifo,
-		tsk::distrib_rr_ums
-	> pool( tsk::poolsize( 3) );
-	bool finished( false);
-	tsk::task< void > t(
-		interrupt_fn,
-		pt::seconds( 1),
-		boost::ref( finished) );
-	tsk::handle< void > h(
-		tsk::async( boost::move( t), pool) );
-	BOOST_CHECK( h.interrupt_and_wait_for( pt::seconds( 3) ) );
-	BOOST_CHECK( finished);
-	BOOST_CHECK( h.is_ready() );
-	BOOST_CHECK( ! h.has_value() );
-	BOOST_CHECK( h.has_exception() );
-	BOOST_CHECK( h.interruption_requested() );
-	BOOST_CHECK_THROW( h.get(), tsk::task_interrupted);
-}
-
-// check interrupt_and_wait_for
-void test_case_19()
-{
-	tsk::static_pool<
-		tsk::unbounded_onelock_fifo,
-		tsk::distrib_rr_ums
-	> pool( tsk::poolsize( 3) );
-	tsk::task< void > t( non_interrupt_fn, 3);
-	tsk::handle< void > h(
-		tsk::async( boost::move( t), pool) );
-	BOOST_CHECK( ! h.interrupt_and_wait_for( pt::seconds( 1) ) );
-}
-
-// check interrupt_and_wait_until
-void test_case_20()
-{
-	tsk::static_pool<
-		tsk::unbounded_onelock_fifo,
-		tsk::distrib_rr_ums
-	> pool( tsk::poolsize( 3) );
-	bool finished( false);
-	tsk::task< void > t(
-		interrupt_fn,
-		pt::seconds( 1),
-		boost::ref( finished) );
-	tsk::handle< void > h(
-		tsk::async( boost::move( t), pool) );
-	BOOST_CHECK( h.interrupt_and_wait_until( boost::get_system_time() + pt::seconds( 3) ) );
-	BOOST_CHECK( finished);
-	BOOST_CHECK( h.is_ready() );
-	BOOST_CHECK( ! h.has_value() );
-	BOOST_CHECK( h.has_exception() );
-	BOOST_CHECK( h.interruption_requested() );
-	BOOST_CHECK_THROW( h.get(), tsk::task_interrupted);
-}
-
-// check interrupt_and_wait_until
-void test_case_21()
-{
-	tsk::static_pool<
-		tsk::unbounded_onelock_fifo,
-		tsk::distrib_rr_ums
-	> pool( tsk::poolsize( 3) );
-	tsk::task< void > t( non_interrupt_fn, 3);
-	tsk::handle< void > h(
-		tsk::async( boost::move( t), pool) );
-	BOOST_CHECK( ! h.interrupt_and_wait_until( boost::get_system_time() + pt::seconds( 1) ) );
-}
-
-// check fifo scheduling
-void test_case_22()
-{
-	typedef tsk::static_pool<
-		tsk::unbounded_onelock_fifo,
-		tsk::distrib_rr_ums
-	> pool_type;
-	BOOST_CHECK( ! tsk::has_attribute< pool_type >::value);
-	pool_type pool( tsk::poolsize( 1) );
-	boost::barrier b( 2);
-	std::vector< int > buffer;
-	tsk::task< void > t1( barrier_fn, boost::ref( b) );
-	tsk::task< void > t2(
-		buffer_fibonacci_fn,
-		boost::ref( buffer),
-		10);
-	tsk::task< void > t3(
-		buffer_fibonacci_fn,
-		boost::ref( buffer),
-		0);
-	tsk::async( boost::move( t1), pool);
-	boost::this_thread::sleep( pt::millisec( 250) );
-	tsk::async( boost::move( t2), pool);
-	tsk::async( boost::move( t3), pool);
-	b.wait();
-	pool.shutdown();
-	BOOST_CHECK_EQUAL( buffer[0], 55);
-	BOOST_CHECK_EQUAL( buffer[1], 0);
-	BOOST_CHECK_EQUAL( buffer.size(), std::size_t( 2) );
-}
-
-// check priority scheduling
-void test_case_23()
-{
-	typedef tsk::static_pool<
-		tsk::unbounded_onelock_prio_queue< int >,
-		tsk::distrib_rr_ums
-	> pool_type;
-	BOOST_CHECK( tsk::has_attribute< pool_type >::value);
-	typedef boost::is_same< tsk::attribute_type< pool_type >::type, int > type;
-	BOOST_CHECK( type::value);
-	pool_type pool( tsk::poolsize( 1) );
-	boost::barrier b( 2);
-	std::vector< int > buffer;
-	tsk::task< void > t1( barrier_fn, boost::ref( b) );
-	tsk::task< void > t2(
-		buffer_fibonacci_fn,
-		boost::ref( buffer),
-		10) ;
-	tsk::task< void > t3(
-		buffer_fibonacci_fn,
-		boost::ref( buffer),
-		0);
-	tsk::async( boost::move( t1), 0, pool);
-	boost::this_thread::sleep( pt::millisec( 250) );
-	tsk::async( boost::move( t2), 1, pool);
-	tsk::async( boost::move( t3), 0, pool);
-	b.wait();
-	pool.shutdown();
-	BOOST_CHECK_EQUAL( buffer[0], 55);
-	BOOST_CHECK_EQUAL( buffer[1], 0);
-	BOOST_CHECK_EQUAL( buffer.size(), std::size_t( 2) );
-}
-
-// check smart scheduling
-void test_case_24()
-{
-	typedef tsk::static_pool<
-		tsk::unbounded_onelock_smart_queue< int, std::less< int > >,
-		tsk::distrib_rr_ums
-	> pool_type;
-	BOOST_CHECK( tsk::has_attribute< pool_type >::value);
-	typedef boost::is_same< tsk::attribute_type< pool_type >::type, int > type;
-	BOOST_CHECK( type::value);
-	pool_type pool( tsk::poolsize( 1) );
-	boost::barrier b( 2);
-	std::vector< int > buffer;
-	tsk::task< void > t1( barrier_fn, boost::ref( b) );
-	tsk::task< void > t2(
-		buffer_fibonacci_fn,
-		boost::ref( buffer),
-		10);
-	tsk::task< void > t3(
-		buffer_fibonacci_fn,
-		boost::ref( buffer),
-		0);
-	tsk::task< void > t4(
-		buffer_fibonacci_fn,
-		boost::ref( buffer),
-		1);
-	pool.submit( boost::move( t1), 0);
-	boost::this_thread::sleep( pt::millisec( 250) );
-	tsk::async( boost::move( t2), 2, pool);
-	tsk::async( boost::move( t3), 1, pool);
-	tsk::async( boost::move( t4), 2, pool);
-	b.wait();
-	pool.shutdown();
-	BOOST_CHECK_EQUAL( buffer[0], 0);
-	BOOST_CHECK_EQUAL( buffer[1], 1);
-	BOOST_CHECK_EQUAL( buffer.size(), std::size_t( 2) );
-}
-
-}
-
-boost::unit_test::test_suite * init_unit_test_suite( int, char* [])
-{
-	boost::unit_test::test_suite * test =
-		BOOST_TEST_SUITE("Boost.Task: unbounded-onelock-pool test suite");
-
-	test->add( BOOST_TEST_CASE( & test_case_1) );
-	test->add( BOOST_TEST_CASE( & test_case_2) );
-	test->add( BOOST_TEST_CASE( & test_case_3) );
-	test->add( BOOST_TEST_CASE( & test_case_4) );
-	test->add( BOOST_TEST_CASE( & test_case_5) );
-	test->add( BOOST_TEST_CASE( & test_case_6) );
-	test->add( BOOST_TEST_CASE( & test_case_7) );
-	test->add( BOOST_TEST_CASE( & test_case_8) );
-	test->add( BOOST_TEST_CASE( & test_case_9) );
-	test->add( BOOST_TEST_CASE( & test_case_10) );
-	test->add( BOOST_TEST_CASE( & test_case_11) );
-	test->add( BOOST_TEST_CASE( & test_case_12) );
-	test->add( BOOST_TEST_CASE( & test_case_13) );
-	test->add( BOOST_TEST_CASE( & test_case_14) );
-	test->add( BOOST_TEST_CASE( & test_case_15) );
-	test->add( BOOST_TEST_CASE( & test_case_16) );
-	test->add( BOOST_TEST_CASE( & test_case_17) );
-	test->add( BOOST_TEST_CASE( & test_case_18) );
-	test->add( BOOST_TEST_CASE( & test_case_19) );
-	test->add( BOOST_TEST_CASE( & test_case_20) );
-	test->add( BOOST_TEST_CASE( & test_case_21) );
-	test->add( BOOST_TEST_CASE( & test_case_22) );
-	test->add( BOOST_TEST_CASE( & test_case_23) );
-	test->add( BOOST_TEST_CASE( & test_case_24) );
-
-	return test;
-}