TestCircularBuffer.c from redshed at Krugle
Show TestCircularBuffer.c syntax highlighted
#include "CircularBuffer.h"
#include <assert.h>
#include <string.h>
#define assertEqual(A,B) assert((A)==(B))
static int StringEqualsCString(const void *strA, size_t strALength, const char *cstrB) {
size_t cstrBLength = strlen(cstrB);
if (strALength != cstrBLength)
return 0;
return bcmp(strA, cstrB, strALength) == 0;
}
/****************************************************************************************
Commenter Date Comment
--------- ----------------- -----------------------------------------------------
wolf Fri, Oct 18, 2002 Created.
************************************************************************************/
#define cStrBuffer( s ) s, sizeof( s ) - 1
#define ssizeof( s ) (sizeof( s ) - 1)
int main (int argc, const char * argv[]) {
char buffer[] = "onetwothreefou";
size_t bufferSize = sizeof( buffer ) - 1;
CircularBuffer circularBuffer;
char oneIn[] = "one", oneOut[] = "___";
char twoIn[] = "two", twoOut[] = "___", oneTwoOut[] = "______";
char threeIn[] = "three", threeOut[] = "_____";
char fourIn[] = "four", fourOut[] = "____";
int i;
size_t sizeResult;
int booleanResult;
CircularBufferInit( &circularBuffer, cStrBuffer( buffer ) );
// Test empty virgin data size.
sizeResult = CircularBufferDataSize( &circularBuffer );
assertEqual( sizeResult, 0 );
// Test empty virgin space size.
sizeResult = CircularBufferSpaceSize( &circularBuffer );
assertEqual( sizeResult, bufferSize );
// Test empty virgin read.
sizeResult = CircularBufferRead( &circularBuffer, cStrBuffer( oneOut ) );
assertEqual( sizeResult, 0 );
// Test empty virgin write.
booleanResult = CircularBufferWrite( &circularBuffer, cStrBuffer( oneIn ) );
assert( booleanResult );
// Test nonempty data size.
sizeResult = CircularBufferDataSize( &circularBuffer );
assertEqual( sizeResult, ssizeof( oneIn ) );
// Test nonempty sapce size.
sizeResult = CircularBufferSpaceSize( &circularBuffer );
assertEqual( sizeResult, bufferSize - ssizeof( oneIn ) );
// Test read.
sizeResult = CircularBufferRead( &circularBuffer, cStrBuffer( oneOut ) );
assertEqual( sizeResult, ssizeof( oneIn ) );
assert( StringEqualsCString( cStrBuffer( oneOut ), "one"));
// Test double write & single read, 1024 times.
for( i = 1024; i > 0; i-- ) {
booleanResult = CircularBufferWrite( &circularBuffer, cStrBuffer( oneIn ) );
assert( booleanResult );
booleanResult = CircularBufferWrite( &circularBuffer, cStrBuffer( twoIn ) );
assert( booleanResult );
sizeResult = CircularBufferRead( &circularBuffer, cStrBuffer( oneTwoOut ) );
assertEqual( sizeResult, ssizeof( oneTwoOut ) );
assert( StringEqualsCString( cStrBuffer( oneTwoOut ), "onetwo"));
}
// Test one failed read, three successful writes, one failed write, three successful
// reads, one successful write and one successful read, 1024 times.
for( i = 1024; i > 0; i-- ) {
// Attempt to read one and fail (no data).
sizeResult = CircularBufferRead( &circularBuffer, cStrBuffer( oneOut ) );
assertEqual( sizeResult, 0 );
// Write one.
booleanResult = CircularBufferWrite( &circularBuffer, cStrBuffer( oneIn ) );
assert( booleanResult );
sizeResult = CircularBufferDataSize( &circularBuffer );
assertEqual( sizeResult, ssizeof( oneIn ) );
sizeResult = CircularBufferSpaceSize( &circularBuffer );
assertEqual( sizeResult, bufferSize - ssizeof( oneIn ) );
// Write two.
booleanResult = CircularBufferWrite( &circularBuffer, cStrBuffer( twoIn ) );
assert( booleanResult );
sizeResult = CircularBufferDataSize( &circularBuffer );
assertEqual( sizeResult, ssizeof( oneIn ) + ssizeof( twoIn ) );
sizeResult = CircularBufferSpaceSize( &circularBuffer );
assertEqual( sizeResult, bufferSize - (ssizeof( oneIn ) + ssizeof( twoIn )) );
// Write three.
booleanResult = CircularBufferWrite( &circularBuffer, cStrBuffer( threeIn ) );
assert( booleanResult );
sizeResult = CircularBufferDataSize( &circularBuffer );
assertEqual( sizeResult, ssizeof( oneIn ) + ssizeof( twoIn ) + ssizeof( threeIn ) );
sizeResult = CircularBufferSpaceSize( &circularBuffer );
assertEqual( sizeResult, bufferSize - (ssizeof( oneIn ) + ssizeof( twoIn ) + ssizeof( threeIn )) );
// Attempt to write four and fail. (buffer full)
booleanResult = CircularBufferWrite( &circularBuffer, cStrBuffer( fourIn ) );
assert( !booleanResult );
sizeResult = CircularBufferDataSize( &circularBuffer );
assertEqual( sizeResult, ssizeof( oneIn ) + ssizeof( twoIn ) + ssizeof( threeIn ) );
sizeResult = CircularBufferSpaceSize( &circularBuffer );
assertEqual( sizeResult, bufferSize - (ssizeof( oneIn ) + ssizeof( twoIn ) + ssizeof( threeIn )) );
// Read one.
sizeResult = CircularBufferRead( &circularBuffer, cStrBuffer( oneOut ) );
assertEqual( sizeResult, ssizeof( oneOut ) );
assert( StringEqualsCString( cStrBuffer( oneOut ), "one"));
sizeResult = CircularBufferDataSize( &circularBuffer );
assertEqual( sizeResult, ssizeof( twoIn ) + ssizeof( threeIn ) );
sizeResult = CircularBufferSpaceSize( &circularBuffer );
assertEqual( sizeResult, bufferSize - (ssizeof( twoIn ) + ssizeof( threeIn )) );
// Read two.
sizeResult = CircularBufferRead( &circularBuffer, cStrBuffer( twoOut ) );
assertEqual( sizeResult, ssizeof( twoOut ) );
assert( StringEqualsCString( cStrBuffer( twoOut ), "two"));
sizeResult = CircularBufferDataSize( &circularBuffer );
assertEqual( sizeResult, ssizeof( threeIn ) );
sizeResult = CircularBufferSpaceSize( &circularBuffer );
assertEqual( sizeResult, bufferSize - ssizeof( threeIn ) );
// Read three.
sizeResult = CircularBufferRead( &circularBuffer, cStrBuffer( threeOut ) );
assertEqual( sizeResult, ssizeof( threeOut ) );
assert( StringEqualsCString( cStrBuffer( threeOut ), "three"));
sizeResult = CircularBufferDataSize( &circularBuffer );
assertEqual( sizeResult, 0 );
sizeResult = CircularBufferSpaceSize( &circularBuffer );
assertEqual( sizeResult, bufferSize );
// Successfully write four this time.
booleanResult = CircularBufferWrite( &circularBuffer, cStrBuffer( fourIn ) );
assert( booleanResult );
sizeResult = CircularBufferDataSize( &circularBuffer );
assertEqual( sizeResult, ssizeof( fourIn ) );
sizeResult = CircularBufferSpaceSize( &circularBuffer );
assertEqual( sizeResult, bufferSize - ssizeof( fourIn ) );
// Read it back out.
sizeResult = CircularBufferRead( &circularBuffer, cStrBuffer( fourOut ) );
assertEqual( sizeResult, ssizeof( fourOut ) );
assert( StringEqualsCString( cStrBuffer( fourOut ), "four"));
}
sizeResult++;
printf("success\n");
return 0;
}
See more files for this project here