int Test::Main() { TEST_INIT("generationhandler_test"); TEST_DO(requireThatGenerationCanBeIncreased()); TEST_DO(requireThatReadersCanTakeGuards()); TEST_DO(requireThatGuardsCanBeCopied()); TEST_DO(requireThatTheFirstUsedGenerationIsCorrect()); TEST_DO(requireThatGenerationCanGrowLarge()); TEST_DONE(); }
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; }