@@ -262,7 +262,7 @@ BOOST_AUTO_TEST_CASE(move_constructor_assignment) {
262262 p = std::move (p2);
263263}
264264
265- BOOST_AUTO_TEST_CASE (try_push ) {
265+ BOOST_AUTO_TEST_CASE (try_push_pop ) {
266266 using Queue = atomic_queue::AtomicQueueB2<
267267 /* T = */ float ,
268268 /* A = */ std::allocator<float >,
@@ -275,19 +275,41 @@ BOOST_AUTO_TEST_CASE(try_push) {
275275 Queue q (CAPACITY);
276276 BOOST_CHECK_EQUAL (q.capacity (), CAPACITY);
277277 BOOST_CHECK (q.was_empty ());
278+ BOOST_CHECK (!q.was_full ());
278279 BOOST_CHECK_EQUAL (q.was_size (), 0u );
279280
281+ // try_pop on empty queue must fail.
282+ float v = -1 ;
283+ BOOST_CHECK (!q.try_pop (v));
284+ BOOST_CHECK_EQUAL (v, -1 );
285+
280286 for (unsigned i = 1 ; i <= CAPACITY; ++i)
281287 BOOST_CHECK (q.try_push (i));
282288
283289 BOOST_CHECK (!q.was_empty ());
290+ BOOST_CHECK (q.was_full ());
284291 BOOST_CHECK_EQUAL (q.was_size (), CAPACITY);
285292
286293 for (unsigned i = 1 ; i <= CAPACITY; ++i)
287294 BOOST_CHECK (!q.try_push (i));
288295
289296 BOOST_CHECK (!q.was_empty ());
297+ BOOST_CHECK (q.was_full ());
290298 BOOST_CHECK_EQUAL (q.was_size (), CAPACITY);
299+
300+ for (unsigned i = 1 ; i <= CAPACITY; ++i) {
301+ BOOST_CHECK (q.try_pop (v));
302+ BOOST_CHECK_EQUAL (v, static_cast <float >(i));
303+ }
304+
305+ BOOST_CHECK (q.was_empty ());
306+ BOOST_CHECK (!q.was_full ());
307+ BOOST_CHECK_EQUAL (q.was_size (), 0u );
308+
309+ // try_pop on empty queue must fail again.
310+ v = -1 ;
311+ BOOST_CHECK (!q.try_pop (v));
312+ BOOST_CHECK_EQUAL (v, -1 );
291313}
292314
293315BOOST_AUTO_TEST_CASE (size) {
0 commit comments