#include "RingBuffer.h" #include "asserts.h" static void testConstruct() { RingBuffer rb; assert(rb.empty()); assert(!rb.full()); RingBuffer rb2; } static void testSimpleAccess() { RingBuffer rb; rb.push(55); assert(!rb.empty()); assert(!rb.full()); int x = rb.pop(); assertEQ(x, 55); assert(rb.empty()); assert(!rb.full()); } static void testMultiAccess() { RingBuffer rb; rb.push(1234); rb.push(5678); assert(!rb.empty()); assert(!rb.full()); int x = rb.pop(); assertEQ(x, 1234); assert(!rb.empty()); assert(!rb.full()); x = rb.pop(); assertEQ(x, 5678); assert(rb.empty()); assert(!rb.full()); } static void testWrap() { RingBuffer rb; rb.push(1234); rb.push(5678); rb.pop(); rb.pop(); rb.push(1); rb.push(2); rb.push(3); assertEQ(rb.pop(), 1); assertEQ(rb.pop(), 2); assertEQ(rb.pop(), 3); assert(rb.empty()); } static void testFull() { RingBuffer rb; rb.push(1234); rb.push(5678); rb.pop(); rb.pop(); rb.push(1); rb.push(2); rb.push(3); rb.push(4); assert(rb.full()); assert(!rb.empty()); assertEQ(rb.pop(), 1); assertEQ(rb.pop(), 2); assertEQ(rb.pop(), 3); assertEQ(rb.pop(), 4); assert(rb.empty()); assert(!rb.full()); } static void testOne() { const char * p = "foo"; RingBuffer rb; rb.push(p); assert(!rb.empty()); assert(rb.full()); assertEQ(rb.pop(), p); assert(rb.empty()); assert(!rb.full()); } void testRingBuffer() { testConstruct(); testSimpleAccess(); testMultiAccess(); testWrap(); testFull(); testOne(); } /***********************************************************************************************/ #include "ManagedPool.h" static void testMP0() { ManagedPool mp; assert(mp.full()); assert(!mp.empty()); } static void testMP_access() { ManagedPool mp; int* p = mp.pop(); *p = 77; mp.push(p); assert(mp.full()); p = mp.pop(); assertEQ(*p, 77); } static int count = 0; class SimpleObj { public: SimpleObj() { ++count; } ~SimpleObj() { --count; } }; static void testMP_mem() { assertEQ(count, 0); { assertEQ(count, 0); ManagedPool mp; assertEQ(count, 4); } assertEQ(count, 0); } static void testMP_mem2() { assertEQ(count, 0); { assertEQ(count, 0); ManagedPool mp; assertEQ(count, 4); mp.pop(); mp.pop(); // make sure the ones we remove still get destroyed } assertEQ(count, 0); } void testManagedPool() { testMP0(); testMP_access(); testMP_mem(); testMP_mem2(); }