|  | 
#include "RingBuffer.h"
#include "asserts.h"
static void testConstruct()
{
    RingBuffer<int, 4> rb;
    assert(rb.empty());
    assert(!rb.full());
    RingBuffer<char *, 1> rb2;
}
static void testSimpleAccess()
{
    RingBuffer<int, 4> 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<int, 4> 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<int, 4> 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<int, 4> 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<const char*, 1> 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<int, 4> mp;
    assert(mp.full());
    assert(!mp.empty());
}
static void testMP_access()
{
    ManagedPool<int, 1> 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<SimpleObj, 4> mp;
        assertEQ(count, 4);
    }
    assertEQ(count, 0);
}
static void testMP_mem2()
{
    assertEQ(count, 0);
    {
        assertEQ(count, 0);
        ManagedPool<SimpleObj, 4> 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();
}
 |