17 std::atomic<size_t> continuationCounter;
18 continuationCounter = 0;
20 bool throwException =
false;
22 auto qc = q.then<std::string>(
23 [&continuationCounter, &throwException](
int x) {
25 ++continuationCounter;
26 return std::to_string(x * 10);
28 std::launch::deferred);
31 BOOST_CHECK(qc.empty() ==
true);
32 BOOST_CHECK_EQUAL(continuationCounter, 0);
33 BOOST_CHECK(qc.pop() ==
false);
34 BOOST_CHECK_EQUAL(continuationCounter, 0);
45 BOOST_CHECK_EQUAL(res,
"10");
48 BOOST_CHECK_EQUAL(res,
"20");
51 BOOST_CHECK_EQUAL(res,
"30");
54 BOOST_CHECK_EQUAL(res,
"40");
57 BOOST_CHECK_EQUAL(res,
"50");
64 q.push_exception(std::current_exception());
69 BOOST_CHECK_EQUAL(res,
"60");
70 BOOST_CHECK(qc.pop() ==
false);
73 throwException =
true;
76 BOOST_CHECK(qc.pop() ==
false);
78 throwException =
false;
81 BOOST_CHECK_EQUAL(res,
"80");
82 BOOST_CHECK(qc.pop() ==
false);
89 std::atomic<size_t> continuationCounter;
90 continuationCounter = 0;
92 bool throwException =
false;
94 auto qc = q.then<std::string>(
95 [&continuationCounter, &throwException](
int x) {
97 ++continuationCounter;
98 return std::to_string(x * 10);
100 std::launch::deferred);
103 BOOST_CHECK(qc.empty() ==
true);
104 BOOST_CHECK_EQUAL(continuationCounter, 0);
106 std::thread sender([&q] {
107 for(
int i = 1; i < 6; ++i) {
115 BOOST_CHECK_EQUAL(continuationCounter, 0);
117 BOOST_CHECK_EQUAL(continuationCounter, 1);
118 BOOST_CHECK_EQUAL(res,
"10");
121 BOOST_CHECK_EQUAL(continuationCounter, 2);
122 BOOST_CHECK_EQUAL(res,
"20");
125 BOOST_CHECK_EQUAL(continuationCounter, 3);
126 BOOST_CHECK_EQUAL(res,
"30");
129 BOOST_CHECK_EQUAL(continuationCounter, 4);
130 BOOST_CHECK_EQUAL(res,
"40");
133 BOOST_CHECK_EQUAL(continuationCounter, 4);
136 BOOST_CHECK_EQUAL(continuationCounter, 5);
137 BOOST_CHECK_EQUAL(res,
"50");
144 q.push_exception(std::current_exception());
149 BOOST_CHECK_EQUAL(res,
"60");
150 BOOST_CHECK(qc.pop() ==
false);
153 throwException =
true;
156 BOOST_CHECK(qc.pop() ==
false);
158 throwException =
false;
161 BOOST_CHECK_EQUAL(res,
"80");
162 BOOST_CHECK(qc.pop() ==
false);
171 std::atomic<bool> throwException{
false};
173 auto qc = q.then<std::string>(
174 [&throwException](
int x) {
177 return std::to_string(x * 10);
189 BOOST_CHECK(qc.empty() ==
true);
191 BOOST_CHECK_EQUAL(res,
"10");
193 BOOST_CHECK(qc.empty() ==
true);
195 BOOST_CHECK_EQUAL(res,
"20");
197 BOOST_CHECK(qc.empty() ==
true);
199 BOOST_CHECK_EQUAL(res,
"30");
201 BOOST_CHECK(qc.empty() ==
true);
203 BOOST_CHECK_EQUAL(res,
"40");
205 BOOST_CHECK(qc.empty() ==
true);
207 BOOST_CHECK_EQUAL(res,
"50");
214 q.push_exception(std::current_exception());
219 BOOST_CHECK_EQUAL(res,
"60");
220 BOOST_CHECK(qc.pop() ==
false);
223 throwException =
true;
226 BOOST_CHECK(qc.pop() ==
false);
228 throwException =
false;
231 BOOST_CHECK_EQUAL(res,
"80");
232 BOOST_CHECK(qc.pop() ==
false);
239 std::atomic<size_t> continuationCounter;
240 continuationCounter = 0;
241 bool throwException =
false;
243 auto qc = q.then<
void>(
244 [&continuationCounter, &throwException] {
246 ++continuationCounter;
249 std::launch::deferred);
252 BOOST_CHECK(qc.empty() ==
true);
253 BOOST_CHECK_EQUAL(continuationCounter, 0);
254 BOOST_CHECK(qc.pop() ==
false);
255 BOOST_CHECK_EQUAL(continuationCounter, 0);
263 BOOST_CHECK(qc.pop() ==
true);
264 BOOST_CHECK(qc.pop() ==
true);
265 BOOST_CHECK(qc.pop() ==
true);
266 BOOST_CHECK(qc.pop() ==
true);
267 BOOST_CHECK(qc.pop() ==
true);
274 q.push_exception(std::current_exception());
278 BOOST_CHECK(qc.pop() ==
true);
279 BOOST_CHECK(qc.pop() ==
false);
282 throwException =
true;
285 BOOST_CHECK(qc.pop() ==
false);
287 throwException =
false;
289 BOOST_CHECK(qc.pop() ==
true);
290 BOOST_CHECK(qc.pop() ==
false);