You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

185 lines
2.8KB

  1. #include "RingBuffer.h"
  2. #include "asserts.h"
  3. static void testConstruct()
  4. {
  5. RingBuffer<int, 4> rb;
  6. assert(rb.empty());
  7. assert(!rb.full());
  8. RingBuffer<char *, 1> rb2;
  9. }
  10. static void testSimpleAccess()
  11. {
  12. RingBuffer<int, 4> rb;
  13. rb.push(55);
  14. assert(!rb.empty());
  15. assert(!rb.full());
  16. int x = rb.pop();
  17. assertEQ(x, 55);
  18. assert(rb.empty());
  19. assert(!rb.full());
  20. }
  21. static void testMultiAccess()
  22. {
  23. RingBuffer<int, 4> rb;
  24. rb.push(1234);
  25. rb.push(5678);
  26. assert(!rb.empty());
  27. assert(!rb.full());
  28. int x = rb.pop();
  29. assertEQ(x, 1234);
  30. assert(!rb.empty());
  31. assert(!rb.full());
  32. x = rb.pop();
  33. assertEQ(x, 5678);
  34. assert(rb.empty());
  35. assert(!rb.full());
  36. }
  37. static void testWrap()
  38. {
  39. RingBuffer<int, 4> rb;
  40. rb.push(1234);
  41. rb.push(5678);
  42. rb.pop();
  43. rb.pop();
  44. rb.push(1);
  45. rb.push(2);
  46. rb.push(3);
  47. assertEQ(rb.pop(), 1);
  48. assertEQ(rb.pop(), 2);
  49. assertEQ(rb.pop(), 3);
  50. assert(rb.empty());
  51. }
  52. static void testFull()
  53. {
  54. RingBuffer<int, 4> rb;
  55. rb.push(1234);
  56. rb.push(5678);
  57. rb.pop();
  58. rb.pop();
  59. rb.push(1);
  60. rb.push(2);
  61. rb.push(3);
  62. rb.push(4);
  63. assert(rb.full());
  64. assert(!rb.empty());
  65. assertEQ(rb.pop(), 1);
  66. assertEQ(rb.pop(), 2);
  67. assertEQ(rb.pop(), 3);
  68. assertEQ(rb.pop(), 4);
  69. assert(rb.empty());
  70. assert(!rb.full());
  71. }
  72. static void testOne()
  73. {
  74. const char * p = "foo";
  75. RingBuffer<const char*, 1> rb;
  76. rb.push(p);
  77. assert(!rb.empty());
  78. assert(rb.full());
  79. assertEQ(rb.pop(), p);
  80. assert(rb.empty());
  81. assert(!rb.full());
  82. }
  83. void testRingBuffer()
  84. {
  85. testConstruct();
  86. testSimpleAccess();
  87. testMultiAccess();
  88. testWrap();
  89. testFull();
  90. testOne();
  91. }
  92. /***********************************************************************************************/
  93. #include "ManagedPool.h"
  94. static void testMP0()
  95. {
  96. ManagedPool<int, 4> mp;
  97. assert(mp.full());
  98. assert(!mp.empty());
  99. }
  100. static void testMP_access()
  101. {
  102. ManagedPool<int, 1> mp;
  103. int* p = mp.pop();
  104. *p = 77;
  105. mp.push(p);
  106. assert(mp.full());
  107. p = mp.pop();
  108. assertEQ(*p, 77);
  109. }
  110. static int count = 0;
  111. class SimpleObj
  112. {
  113. public:
  114. SimpleObj()
  115. {
  116. ++count;
  117. }
  118. ~SimpleObj()
  119. {
  120. --count;
  121. }
  122. };
  123. static void testMP_mem()
  124. {
  125. assertEQ(count, 0);
  126. {
  127. assertEQ(count, 0);
  128. ManagedPool<SimpleObj, 4> mp;
  129. assertEQ(count, 4);
  130. }
  131. assertEQ(count, 0);
  132. }
  133. static void testMP_mem2()
  134. {
  135. assertEQ(count, 0);
  136. {
  137. assertEQ(count, 0);
  138. ManagedPool<SimpleObj, 4> mp;
  139. assertEQ(count, 4);
  140. mp.pop();
  141. mp.pop(); // make sure the ones we remove still get destroyed
  142. }
  143. assertEQ(count, 0);
  144. }
  145. void testManagedPool()
  146. {
  147. testMP0();
  148. testMP_access();
  149. testMP_mem();
  150. testMP_mem2();
  151. }