test/non-swappable-ring-buffer: add test to confirm non-swappable containers can be used

This commit is contained in:
2025-05-12 16:02:30 +02:00
parent 7859656ec2
commit 6389462ce3

View File

@ -0,0 +1,77 @@
#include <vector>
#include <cassert>
#include <ring-buffer.h>
struct non_swappable_array {
using value_type = int;
using size_type = size_t;
int data[4];
// non-copyable
non_swappable_array() = default;
non_swappable_array(const non_swappable_array&) = delete;
non_swappable_array& operator=(const non_swappable_array&) = delete;
size_t size() const {
return 4;
}
int * begin() {
return std::begin(data);
}
int * end() {
return std::end(data);
}
const int * cbegin() const {
return std::cbegin(data);
}
const int * cend() const {
return std::cend(data);
}
int& operator[](size_t i) {
return data[i];
}
const int& operator[](size_t i) const {
return data[i];
}
// note: no swap implementation
};
int main() {
basic_ring_buffer<non_swappable_array> buf;
buf.push_back(1);
buf.push_back(2);
buf.push_back(3);
buf.push_back(4);
buf.push_back(5);
buf.push_back(6);
{
std::vector<int> expected{13, 14, 15, 16};
std::vector<int> actual;
for (int& i : buf) {
i += 10;
actual.push_back(i);
}
assert(actual == expected);
}
buf.push_back(7);
{
std::vector<int> expected{24, 25, 26, 17};
std::vector<int> actual;
for (int& i : buf) {
i += 10;
actual.push_back(i);
}
assert(actual == expected);
}
}