Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r83762 - in trunk/libs/thread: example test test/sync/futures/async test/threads/thread/constr
From: vicente.botet_at_[hidden]
Date: 2013-04-03 20:04:16


Author: viboes
Date: 2013-04-03 20:04:16 EDT (Wed, 03 Apr 2013)
New Revision: 83762
URL: http://svn.boost.org/trac/boost/changeset/83762

Log:
Thread: renamed all the examples as ex_; Added some lambda test.
Added:
   trunk/libs/thread/example/lambda_future.cpp (contents, props changed)
   trunk/libs/thread/test/threads/thread/constr/lambda_pass.cpp (contents, props changed)
Text files modified:
   trunk/libs/thread/test/Jamfile.v2 | 34 +++++++++++++++++++++++-----------
   trunk/libs/thread/test/sync/futures/async/async_pass.cpp | 12 ++++++------
   2 files changed, 29 insertions(+), 17 deletions(-)

Added: trunk/libs/thread/example/lambda_future.cpp
==============================================================================
--- (empty file)
+++ trunk/libs/thread/example/lambda_future.cpp 2013-04-03 20:04:16 EDT (Wed, 03 Apr 2013)
@@ -0,0 +1,60 @@
+// Copyright (C) 2013 Vicente Botet
+//
+// 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 <boost/config.hpp>
+#if ! defined BOOST_NO_CXX11_DECLTYPE
+#define BOOST_RESULT_OF_USE_DECLTYPE
+#endif
+#define BOOST_THREAD_VERSION 4
+#define BOOST_THREAD_USES_LOG
+#define BOOST_THREAD_USES_LOG_THREAD_ID
+
+#include <boost/thread/detail/log.hpp>
+#include <boost/thread/future.hpp>
+#include <boost/assert.hpp>
+#include <string>
+
+#if defined BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION \
+ && ! defined BOOST_NO_CXX11_LAMBDAS
+
+int main()
+{
+ BOOST_THREAD_LOG << "<MAIN" << BOOST_THREAD_END_LOG;
+
+ try
+ {
+ {
+ boost::future<int> f1 = boost::async(boost::launch::async, []() {return 123;});
+ int result = f1.get();
+ BOOST_THREAD_LOG << "f1 " << result << BOOST_THREAD_END_LOG;
+ }
+ {
+ boost::future<int> f1 = boost::async(boost::launch::async, []() {return 123;});
+ boost::future<int> f2 = f1.then([](boost::future<int>& f) {return 2*f.get(); });
+ int result = f2.get();
+ BOOST_THREAD_LOG << "f2 " << result << BOOST_THREAD_END_LOG;
+ }
+ }
+ catch (std::exception& ex)
+ {
+ BOOST_THREAD_LOG << "ERRORRRRR "<<ex.what() << "" << BOOST_THREAD_END_LOG;
+ return 1;
+ }
+ catch (...)
+ {
+ BOOST_THREAD_LOG << " ERRORRRRR exception thrown" << BOOST_THREAD_END_LOG;
+ return 2;
+ }
+ BOOST_THREAD_LOG << "MAIN>" << BOOST_THREAD_END_LOG;
+ return 0;
+}
+#else
+
+int main()
+{
+ return 0;
+}
+#endif

Modified: trunk/libs/thread/test/Jamfile.v2
==============================================================================
--- trunk/libs/thread/test/Jamfile.v2 (original)
+++ trunk/libs/thread/test/Jamfile.v2 2013-04-03 20:04:16 EDT (Wed, 03 Apr 2013)
@@ -184,6 +184,15 @@
     ;
 }
 
+rule thread-compile ( sources : reqs * : name )
+{
+ return
+ [ compile $(sources)
+ : $(reqs)
+ : $(name) ]
+ ;
+}
+
 {
     test-suite t_threads
     :
@@ -621,6 +630,7 @@
           [ thread-run2-noit ./threads/thread/assign/move_pass.cpp : thread__assign__move_p ]
           [ thread-compile-fail ./threads/thread/constr/copy_fail.cpp : : thread__constr__copy_f ]
           [ thread-run2-noit ./threads/thread/constr/default_pass.cpp : thread__constr__default_p ]
+ [ thread-run-lib2 ./threads/thread/constr/lambda_pass.cpp : thread__constr__lambda_p ]
           [ thread-run-lib2 ./threads/thread/constr/F_pass.cpp : thread__constr__F_p ]
           [ thread-run-lib2 ./threads/thread/constr/FArgs_pass.cpp : thread__constr__FArgs_p ]
           [ thread-run2-noit ./threads/thread/constr/Frvalue_pass.cpp : thread__constr__Frvalue_p ]
@@ -651,31 +661,32 @@
     test-suite ts_examples
     :
           [ thread-run2-noit ../example/monitor.cpp : ex_monitor ]
- [ compile ../example/starvephil.cpp ]
- #[ compile ../example/tennis.cpp ]
- [ compile ../example/condition.cpp ]
+ [ thread-compile ../example/starvephil.cpp : : ex_starvephil ]
+ #[ thread-compile ../example/tennis.cpp : : ex_tennis ]
+ [ thread-compile ../example/condition.cpp : : ex_condition ]
           [ thread-run2-noit ../example/mutex.cpp : ex_mutex ]
           [ thread-run2-noit ../example/once.cpp : ex_once ]
           [ thread-run2-noit ../example/recursive_mutex.cpp : ex_recursive_mutex ]
           [ thread-run2-noit ../example/thread.cpp : ex_thread ]
           [ thread-run2-noit ../example/thread_group.cpp : ex_thread_group ]
           [ thread-run2-noit ../example/tss.cpp : ex_tss ]
- [ thread-run ../example/xtime.cpp ]
- [ thread-run ../example/shared_monitor.cpp ]
- [ thread-run ../example/shared_mutex.cpp ]
+ [ thread-run2 ../example/xtime.cpp : ex_xtime ]
+ [ thread-run2 ../example/shared_monitor.cpp : ex_shared_monitor ]
+ [ thread-run2 ../example/shared_mutex.cpp : ex_shared_mutex ]
           #[ thread-run ../example/vhh_shared_monitor.cpp ]
           #[ thread-run ../example/vhh_shared_mutex.cpp ]
- [ thread-run ../example/make_future.cpp ]
- [ thread-run ../example/future_then.cpp ]
+ [ thread-run2 ../example/make_future.cpp : ex_make_future ]
+ [ thread-run2 ../example/future_then.cpp : ex_future_then ]
           [ thread-run2-noit ../example/synchronized_value.cpp : ex_synchronized_value ]
           [ thread-run2-noit ../example/synchronized_person.cpp : ex_synchronized_person ]
           [ thread-run2-noit ../example/thread_guard.cpp : ex_thread_guard ]
           [ thread-run2-noit ../example/scoped_thread.cpp : ex_scoped_thread ]
           [ thread-run2-noit ../example/strict_lock.cpp : ex_strict_lock ]
           [ thread-run2-noit ../example/ba_externallly_locked.cpp : ex_ba_externallly_locked ]
- [ thread-run ../example/producer_consumer_bounded.cpp ]
- [ thread-run ../example/producer_consumer.cpp ]
- [ thread-run ../example/not_interleaved.cpp ]
+ [ thread-run2 ../example/producer_consumer_bounded.cpp : ex_producer_consumer_bounded ]
+ [ thread-run2 ../example/producer_consumer.cpp : ex_producer_consumer ]
+ [ thread-run2 ../example/not_interleaved.cpp : ex_not_interleaved ]
+ [ thread-run2 ../example/lambda_future.cpp : ex_lambda_future ]
 
     ;
 
@@ -745,6 +756,7 @@
           #[ thread-run ../example/unwrap.cpp ]
           #[ thread-run ../example/perf_condition_variable.cpp ]
           #[ thread-run ../example/perf_shared_mutex.cpp ]
+ #[ thread-run ../example/std_async_test.cpp ]
     ;
 
 }

Modified: trunk/libs/thread/test/sync/futures/async/async_pass.cpp
==============================================================================
--- trunk/libs/thread/test/sync/futures/async/async_pass.cpp (original)
+++ trunk/libs/thread/test/sync/futures/async/async_pass.cpp 2013-04-03 20:04:16 EDT (Wed, 03 Apr 2013)
@@ -197,12 +197,12 @@
   {
     try {
     boost::future<int> f = boost::async(boost::launch::async, BOOST_THREAD_MAKE_RV_REF(MoveOnly()));
- boost::this_thread::sleep_for(ms(300));
- Clock::time_point t0 = Clock::now();
- BOOST_TEST(f.get() == 3);
- Clock::time_point t1 = Clock::now();
- BOOST_TEST(t1 - t0 < ms(200));
- std::cout << __FILE__ <<"["<<__LINE__<<"] "<< (t1 - t0).count() << std::endl;
+// boost::this_thread::sleep_for(ms(300));
+// Clock::time_point t0 = Clock::now();
+// BOOST_TEST(f.get() == 3);
+// Clock::time_point t1 = Clock::now();
+// BOOST_TEST(t1 - t0 < ms(200));
+// std::cout << __FILE__ <<"["<<__LINE__<<"] "<< (t1 - t0).count() << std::endl;
     } catch (std::exception& ex) {
       std::cout << __FILE__ <<"["<<__LINE__<<"]"<<ex.what() << std::endl;
       BOOST_TEST(false && "exception thrown");

Added: trunk/libs/thread/test/threads/thread/constr/lambda_pass.cpp
==============================================================================
--- (empty file)
+++ trunk/libs/thread/test/threads/thread/constr/lambda_pass.cpp 2013-04-03 20:04:16 EDT (Wed, 03 Apr 2013)
@@ -0,0 +1,87 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+// Copyright (C) 2011 Vicente J. Botet Escriba
+//
+// 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)
+
+// <boost/thread/thread.hpp>
+
+// class thread
+
+// template <class Clousure> thread(Clousure f);
+
+#include <new>
+#include <cstdlib>
+#include <cassert>
+#include <boost/thread/thread_only.hpp>
+#include <boost/detail/lightweight_test.hpp>
+
+#if ! defined BOOST_NO_CXX11_LAMBDAS
+
+unsigned throw_one = 0xFFFF;
+
+#if defined _GLIBCXX_THROW
+void* operator new(std::size_t s) _GLIBCXX_THROW (std::bad_alloc)
+#elif defined BOOST_MSVC
+void* operator new(std::size_t s)
+#else
+void* operator new(std::size_t s) throw (std::bad_alloc)
+#endif
+{
+ if (throw_one == 0) throw std::bad_alloc();
+ --throw_one;
+ return std::malloc(s);
+}
+
+#if defined BOOST_MSVC
+void operator delete(void* p)
+#else
+void operator delete(void* p) throw ()
+#endif
+{
+ std::free(p);
+}
+
+bool f_run = false;
+
+int main()
+{
+ {
+ f_run = false;
+ boost::thread t( []() { f_run = true; } );
+ t.join();
+ BOOST_TEST(f_run == true);
+ }
+#ifndef BOOST_MSVC
+ {
+ f_run = false;
+ try
+ {
+ throw_one = 0;
+ boost::thread t( []() { f_run = true; } );
+ BOOST_TEST(false);
+ }
+ catch (...)
+ {
+ throw_one = 0xFFFF;
+ BOOST_TEST(!f_run);
+ }
+ }
+#endif
+
+ return boost::report_errors();
+}
+
+#else
+int main()
+{
+ return 0;
+}
+#endif


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk