int
Test::Main()
{
    TEST_INIT("generationhandler_test");

    TEST_DO(requireThatGenerationCanBeIncreased());
    TEST_DO(requireThatReadersCanTakeGuards());
    TEST_DO(requireThatGuardsCanBeCopied());
    TEST_DO(requireThatTheFirstUsedGenerationIsCorrect());
    TEST_DO(requireThatGenerationCanGrowLarge());

    TEST_DONE();
}
Example #2
0
int main( int argc, char ** argv ) {

	size_t requestNumber = 1000000000;
	int c;	

	while( (c = getopt( argc, argv, "i:" )) != -1 ) {
		switch( c ) {
		case ('i'):
			requestNumber = strtoll( optarg, NULL, 10 );
			break;
		case ('?'):
			if( optopt == 'i' ) {
				fprintf( stderr, "-i requires an iteration argument\n" );
			} else {
				fprintf( stderr, "Unknown option '-%c'.\n", optopt );
			}
			return -1;
		default:
			abort();
		}
	}

	/*if( argc != 2 ) {
		fprintf( stderr, "Too many parameters %d--Takes only iterations.\n", argc - 1 );
		return -1;
	}*/

	const size_t iterations = requestNumber; //strtoll( argv[ 1 ], NULL, 10 );

	enum Tests {
		BRANCH,
		JUMP,
		CONTROL,
		NTESTS
	};

	struct timeval begin;
	struct timeval end;
	struct timeval results[ NTESTS ];

	/* branch test */
	size_t * branchCondition = NULL;
	void * tmpPtr;

	gettimeofday( &begin, NULL );

	for( size_t itr = 0; itr < iterations; itr++ ) {
		if( branchCondition == NULL ) {
			branchCondition = TEST_DO( sizeof( size_t ) );
		}
		tmpPtr = TEST_DO( sizeof( size_t ) );
		TEST_UNDO( tmpPtr );
	}

	gettimeofday( &end, NULL );

	TEST_UNDO( branchCondition );	

	getDuration( &begin, &end, &results[ BRANCH ] );

	/* jump test */
	void * (*mallocPtr)( size_t ) = &TEST_DO;
	void ( * freePtr )( void * ) = &TEST_UNDO;

	gettimeofday( &begin, NULL );

	for( size_t itr = 0; itr < iterations; itr++ ) {
		tmpPtr = mallocPtr( sizeof( size_t ) );
		freePtr( tmpPtr );
	}

	gettimeofday( &end, NULL );

	getDuration( &begin, &end, &results[ JUMP ] );

	/* direct test */
	gettimeofday( &begin, NULL );

	for( size_t itr = 0; itr < iterations; itr++ ) {
		tmpPtr = TEST_DO( sizeof( size_t ) );
		TEST_UNDO( tmpPtr );
	}

	gettimeofday( &end, NULL );

	getDuration( &begin, &end, &results[ CONTROL ] );

	const char * testNames[ NTESTS ] = { "Branch", "Jump", "Control" };

	/* results */
	for( size_t index = 0; index < NTESTS; index++ ) {
		printf( "Test '%s': %llu.%05llu sec for %llu iterations\n", 
			testNames[ index ],
			(unsigned long long) results[ index ].tv_sec, 
			(unsigned long long) results[ index ].tv_usec, 
			(unsigned long long) iterations );
	}

	return 0;
}