11 size_t expectedCapacity,
const vector<int>& expectedElements)
13 auto expectedSize = expectedElements.size();
14 REQUIRE(buf.
size() == expectedSize);
18 CHECK(buf.
full() == (expectedCapacity == expectedSize));
20 if (expectedSize != 0) {
21 CHECK(buf.
front() == expectedElements.front());
22 CHECK(buf.
back() == expectedElements.back());
25 for (
auto i :
xrange(expectedSize)) {
26 CHECK(buf[i] == expectedElements[i]);
29 auto it1 = expectedElements.begin();
34 auto rit = expectedElements.rbegin();
35 for (
auto it = buf.rbegin(); it != buf.rend(); ++it) {
42 buf1.
push_back(1); check_buf(buf1, 3, {1});
43 buf1.
push_back(2); check_buf(buf1, 3, {1,2});
44 buf1.
push_front(3); check_buf(buf1, 3, {3,1,2});
45 buf1.
pop_front(); check_buf(buf1, 3, {1,2});
46 buf1.
pop_back(); check_buf(buf1, 3, {1});
47 buf1.
clear(); check_buf(buf1, 3, {});
50 buf1.
push_back({4,5}); check_buf(buf1, 3, {4,5});
51 buf2.push_back({7,8,9}); check_buf(buf2, 5, {7,8,9});
53 swap(buf1, buf2); check_buf(buf1, 5, {7,8,9});
54 check_buf(buf2, 3, {4,5});
59 size_t expectedCapacity,
const vector<int>& expectedElements)
61 auto expectedSize = expectedElements.size();
62 REQUIRE(buf.size() == expectedSize);
63 CHECK(buf.capacity() == expectedCapacity);
64 CHECK(buf.reserve() == expectedCapacity - expectedSize);
65 CHECK(buf.empty() == (expectedSize == 0));
66 CHECK(buf.full() == (expectedCapacity == expectedSize));
68 if (expectedSize != 0) {
69 CHECK(*buf.front() == expectedElements.front());
70 CHECK(*buf.back() == expectedElements.back());
73 for (
auto i :
xrange(expectedSize)) {
74 CHECK(*buf[i] == expectedElements[i]);
77 auto it1 = expectedElements.begin();
82 auto rit = expectedElements.rbegin();
83 for (
auto it = buf.rbegin(); it != buf.rend(); ++it) {
84 CHECK(**it == *rit++);
90 buf1.
push_back (make_unique<int>(1)); check_buf(buf1, 3, {1});
91 buf1.
push_back (make_unique<int>(2)); check_buf(buf1, 3, {1,2});
92 buf1.
push_front(make_unique<int>(3)); check_buf(buf1, 3, {3,1,2});
93 buf1.
pop_front(); check_buf(buf1, 3, {1,2});
94 buf1.
pop_back(); check_buf(buf1, 3, {1});
95 buf1.
clear(); check_buf(buf1, 3, {});
103static void check_queue(
105 const vector<int>& expectedElements)
107 check_buf(q.
getBuffer(), expectedCapacity, expectedElements);
112 q.
push_back(2); check_queue(q, 4, {1,2});
114 q.
push_back({4,5,6,7}); check_queue(q, 8, {2,4,5,6,7});
117 q.
clear(); check_queue(q, 8, {});
120static void check_queue(
121 const cb_queue<unique_ptr<int>>& q,
int expectedCapacity,
122 const vector<int>& expectedElements)
124 check_buf(q.getBuffer(), expectedCapacity, expectedElements);
128 q.
push_back(make_unique<int>(1)); check_queue(q, 4, {1});
129 q.
push_back(make_unique<int>(2)); check_queue(q, 4, {1,2});
131 q.
clear(); check_queue(q, 4, {});
TEST_CASE("circular_buffer")
This implements a queue on top of circular_buffer (not part of boost).
Circular buffer class, based on boost::circular_buffer/.
void set_capacity(size_t new_capacity)
void swap(openmsx::MemBuffer< T > &l, openmsx::MemBuffer< T > &r) noexcept
constexpr auto xrange(T e)