]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/thread/test/sync/futures/promise/move_assign_pass.cpp
1 //===----------------------------------------------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // Copyright (C) 2011 Vicente J. Botet Escriba
12 // Distributed under the Boost Software License, Version 1.0. (See accompanying
13 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
19 // promise& operator=(promise&& rhs);
21 #define BOOST_THREAD_VERSION 3
23 #include <boost/thread/future.hpp>
24 #include <boost/detail/lightweight_test.hpp>
25 #if defined BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS
26 #include "../test_allocator.hpp"
34 #if defined BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS
35 BOOST_TEST(test_alloc_base::count
== 0);
37 boost::promise
<int> p0(boost::allocator_arg
, test_allocator
<int>());
38 boost::promise
<int> p(boost::allocator_arg
, test_allocator
<int>());
39 BOOST_TEST(test_alloc_base::count
== 2);
41 BOOST_TEST(test_alloc_base::count
== 1);
42 boost::future
<int> f
= BOOST_THREAD_MAKE_RV_REF(p
.get_future());
43 BOOST_TEST(test_alloc_base::count
== 1);
44 BOOST_TEST(f
.valid());
47 f
= BOOST_THREAD_MAKE_RV_REF(p0
.get_future());
50 catch (const boost::future_error
& e
)
52 BOOST_TEST(e
.code() == boost::system::make_error_code(boost::future_errc::no_state
));
54 BOOST_TEST(test_alloc_base::count
== 1);
56 BOOST_TEST(test_alloc_base::count
== 0);
59 boost::promise
<int&> p0(boost::allocator_arg
, test_allocator
<int>());
60 boost::promise
<int&> p(boost::allocator_arg
, test_allocator
<int>());
61 BOOST_TEST(test_alloc_base::count
== 2);
63 BOOST_TEST(test_alloc_base::count
== 1);
64 boost::future
<int&> f
= BOOST_THREAD_MAKE_RV_REF(p
.get_future());
65 BOOST_TEST(test_alloc_base::count
== 1);
66 BOOST_TEST(f
.valid());
69 f
= BOOST_THREAD_MAKE_RV_REF(p0
.get_future());
72 catch (const boost::future_error
& e
)
74 BOOST_TEST(e
.code() == boost::system::make_error_code(boost::future_errc::no_state
));
76 BOOST_TEST(test_alloc_base::count
== 1);
78 BOOST_TEST(test_alloc_base::count
== 0);
80 boost::promise
<void> p0(boost::allocator_arg
, test_allocator
<void>());
81 boost::promise
<void> p(boost::allocator_arg
, test_allocator
<void>());
82 BOOST_TEST(test_alloc_base::count
== 2);
84 BOOST_TEST(test_alloc_base::count
== 1);
85 boost::future
<void> f
= BOOST_THREAD_MAKE_RV_REF(p
.get_future());
86 BOOST_TEST(test_alloc_base::count
== 1);
87 BOOST_TEST(f
.valid());
90 f
= BOOST_THREAD_MAKE_RV_REF(p0
.get_future());
93 catch (const boost::future_error
& e
)
95 BOOST_TEST(e
.code() == boost::system::make_error_code(boost::future_errc::no_state
));
97 BOOST_TEST(test_alloc_base::count
== 1);
99 BOOST_TEST(test_alloc_base::count
== 0);
103 boost::promise
<int> p0
;
104 boost::promise
<int> p
;
106 boost::future
<int> f
= BOOST_THREAD_MAKE_RV_REF(p
.get_future());
107 BOOST_TEST(f
.valid());
110 f
= BOOST_THREAD_MAKE_RV_REF(p0
.get_future());
113 catch (const boost::future_error
& e
)
115 BOOST_TEST(e
.code() == boost::system::make_error_code(boost::future_errc::no_state
));
120 boost::promise
<int&> p0
;
121 boost::promise
<int&> p
;
123 boost::future
<int&> f
= BOOST_THREAD_MAKE_RV_REF(p
.get_future());
124 BOOST_TEST(f
.valid());
127 f
= BOOST_THREAD_MAKE_RV_REF(p0
.get_future());
130 catch (const boost::future_error
& e
)
132 BOOST_TEST(e
.code() == boost::system::make_error_code(boost::future_errc::no_state
));
136 boost::promise
<void> p0
;
137 boost::promise
<void> p
;
139 boost::future
<void> f
= BOOST_THREAD_MAKE_RV_REF(p
.get_future());
140 BOOST_TEST(f
.valid());
143 f
= BOOST_THREAD_MAKE_RV_REF(p0
.get_future());
146 catch (const boost::future_error
& e
)
148 BOOST_TEST(e
.code() == boost::system::make_error_code(boost::future_errc::no_state
));
152 return boost::report_errors();