Code Search for Developers
 
 
  

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

redshed

Code for Mac+WebObjects.

Project homepage: http://sourceforge.net/projects/redshed
Programming language(s): C,Java,Objective C
License: other

  CircularBuffer.xcodeproj/
    project.pbxproj
    wolf.mode1
    wolf.pbxuser
  CircularBuffer.c
  CircularBuffer.h
  TestCircularBuffer.c