]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/thread/test/sync/futures/promise/set_lvalue_pass.cpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / libs / thread / test / sync / futures / promise / set_lvalue_pass.cpp
CommitLineData
7c673cae
FG
1//===----------------------------------------------------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// Copyright (C) 2011 Vicente J. Botet Escriba
11//
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)
14
15// <boost/thread/future.hpp>
16
17// class promise<R>
18
19// void promise<R&>::set_value(R& r);
20
21#define BOOST_THREAD_VERSION 3
22
23#include <boost/thread/future.hpp>
24#include <boost/detail/lightweight_test.hpp>
25#include <boost/static_assert.hpp>
26
27int main()
28{
29
30 {
31 typedef int& T;
32 int i = 3;
33 boost::promise<T> p;
34 boost::future<T> f = p.get_future();
35 p.set_value(i);
36 int& j = f.get();
37 BOOST_TEST(j == 3);
38 ++i;
39 BOOST_TEST(j == 4);
40 try
41 {
42 p.set_value(i);
43 BOOST_TEST(false);
44 }
45 catch (const boost::future_error& e)
46 {
47 BOOST_TEST(e.code() == boost::system::make_error_code(boost::future_errc::promise_already_satisfied));
48 }
49 catch (...)
50 {
51 BOOST_TEST(false);
52 }
53 }
b32b8144
FG
54 {
55 typedef int& T;
56 int i = 3;
57 boost::promise<T> p;
58 boost::future<T> f = p.get_future();
59 p.set_value(i);
60 int& j = f.get();
61 BOOST_TEST(j == 3);
62 ++i;
63 BOOST_TEST(j == 4);
64 try
65 {
66 p.set_value_deferred(i);
67 BOOST_TEST(false);
68 }
69 catch (const boost::future_error& e)
70 {
71 BOOST_TEST(e.code() == boost::system::make_error_code(boost::future_errc::promise_already_satisfied));
72 }
73 catch (...)
74 {
75 BOOST_TEST(false);
76 }
77 }
78 {
79 typedef int& T;
80 int i = 3;
81 boost::promise<T> p;
82 boost::future<T> f = p.get_future();
83 p.set_value_deferred(i);
84 BOOST_TEST(!f.is_ready());
85 p.notify_deferred();
86 int& j = f.get();
87 BOOST_TEST(j == 3);
88 ++i;
89 BOOST_TEST(j == 4);
90 try
91 {
92 p.set_value_deferred(i);
93 BOOST_TEST(false);
94 }
95 catch (const boost::future_error& e)
96 {
97 BOOST_TEST(e.code() == boost::system::make_error_code(boost::future_errc::promise_already_satisfied));
98 }
99 catch (...)
100 {
101 BOOST_TEST(false);
102 }
103 }
104 {
105 typedef int& T;
106 int i = 3;
107 boost::promise<T> p;
108 boost::future<T> f = p.get_future();
109 p.set_value_deferred(i);
110 BOOST_TEST(!f.is_ready());
111 p.notify_deferred();
112 int& j = f.get();
113 BOOST_TEST(j == 3);
114 ++i;
115 BOOST_TEST(j == 4);
116 try
117 {
118 p.set_value(i);
119 BOOST_TEST(false);
120 }
121 catch (const boost::future_error& e)
122 {
123 BOOST_TEST(e.code() == boost::system::make_error_code(boost::future_errc::promise_already_satisfied));
124 }
125 catch (...)
126 {
127 BOOST_TEST(false);
128 }
129 }
7c673cae
FG
130 return boost::report_errors();
131}
132