RingBufferTests.c 4.1 KB

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