RingBufferTests.c 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #include "../Tests.h"
  2. #include "core/RingBuffer.h"
  3. #include "core/Utility.h"
  4. static void testReadAndWrite() {
  5. CoreRingBuffer r = CORE_RING_BUFFER(5, sizeof(size_t));
  6. CORE_TEST_SIZE(0, r.length);
  7. coreRingBufferAdd(&r, size_t, 4);
  8. CORE_TEST_SIZE(1, r.length);
  9. CORE_TEST_SIZE(4, coreRingBufferGet(&r, 0, size_t));
  10. CORE_TEST_SIZE(4, coreRingBufferGetC(&r, 0, size_t));
  11. coreRingBufferRemove(&r);
  12. CORE_TEST_SIZE(0, r.length);
  13. coreDestroyRingBuffer(&r);
  14. }
  15. static void testOverflow() {
  16. CoreRingBuffer r = CORE_RING_BUFFER(3, sizeof(size_t));
  17. coreRingBufferAdd(&r, size_t, 1);
  18. coreRingBufferAdd(&r, size_t, 2);
  19. coreRingBufferAdd(&r, size_t, 3);
  20. coreRingBufferAdd(&r, size_t, 4);
  21. coreRingBufferAdd(&r, size_t, 5);
  22. CORE_TEST_SIZE(3, r.length);
  23. CORE_TEST_SIZE(1, coreRingBufferGet(&r, 0, size_t));
  24. coreRingBufferRemove(&r);
  25. CORE_TEST_SIZE(2, r.length);
  26. CORE_TEST_SIZE(2, coreRingBufferGet(&r, 0, size_t));
  27. coreRingBufferRemove(&r);
  28. CORE_TEST_SIZE(1, r.length);
  29. CORE_TEST_SIZE(3, coreRingBufferGet(&r, 0, size_t));
  30. coreRingBufferRemove(&r);
  31. CORE_TEST_SIZE(0, r.length);
  32. coreDestroyRingBuffer(&r);
  33. }
  34. static void testRefill() {
  35. CoreRingBuffer r = CORE_RING_BUFFER(3, sizeof(size_t));
  36. coreRingBufferAdd(&r, size_t, 1);
  37. coreRingBufferAdd(&r, size_t, 2);
  38. coreRingBufferAdd(&r, size_t, 3);
  39. coreRingBufferAdd(&r, size_t, 4);
  40. CORE_TEST_SIZE(3, r.length);
  41. CORE_TEST_SIZE(1, coreRingBufferGet(&r, 0, size_t));
  42. coreRingBufferRemove(&r);
  43. CORE_TEST_SIZE(2, coreRingBufferGet(&r, 0, size_t));
  44. coreRingBufferRemove(&r);
  45. CORE_TEST_SIZE(3, coreRingBufferGet(&r, 0, size_t));
  46. coreRingBufferRemove(&r);
  47. CORE_TEST_SIZE(0, r.length);
  48. coreRingBufferAdd(&r, size_t, 5);
  49. coreRingBufferAdd(&r, size_t, 6);
  50. CORE_TEST_SIZE(2, r.length);
  51. CORE_TEST_SIZE(5, coreRingBufferGet(&r, 0, size_t));
  52. coreRingBufferRemove(&r);
  53. CORE_TEST_SIZE(6, coreRingBufferGet(&r, 0, size_t));
  54. coreRingBufferRemove(&r);
  55. CORE_TEST_SIZE(0, r.length);
  56. coreDestroyRingBuffer(&r);
  57. }
  58. static void testClear() {
  59. CoreRingBuffer r = CORE_RING_BUFFER(3, sizeof(size_t));
  60. coreRingBufferAdd(&r, size_t, 1);
  61. coreRingBufferAdd(&r, size_t, 2);
  62. CORE_TEST_SIZE(2, r.length);
  63. coreClearRingBuffer(&r);
  64. CORE_TEST_SIZE(0, r.length);
  65. coreDestroyRingBuffer(&r);
  66. }
  67. static void testOverall() {
  68. CoreRingBuffer ri = CORE_RING_BUFFER(3, sizeof(size_t));
  69. coreRingBufferAdd(&ri, size_t, 1);
  70. coreRingBufferAdd(&ri, size_t, 2);
  71. coreRingBufferAdd(&ri, size_t, 3);
  72. CoreRingBuffer r = CORE_RING_BUFFER(0, 0);
  73. coreSwapRingBuffer(&r, &ri);
  74. char buffer[128];
  75. coreToStringRingBuffer(&r, buffer, sizeof(buffer), coreToStringSize);
  76. CORE_TEST_STRING("[1, 2, 3]", buffer);
  77. CORE_TEST_SIZE(3, r.length);
  78. coreRingBufferRemove(&r);
  79. coreToStringRingBuffer(&r, buffer, sizeof(buffer), coreToStringSize);
  80. CORE_TEST_STRING("[2, 3]", buffer);
  81. CORE_TEST_SIZE(2, r.length);
  82. coreRingBufferAdd(&r, size_t, 4);
  83. coreToStringRingBuffer(&r, buffer, sizeof(buffer), coreToStringSize);
  84. CORE_TEST_STRING("[2, 3, 4]", buffer);
  85. CORE_TEST_SIZE(3, r.length);
  86. coreRingBufferRemove(&r);
  87. coreToStringRingBuffer(&r, buffer, sizeof(buffer), coreToStringSize);
  88. CORE_TEST_STRING("[3, 4]", buffer);
  89. CORE_TEST_SIZE(2, r.length);
  90. coreRingBufferAdd(&r, size_t, 5);
  91. coreToStringRingBuffer(&r, buffer, sizeof(buffer), coreToStringSize);
  92. CORE_TEST_STRING("[3, 4, 5]", buffer);
  93. CORE_TEST_SIZE(3, r.length);
  94. coreRingBufferRemove(&r);
  95. coreToStringRingBuffer(&r, buffer, sizeof(buffer), coreToStringSize);
  96. CORE_TEST_STRING("[4, 5]", buffer);
  97. CORE_TEST_SIZE(2, r.length);
  98. coreClearRingBuffer(&r);
  99. coreToStringRingBuffer(&r, buffer, sizeof(buffer), coreToStringSize);
  100. CORE_TEST_STRING("[]", buffer);
  101. CORE_TEST_SIZE(0, r.length);
  102. coreDestroyRingBuffer(&r);
  103. coreDestroyRingBuffer(&ri);
  104. }
  105. void testRingBuffer() {
  106. testReadAndWrite();
  107. testOverflow();
  108. testRefill();
  109. testClear();
  110. testOverall();
  111. }