Added RingBufferControl get empty, used, reserved counts. (#348)

This commit is contained in:
Branimir Karadžić
2025-11-19 17:25:39 -08:00
committed by GitHub
parent 00b6d1517d
commit 4aaf864875
3 changed files with 227 additions and 12 deletions

View File

@@ -8,13 +8,118 @@
TEST_CASE("RingBufferControl", "")
{
bx::RingBufferControl control(16);
constexpr uint32_t kMax = 16;
bx::RingBufferControl control(kMax);
REQUIRE(kMax == control.getSize() );
REQUIRE(0 == control.getNumUsed() );
REQUIRE(0 == control.getNumReserved() );
REQUIRE(kMax-1 == control.getNumEmpty() );
REQUIRE(control.isEmpty() );
REQUIRE(1 == control.reserve(1) );
REQUIRE(kMax == control.getSize() );
REQUIRE(0 == control.getNumUsed() );
REQUIRE(1 == control.getNumReserved() );
REQUIRE(kMax-2 == control.getNumEmpty() );
REQUIRE(!control.isEmpty() );
REQUIRE(0 == control.reserve(16, true) );
REQUIRE(kMax-2 == control.reserve(16) );
REQUIRE(kMax == control.getSize() );
REQUIRE(0 == control.getNumUsed() );
REQUIRE(kMax-1 == control.getNumReserved() );
REQUIRE(0 == control.getNumEmpty() );
REQUIRE(!control.isEmpty() );
REQUIRE(1 == control.reserve(1) );
REQUIRE(0 == control.reserve(16, true) );
REQUIRE(14 == control.reserve(16) );
REQUIRE(15 == control.commit(15) );
REQUIRE(15 == control.available() );
REQUIRE(kMax == control.getSize() );
REQUIRE(kMax-1 == control.getNumUsed() );
REQUIRE(0 == control.getNumReserved() );
REQUIRE(0 == control.getNumEmpty() );
REQUIRE(!control.isEmpty() );
REQUIRE(15 == control.consume(15) );
REQUIRE(0 == control.available() );
REQUIRE(kMax == control.getSize() );
REQUIRE(0 == control.getNumUsed() );
REQUIRE(0 == control.getNumReserved() );
REQUIRE(kMax-1 == control.getNumEmpty() );
REQUIRE(control.isEmpty() );
}
TEST_CASE("RingBufferControl resize", "")
{
bx::RingBufferControl control(10);
uint32_t reserved;
uint32_t commited;
uint32_t consumed;
reserved = control.reserve(8);
REQUIRE(reserved == 8);
REQUIRE(control.m_current == 0);
REQUIRE(control.m_write == 8);
REQUIRE(control.m_read == 0);
commited = control.commit(4);
REQUIRE(commited == 4);
REQUIRE(control.m_current == 4);
REQUIRE(control.m_write == 8);
REQUIRE(control.m_read == 0);
consumed = control.consume(2);
REQUIRE(consumed == 2);
REQUIRE(control.m_current == 4);
REQUIRE(control.m_write == 8);
REQUIRE(control.m_read == 2);
REQUIRE(10 == control.getSize() );
control.resize(10);
REQUIRE(20 == control.getSize() );
control.reserve(8);
REQUIRE(control.m_current == 4);
REQUIRE(control.m_write == 16);
REQUIRE(control.m_read == 2);
control.commit(4);
REQUIRE(control.m_current == 8);
REQUIRE(control.m_write == 16);
REQUIRE(control.m_read == 2);
control.consume(2);
REQUIRE(control.m_current == 8);
REQUIRE(control.m_write == 16);
REQUIRE(control.m_read == 4);
reserved = control.reserve(4);
REQUIRE(reserved == 4);
commited = control.commit(4);
REQUIRE(commited == 4);
consumed = control.consume(6);
REQUIRE(consumed == 6);
REQUIRE(control.m_current == 12);
REQUIRE(control.m_write == 0);
REQUIRE(control.m_read == 10);
REQUIRE(2 == control.getNumUsed() );
REQUIRE(8 == control.getNumReserved() );
REQUIRE(9 == control.getNumEmpty() );
control.resize(-10);
REQUIRE(11 == control.getSize() );
REQUIRE(2 == control.getNumUsed() );
REQUIRE(8 == control.getNumReserved() );
REQUIRE(0 == control.getNumEmpty() );
REQUIRE(control.m_current == 3);
REQUIRE(control.m_write == 0);
REQUIRE(control.m_read == 1);
}