cb_ringbuffer_test.cpp 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. #include <string.h>
  2. #include <gtest/gtest.h>
  3. #include "cb_ringbuffer.h"
  4. TEST(testCase, cb_ringbuffer_test01)
  5. {
  6. cb_ringbuffer_t ringbuff;
  7. cb_ringbuffer_t *rb;
  8. char buff[16];
  9. rb = cb_ringbuffer_init(&ringbuff, buff, sizeof(buff));
  10. EXPECT_NE(cb_ringbuffer_isempty(rb), 0);
  11. EXPECT_EQ(cb_ringbuffer_isfull(rb), 0);
  12. EXPECT_EQ(cb_ringbuffer_total(rb), sizeof(buff));
  13. EXPECT_EQ(cb_ringbuffer_free(rb), cb_ringbuffer_total(rb));
  14. EXPECT_EQ(cb_ringbuffer_used(rb), 0);
  15. EXPECT_EQ(cb_ringbuffer_peek(rb, buff, sizeof(buff)), 0);
  16. EXPECT_EQ(cb_ringbuffer_discard(rb, sizeof(buff)), 0);
  17. EXPECT_EQ(cb_ringbuffer_read(rb, buff, sizeof(buff)), 0);
  18. }
  19. TEST(testCase, cb_ringbuffer_test02)
  20. {
  21. cb_ringbuffer_t ringbuff;
  22. cb_ringbuffer_t* rb;
  23. char buff[17];
  24. char tmp[sizeof(buff)];
  25. unsigned int buff_size;
  26. for (unsigned int i = 0; i < sizeof(buff); i++)
  27. {
  28. buff[i] = (char)(i & 0xff);
  29. }
  30. for (unsigned int i = 0; i < sizeof(buff); i++)
  31. {
  32. buff_size = i;
  33. rb = cb_ringbuffer_init(&ringbuff, buff, buff_size);
  34. for (unsigned int a = 0; a < buff_size; a++)
  35. {
  36. EXPECT_EQ(cb_ringbuffer_write(rb, buff, a), a);
  37. EXPECT_EQ(!!cb_ringbuffer_isempty(rb), !a);
  38. EXPECT_EQ(!!cb_ringbuffer_isfull(rb), a == buff_size);
  39. EXPECT_EQ(cb_ringbuffer_used(rb), a);
  40. EXPECT_EQ(cb_ringbuffer_free(rb), buff_size - a);
  41. memset(tmp, '#', sizeof(tmp));
  42. for (unsigned int b = 0; b < a; b++)
  43. {
  44. EXPECT_EQ(cb_ringbuffer_peek(rb, tmp, b), b);
  45. EXPECT_EQ(memcmp(buff, tmp, b), 0);
  46. memset(tmp, '#', sizeof(tmp));
  47. EXPECT_EQ(cb_ringbuffer_peek(rb, tmp, b), b);
  48. EXPECT_EQ(memcmp(buff, tmp, b), 0);
  49. }
  50. memset(tmp, '#', sizeof(tmp));
  51. EXPECT_EQ(cb_ringbuffer_read(rb, tmp, a), a);
  52. EXPECT_EQ(memcmp(buff, tmp, a), 0);
  53. EXPECT_EQ(cb_ringbuffer_write(rb, buff, a), a);
  54. EXPECT_EQ(cb_ringbuffer_discard(rb, a), a);
  55. EXPECT_EQ(cb_ringbuffer_free(rb), cb_ringbuffer_total(rb));
  56. }
  57. }
  58. }
  59. TEST(testCase, cb_ringbuffer_test03)
  60. {
  61. cb_ringbuffer_t ringbuff;
  62. cb_ringbuffer_t* rb;
  63. char buff[17];
  64. char tmp[sizeof(buff)];
  65. unsigned int buff_size;
  66. for (unsigned int i = 0; i < sizeof(buff); i++)
  67. {
  68. buff[i] = (char)(i & 0xff);
  69. }
  70. for (unsigned int i = 0; i < sizeof(buff); i++)
  71. {
  72. buff_size = i;
  73. rb = cb_ringbuffer_init(&ringbuff, buff, buff_size);
  74. for (unsigned int a = 0; a < buff_size; a++)
  75. {
  76. for (unsigned int b = 0; b < a; b++)
  77. {
  78. EXPECT_EQ(cb_ringbuffer_write(rb, buff, a), a);
  79. memset(tmp, '#', sizeof(tmp));
  80. EXPECT_EQ(cb_ringbuffer_peek(rb, tmp, a), a);
  81. EXPECT_EQ(memcmp(buff, tmp, a), 0);
  82. memset(tmp, '#', sizeof(tmp));
  83. EXPECT_EQ(cb_ringbuffer_read(rb, tmp, b), b);
  84. EXPECT_EQ(cb_ringbuffer_read(rb, tmp + b, a - b), a - b);
  85. EXPECT_EQ(memcmp(buff, tmp, a), 0);
  86. }
  87. }
  88. }
  89. }
  90. TEST(testCase, cb_ringbuffer_test04)
  91. {
  92. cb_ringbuffer_t ringbuff;
  93. cb_ringbuffer_t* rb;
  94. char buff[17];
  95. char tmp[sizeof(buff)];
  96. unsigned int buff_size;
  97. for (unsigned int i = 0; i < sizeof(buff); i++)
  98. {
  99. buff[i] = (char)(i & 0xff);
  100. }
  101. for (unsigned int i = 1; i < sizeof(buff); i++)
  102. {
  103. buff_size = i;
  104. rb = cb_ringbuffer_init(&ringbuff, buff, buff_size);
  105. for (unsigned int a = 0; a < 32; a++)
  106. {
  107. EXPECT_EQ(cb_ringbuffer_write(rb, buff, buff_size), buff_size);
  108. memset(tmp, '#', sizeof(tmp));
  109. EXPECT_EQ(cb_ringbuffer_peek(rb, tmp, buff_size), buff_size);
  110. EXPECT_EQ(memcmp(buff, tmp, buff_size), 0);
  111. memset(tmp, '#', sizeof(tmp));
  112. EXPECT_EQ(cb_ringbuffer_read(rb, tmp, buff_size), buff_size);
  113. EXPECT_EQ(memcmp(buff, tmp, buff_size), 0);
  114. }
  115. }
  116. }
  117. TEST(testCase, cb_ringbuffer_test05)
  118. {
  119. cb_ringbuffer_t ringbuff;
  120. cb_ringbuffer_t* rb;
  121. char buff[8];
  122. char read_buf[sizeof(buff) * 2];
  123. char src_buf[sizeof(buff) * 2];
  124. unsigned int buff_size;
  125. for (unsigned int i = 0; i < sizeof(src_buf); i++)
  126. {
  127. src_buf[i] = (char)(i & 0xff);
  128. }
  129. rb = cb_ringbuffer_init(&ringbuff, buff, sizeof(buff));
  130. for (unsigned int i = 0; i < sizeof(buff) * 2; i++)
  131. {
  132. for (unsigned int j = 0; j < i; j++)
  133. {
  134. cb_ringbuffer_overwrite(rb, &src_buf[j], 1);
  135. }
  136. if (i < sizeof(buff))
  137. {
  138. buff_size = i;
  139. }
  140. else
  141. {
  142. buff_size = sizeof(buff);
  143. }
  144. EXPECT_EQ(cb_ringbuffer_read(rb, read_buf, i), buff_size);
  145. if (i < sizeof(buff))
  146. {
  147. for (unsigned j = 0; j < buff_size; j++)
  148. {
  149. EXPECT_EQ(read_buf[j], src_buf[j]);
  150. }
  151. }
  152. else
  153. {
  154. for (unsigned j = 0; j < buff_size; j++)
  155. {
  156. EXPECT_EQ(read_buf[j], src_buf[j + i - sizeof(buff)]);
  157. }
  158. }
  159. }
  160. }