X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=ceph%2Fsrc%2Fboost%2Flibs%2Fthread%2Ftest%2Fsync%2Ffutures%2Fpromise%2Fset_lvalue_pass.cpp;h=6acfb62d1486fd7f045a394ee512636364c0e46e;hb=b32b81446b3b05102be0267e79203f59329c1d97;hp=a95a3ea5e66a02334e085a6ec9fdfaa4ccc29701;hpb=215dd7151453fae88e6f968c975b6ce309d42dcf;p=ceph.git diff --git a/ceph/src/boost/libs/thread/test/sync/futures/promise/set_lvalue_pass.cpp b/ceph/src/boost/libs/thread/test/sync/futures/promise/set_lvalue_pass.cpp index a95a3ea5e..6acfb62d1 100644 --- a/ceph/src/boost/libs/thread/test/sync/futures/promise/set_lvalue_pass.cpp +++ b/ceph/src/boost/libs/thread/test/sync/futures/promise/set_lvalue_pass.cpp @@ -51,7 +51,82 @@ int main() BOOST_TEST(false); } } - + { + typedef int& T; + int i = 3; + boost::promise p; + boost::future f = p.get_future(); + p.set_value(i); + int& j = f.get(); + BOOST_TEST(j == 3); + ++i; + BOOST_TEST(j == 4); + try + { + p.set_value_deferred(i); + BOOST_TEST(false); + } + catch (const boost::future_error& e) + { + BOOST_TEST(e.code() == boost::system::make_error_code(boost::future_errc::promise_already_satisfied)); + } + catch (...) + { + BOOST_TEST(false); + } + } + { + typedef int& T; + int i = 3; + boost::promise p; + boost::future f = p.get_future(); + p.set_value_deferred(i); + BOOST_TEST(!f.is_ready()); + p.notify_deferred(); + int& j = f.get(); + BOOST_TEST(j == 3); + ++i; + BOOST_TEST(j == 4); + try + { + p.set_value_deferred(i); + BOOST_TEST(false); + } + catch (const boost::future_error& e) + { + BOOST_TEST(e.code() == boost::system::make_error_code(boost::future_errc::promise_already_satisfied)); + } + catch (...) + { + BOOST_TEST(false); + } + } + { + typedef int& T; + int i = 3; + boost::promise p; + boost::future f = p.get_future(); + p.set_value_deferred(i); + BOOST_TEST(!f.is_ready()); + p.notify_deferred(); + int& j = f.get(); + BOOST_TEST(j == 3); + ++i; + BOOST_TEST(j == 4); + try + { + p.set_value(i); + BOOST_TEST(false); + } + catch (const boost::future_error& e) + { + BOOST_TEST(e.code() == boost::system::make_error_code(boost::future_errc::promise_already_satisfied)); + } + catch (...) + { + BOOST_TEST(false); + } + } return boost::report_errors(); }