ringbuffer_test.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. /*
  2. * Copyright 2010-2025 Branimir Karadzic. All rights reserved.
  3. * License: https://github.com/bkaradzic/bx/blob/master/LICENSE
  4. */
  5. #include "test.h"
  6. #include <bx/ringbuffer.h>
  7. TEST_CASE("RingBufferControl", "")
  8. {
  9. constexpr uint32_t kMax = 16;
  10. bx::RingBufferControl control(kMax);
  11. REQUIRE(kMax == control.getSize() );
  12. REQUIRE(0 == control.getNumUsed() );
  13. REQUIRE(0 == control.getNumReserved() );
  14. REQUIRE(kMax-1 == control.getNumEmpty() );
  15. REQUIRE(control.isEmpty() );
  16. REQUIRE(1 == control.reserve(1) );
  17. REQUIRE(kMax == control.getSize() );
  18. REQUIRE(0 == control.getNumUsed() );
  19. REQUIRE(1 == control.getNumReserved() );
  20. REQUIRE(kMax-2 == control.getNumEmpty() );
  21. REQUIRE(!control.isEmpty() );
  22. REQUIRE(0 == control.reserve(16, true) );
  23. REQUIRE(kMax-2 == control.reserve(16) );
  24. REQUIRE(kMax == control.getSize() );
  25. REQUIRE(0 == control.getNumUsed() );
  26. REQUIRE(kMax-1 == control.getNumReserved() );
  27. REQUIRE(0 == control.getNumEmpty() );
  28. REQUIRE(!control.isEmpty() );
  29. REQUIRE(15 == control.commit(15) );
  30. REQUIRE(kMax == control.getSize() );
  31. REQUIRE(kMax-1 == control.getNumUsed() );
  32. REQUIRE(0 == control.getNumReserved() );
  33. REQUIRE(0 == control.getNumEmpty() );
  34. REQUIRE(!control.isEmpty() );
  35. REQUIRE(15 == control.consume(15) );
  36. REQUIRE(kMax == control.getSize() );
  37. REQUIRE(0 == control.getNumUsed() );
  38. REQUIRE(0 == control.getNumReserved() );
  39. REQUIRE(kMax-1 == control.getNumEmpty() );
  40. REQUIRE(control.isEmpty() );
  41. }
  42. TEST_CASE("RingBufferControl resize", "")
  43. {
  44. bx::RingBufferControl control(10);
  45. uint32_t reserved;
  46. uint32_t commited;
  47. uint32_t consumed;
  48. reserved = control.reserve(8);
  49. REQUIRE(reserved == 8);
  50. REQUIRE(control.m_current == 0);
  51. REQUIRE(control.m_write == 8);
  52. REQUIRE(control.m_read == 0);
  53. commited = control.commit(4);
  54. REQUIRE(commited == 4);
  55. REQUIRE(control.m_current == 4);
  56. REQUIRE(control.m_write == 8);
  57. REQUIRE(control.m_read == 0);
  58. consumed = control.consume(2);
  59. REQUIRE(consumed == 2);
  60. REQUIRE(control.m_current == 4);
  61. REQUIRE(control.m_write == 8);
  62. REQUIRE(control.m_read == 2);
  63. REQUIRE(10 == control.getSize() );
  64. control.resize(10);
  65. REQUIRE(20 == control.getSize() );
  66. control.reserve(8);
  67. REQUIRE(control.m_current == 4);
  68. REQUIRE(control.m_write == 16);
  69. REQUIRE(control.m_read == 2);
  70. control.commit(4);
  71. REQUIRE(control.m_current == 8);
  72. REQUIRE(control.m_write == 16);
  73. REQUIRE(control.m_read == 2);
  74. control.consume(2);
  75. REQUIRE(control.m_current == 8);
  76. REQUIRE(control.m_write == 16);
  77. REQUIRE(control.m_read == 4);
  78. reserved = control.reserve(4);
  79. REQUIRE(reserved == 4);
  80. commited = control.commit(4);
  81. REQUIRE(commited == 4);
  82. consumed = control.consume(6);
  83. REQUIRE(consumed == 6);
  84. REQUIRE(control.m_current == 12);
  85. REQUIRE(control.m_write == 0);
  86. REQUIRE(control.m_read == 10);
  87. REQUIRE(2 == control.getNumUsed() );
  88. REQUIRE(8 == control.getNumReserved() );
  89. REQUIRE(9 == control.getNumEmpty() );
  90. control.resize(-10);
  91. REQUIRE(11 == control.getSize() );
  92. REQUIRE(2 == control.getNumUsed() );
  93. REQUIRE(8 == control.getNumReserved() );
  94. REQUIRE(0 == control.getNumEmpty() );
  95. REQUIRE(control.m_current == 3);
  96. REQUIRE(control.m_write == 0);
  97. REQUIRE(control.m_read == 1);
  98. }