blob: f75df77235ed65fcbc09cfa7aaadeabd717f01d4 [file] [log] [blame]
#include <deque>
#include <stdio.h>
#include <sys/time.h>
typedef std::deque<int> list_type;
suseconds_t delete_list( list_type *list, int l_size, bool print )
{
timeval start;
timeval end;
gettimeofday( &start, NULL );
delete list;
gettimeofday( &end, NULL );
if ( print )
fprintf( stderr, "List deletion of %d elements took: %d s, %d us\n", l_size,
(end.tv_sec-start.tv_sec), (end.tv_usec-start.tv_usec) );
return( end.tv_usec-start.tv_usec );
}
suseconds_t new_list( int l_size, bool print, list_type **foo )
{
int i;
timeval start;
timeval end;
*foo = new list_type;
gettimeofday( &start, NULL );
for( i = 0; i < l_size; i++ )
(*foo)->push_back( i );
gettimeofday( &end, NULL );
if ( print )
fprintf( stderr, "List creation of %d elements took: %d s, %d us\n", l_size,
(end.tv_sec-start.tv_sec), (end.tv_usec-start.tv_usec) );
return( end.tv_usec-start.tv_usec );
}
suseconds_t remove_elements( list_type *foo, bool front, bool print )
{
timeval start;
timeval end;
int l_size = foo->size();
if ( front )
{
gettimeofday( &start, NULL );
while( !foo->empty() )
foo->pop_front();
gettimeofday( &end, NULL );
}
else
{
gettimeofday( &start, NULL );
while( !foo->empty() )
foo->pop_back();
gettimeofday( &end, NULL );
}
if ( print )
fprintf( stderr, "Removal of %d from %s elements took: %d s, %d us\n", l_size, front ? "front" : "back",
(end.tv_sec-start.tv_sec), (end.tv_usec-start.tv_usec) );
delete foo;
return( end.tv_usec-start.tv_usec );
}
suseconds_t iterate_list( list_type *foo, bool print )
{
timeval start;
timeval end;
list_type::iterator iter;
list_type::iterator iter_end = foo->end();
gettimeofday( &start, NULL );
for( iter = foo->begin(); iter != iter_end; ++iter );
{
int m = *iter;
}
gettimeofday( &end, NULL );
if ( print )
fprintf( stderr, "Iteration of %d elements took: %d s, %d us\n", foo->size(),
(end.tv_sec-start.tv_sec), (end.tv_usec-start.tv_usec) );
delete foo;
return( end.tv_usec-start.tv_usec );
}
void test_list( int l_size )
{
list_type *foo;
double blah = 0;
double blah2;
int i;
blah = 0;
blah2 = 0;
for ( i = 0; i < 30; i++ )
{
blah += new_list( l_size, false, &foo );
blah2 += delete_list( foo, l_size, false );
}
blah = blah / i;
blah2 = blah2 / i;
fprintf( stderr, "List creation of %d elements took: %f us\n", l_size, blah );
fprintf( stderr, "List deletion of %d elements took: %f us\n", l_size, blah2 );
blah = 0;
for ( i = 0; i < 30; i++ )
{
new_list( l_size, false, &foo );
blah += remove_elements( foo, true, false );
}
blah = blah / i;
fprintf( stderr, "Remove of %d elements from FRONT took: %f us\n", l_size, blah );
blah = 0;
for ( i = 0; i < 30; i++ )
{
new_list( l_size, false, &foo );
blah += remove_elements( foo, false, false );
}
blah = blah / i;
fprintf( stderr, "Remove of %d elements from BACK took: %f us\n", l_size, blah );
blah = 0;
for ( i = 0; i < 30; i++ )
{
new_list( l_size, false, &foo );
blah += iterate_list( foo, false );
}
blah = blah / i;
fprintf( stderr, "Iteration of %d elements took: %f us\n", l_size, blah );
fprintf( stderr, "\n" );
}
int main( int argc, char *argv[] )
{
test_list( 10 );
test_list( 100 );
test_list( 1000 );
test_list( 10000 );
return 0;
}