ChimeraTK-cppext 01.05.02
Loading...
Searching...
No Matches
testReadWriteAvailable.cc
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Deutsches Elektronen-Synchrotron DESY, MSK, ChimeraTK Project <chimeratk-support@desy.de>
2// SPDX-License-Identifier: LGPL-3.0-or-later
3#define BOOST_TEST_MODULE test_future_queue
4#include <boost/test/included/unit_test.hpp>
5using namespace boost::unit_test_framework;
6
7#include "future_queue.hpp"
8
9BOOST_AUTO_TEST_SUITE(testReadWriteAvailable)
10
11/*********************************************************************************************************************/
12
13BOOST_AUTO_TEST_CASE(singleThreaded) {
14 for(size_t nbuffers = 1; nbuffers < 100; ++nbuffers) {
15 cppext::future_queue<int> q(nbuffers);
16
17 // just single push and pop many times
18 BOOST_CHECK_EQUAL(q.read_available(), 0);
19 BOOST_CHECK_EQUAL(q.write_available(), nbuffers);
20 for(size_t i = 0; i < 100; ++i) {
21 q.push(42);
22 BOOST_CHECK_EQUAL(q.read_available(), 1);
23 BOOST_CHECK_EQUAL(q.write_available(), nbuffers - 1);
24 int x;
25 BOOST_CHECK(q.pop(x) == true);
26 BOOST_CHECK_EQUAL(q.read_available(), 0);
27 BOOST_CHECK_EQUAL(q.write_available(), nbuffers);
28 }
29
30 // push until queue is full, pop until queue is empty
31 for(size_t i = 0; i < nbuffers; ++i) {
32 BOOST_CHECK_EQUAL(q.read_available(), i);
33 BOOST_CHECK_EQUAL(q.write_available(), nbuffers - i);
34 q.push(42);
35 }
36 BOOST_CHECK_EQUAL(q.read_available(), nbuffers);
37 BOOST_CHECK_EQUAL(q.write_available(), 0);
38 for(size_t i = 0; i < nbuffers; ++i) {
39 BOOST_CHECK_EQUAL(q.read_available(), nbuffers - i);
40 BOOST_CHECK_EQUAL(q.write_available(), i);
41 int x;
42 BOOST_CHECK(q.pop(x) == true);
43 }
44 BOOST_CHECK_EQUAL(q.read_available(), 0);
45 BOOST_CHECK_EQUAL(q.write_available(), nbuffers);
46 }
47}
48
49/*********************************************************************************************************************/
50
51BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_CASE(singleThreaded)