]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/thread/example/future_fallback_to.cpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / thread / example / future_fallback_to.cpp
1 // Copyright (C) 2012-2013 Vicente Botet
2 //
3 // Distributed under the Boost Software License, Version 1.0. (See accompanying
4 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5
6 #include <boost/config.hpp>
7 #if ! defined BOOST_NO_CXX11_DECLTYPE
8 #define BOOST_RESULT_OF_USE_DECLTYPE
9 #endif
10
11 #define BOOST_THREAD_VERSION 4
12 //#define BOOST_THREAD_USES_LOG
13 #define BOOST_THREAD_USES_LOG_THREAD_ID
14
15 #include <boost/thread/detail/log.hpp>
16 #include <boost/thread/future.hpp>
17 #include <boost/assert.hpp>
18 #include <exception>
19 #include <string>
20 #include <iostream>
21
22 #if defined BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
23
24 int p1_ex()
25 {
26 BOOST_THREAD_LOG << "P1" << BOOST_THREAD_END_LOG;
27 throw std::logic_error("kk");
28 }
29
30 int p1()
31 {
32 BOOST_THREAD_LOG << "P1" << BOOST_THREAD_END_LOG;
33 return 1;;
34 }
35
36 int main()
37 {
38 const int number_of_tests = 200;
39 BOOST_THREAD_LOG << "<MAIN" << BOOST_THREAD_END_LOG;
40
41 {
42 for (int i=0; i< number_of_tests; i++)
43 try
44 {
45 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
46 boost::future<int> f1 = boost::async(boost::launch::async, &p1);
47 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
48 f1.wait();
49 BOOST_ASSERT(f1.get()==1);
50 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
51 }
52 catch (std::exception& ex)
53 {
54 std::cout << __FILE__ << "["<< __LINE__<<"] " << "ERRORRRRR "<<ex.what() << "" << std::endl;
55 BOOST_THREAD_LOG << "ERRORRRRR "<<ex.what() << "" << BOOST_THREAD_END_LOG;
56 return 1;
57 }
58 catch (...)
59 {
60 std::cout << __FILE__ << "["<< __LINE__<<"] " << " ERRORRRRR exception thrown" << std::endl;
61 BOOST_THREAD_LOG << " ERRORRRRR exception thrown" << BOOST_THREAD_END_LOG;
62 return 2;
63 }
64 }
65
66 {
67 for (int i=0; i< number_of_tests; i++)
68 try
69 {
70 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
71 boost::future<int> f1 = boost::async(&p1);
72 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
73 boost::future<int> f2 = f1.fallback_to(-1);
74 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
75 f2.wait();
76 //std::cout << __FILE__ << "["<< __LINE__<<"] " << std::endl;
77 BOOST_ASSERT(f2.get()==1);
78 //std::cout << __FILE__ << "["<< __LINE__<<"] " << std::endl;
79 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
80 }
81 catch (std::exception& ex)
82 {
83 std::cout << __FILE__ << "["<< __LINE__<<"] " << "ERRORRRRR "<<ex.what() << "" << std::endl;
84 BOOST_THREAD_LOG << "ERRORRRRR "<<ex.what() << "" << BOOST_THREAD_END_LOG;
85 return 1;
86 }
87 catch (...)
88 {
89 std::cout << __FILE__ << "["<< __LINE__<<"] " << " ERRORRRRR exception thrown" << std::endl;
90 BOOST_THREAD_LOG << " ERRORRRRR exception thrown" << BOOST_THREAD_END_LOG;
91 return 2;
92 }
93 }
94
95 {
96 for (int i=0; i< number_of_tests; i++)
97 try
98 {
99 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
100 boost::future<int> f1 = boost::async(boost::launch::async, &p1_ex);
101 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
102 f1.wait();
103 BOOST_ASSERT(f1.get_or(-1)==-1);
104 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
105 }
106 catch (std::exception& ex)
107 {
108 std::cout << __FILE__ << "["<< __LINE__<<"] " << "ERRORRRRR "<<ex.what() << "" << std::endl;
109 BOOST_THREAD_LOG << "ERRORRRRR "<<ex.what() << "" << BOOST_THREAD_END_LOG;
110 return 1;
111 }
112 catch (...)
113 {
114 std::cout << __FILE__ << "["<< __LINE__<<"] " << " ERRORRRRR exception thrown" << std::endl;
115 BOOST_THREAD_LOG << " ERRORRRRR exception thrown" << BOOST_THREAD_END_LOG;
116 return 2;
117 }
118 }
119
120 {
121 for (int i=0; i< number_of_tests; i++)
122 try
123 {
124 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
125 boost::future<int> f1 = boost::async(boost::launch::async, &p1_ex);
126 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
127 boost::future<int> f2 = f1.fallback_to(-1);
128 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
129 f2.wait();
130 //std::cout << __FILE__ << "["<< __LINE__<<"] " << std::endl;
131 BOOST_ASSERT(f2.get()==-1);
132 //std::cout << __FILE__ << "["<< __LINE__<<"] " << std::endl;
133 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
134 }
135 catch (std::exception& ex)
136 {
137 std::cout << __FILE__ << "["<< __LINE__<<"] " << "ERRORRRRR "<<ex.what() << "" << std::endl;
138 BOOST_THREAD_LOG << "ERRORRRRR "<<ex.what() << "" << BOOST_THREAD_END_LOG;
139 return 1;
140 }
141 catch (...)
142 {
143 std::cout << __FILE__ << "["<< __LINE__<<"] " << " ERRORRRRR exception thrown" << std::endl;
144 BOOST_THREAD_LOG << " ERRORRRRR exception thrown" << BOOST_THREAD_END_LOG;
145 return 2;
146 }
147 }
148 BOOST_THREAD_LOG << "MAIN>" << BOOST_THREAD_END_LOG;
149 return 0;
150 }
151 #else
152
153 int main()
154 {
155 return 0;
156 }
157 #endif