Commit 00052a60 authored by Dick Hollenbeck's avatar Dick Hollenbeck
Browse files

add container_test

parent 9d080b08
Loading
Loading
Loading
Loading
+11 −0
Original line number Original line Diff line number Diff line

2012-Jan-5 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
++all
    Ki_PageDescr was re-written as a proper C++ class and renamed to PAGE_INFO.
    It describes paper.  The m_Offset field was dropped since it was only used
    in HPGL plotting within EESCHEMA.  PAGE_INFO instance was moved out of
    BASE_SCREEN (which is on its way out) into both SCH_SCREEN and BOARD.


KiCad ChangeLog 2011
KiCad ChangeLog 2011
====================
====================


Please add newer entries at the top, list the date and your name with
Please add newer entries at the top, list the date and your name with
email address.
email address.



2011-Dec-19, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
2011-Dec-19, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
================================================================================
================================================================================
Pcbnew:
Pcbnew:

container_test.cpp

0 → 100644
+131 −0
Original line number Original line Diff line number Diff line

#include <base_struct.h>
#include <boost/ptr_container/ptr_vector.hpp>
#include <deque>
#include <dlist.h>
#include <time.h>


#define TEST_NODES      100000000


//typedef std::vector<EDA_ITEM*>       EDA_ITEMV;
//typedef std::deque<EDA_ITEM*>        EDA_ITEMV;
typedef boost::ptr_vector<EDA_ITEM>  EDA_ITEMV;


void heap_warm_up();


/**
 * Function GetRunningMicroSecs
 * returns current relative time in microsecs.
 */
unsigned GetRunningMicroSecs()
{
    struct timespec	now;

    clock_gettime( CLOCK_MONOTONIC, &now );

    unsigned usecs = now.tv_nsec/1000 + now.tv_sec * 1000 * 1000;
    return usecs;
}


int main( int argc, char** argv )
{
    EDA_ITEMV       v;
    DLIST<EDA_ITEM> dlist;

    unsigned vAllocStart;
    unsigned vAllocStop;
    unsigned vIterateStart;
    unsigned vIterateStop;

    unsigned dAllocStart;
    unsigned dAllocStop;
    unsigned dIterateStart;
    unsigned dIterateStop;

    heap_warm_up();

    vAllocStart = GetRunningMicroSecs();

    for( int i=0;  i<TEST_NODES;  ++i )
    {
        v.push_back( new EDA_ITEM( NOT_USED ) );
    }

    vAllocStop = GetRunningMicroSecs();
    vIterateStart = vAllocStop;

    for( EDA_ITEMV::const_iterator it = v.begin();  it != v.end();  ++it )
    {
        if( it->Type() == -22 )
        {
            printf( "never this\n" );
            break;
        }
    }

    vIterateStop = GetRunningMicroSecs();

#if 0
    for( int i=0; i<TEST_NODES;  ++i )
    {
        delete v[i];
    }
#endif

    v.clear();


    dAllocStart = GetRunningMicroSecs();

    for( int i=0;  i<TEST_NODES;  ++i )
    {
        dlist.PushBack( new EDA_ITEM( NOT_USED ) );
    }

    dAllocStop = GetRunningMicroSecs();
    dIterateStart = dAllocStop;

    for( const EDA_ITEM* it = dlist;  it;  it = it->Next() )
    {
        if( it->Type() == -22 )
        {
            printf( "never this\n" );
            break;
        }
    }

    dIterateStop = GetRunningMicroSecs();

    printf( "vector alloc: %u usecs  iterate: %u usecs\n",
            vAllocStop - vAllocStart,
            vIterateStop - vIterateStart );

    printf( "dlist alloc: %u usecs  iterate: %u usecs\n",
            dAllocStop - dAllocStart,
            dIterateStop - dIterateStart );
}


void heap_warm_up()
{
    // dry run allocate enough object for process to obtain all memory needed

    EDA_ITEMV  vec;

    for( int i=0; i<TEST_NODES;  ++i )
    {
        vec.push_back( new EDA_ITEM( NOT_USED ) );
    }

    for( int i=0; i<TEST_NODES;  ++i )
    {
        // delete vec[i];
    }

    vec.clear();
}