summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/thread/test/test_ml2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/thread/test/test_ml2.cpp')
-rw-r--r--src/boost/libs/thread/test/test_ml2.cpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/boost/libs/thread/test/test_ml2.cpp b/src/boost/libs/thread/test/test_ml2.cpp
new file mode 100644
index 000000000..86ff65738
--- /dev/null
+++ b/src/boost/libs/thread/test/test_ml2.cpp
@@ -0,0 +1,60 @@
+// Copyright (C) 2010 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)
+
+#define BOOST_THREAD_VERSION 4
+
+#include <cassert>
+#include <vector>
+#include <future>
+#include <functional>
+#include <boost/thread/future.hpp>
+
+
+int TRUC = 42;
+int main()
+{
+ std::vector< std::function<void()> > work_queue;
+
+ auto do_some_work = [&]()-> boost::future<int*>
+ {
+ auto promise = std::make_shared<boost::promise<int*>>();
+#if 0
+ work_queue.push_back( [=]
+ {
+ promise->set_value( &TRUC );
+ });
+#else
+ auto inner = [=]()
+ {
+ promise->set_value( &TRUC );
+ };
+ work_queue.push_back(inner);
+
+#endif
+
+ return promise->get_future();
+
+ };
+
+ auto ft_value = do_some_work();
+
+ while( !work_queue.empty() )
+ {
+#if 0
+ auto work = work_queue.back();
+#else
+ std::function<void()> work;
+ work = work_queue.back();
+#endif
+ work_queue.pop_back();
+ work();
+ }
+
+ auto value = ft_value.get();
+ assert( value == &TRUC );
+ return 0;
+}
+
+