10using namespace Microsoft::VisualStudio::CppUnitTestFramework;
15 constexpr size_t capacity = 50;
24 thread writer([](_Inout_ ring_t& ring)
27 for (
size_t retries = 1000; retries--;) {
28 for (
auto to_write =
static_cast<size_t>(
static_cast<uint64_t
>(::rand()) * capacity / 5 / RAND_MAX); to_write;) {
29 int* ptr;
size_t num_write;
30 tie(ptr, num_write) = ring.back();
31 if (to_write < num_write)
33 for (
size_t i = 0; i < num_write; i++)
36 to_write -= num_write;
44 int* ptr;
size_t num_read;
45 tie(ptr, num_read) = ring.
front();
50 for (
size_t i = 0; i < num_read; ++i)
51 Assert::AreEqual(seed++, ptr[i]);
Ring buffer.
Definition ring.hpp:23
std::tuple< T *, size_t > front()
Peeks the data at the ring head. Use pop() after the data was consumed.
Definition ring.hpp:72