summaryrefslogtreecommitdiff
path: root/tools/container_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/container_test.cpp')
-rw-r--r--tools/container_test.cpp132
1 files changed, 132 insertions, 0 deletions
diff --git a/tools/container_test.cpp b/tools/container_test.cpp
new file mode 100644
index 0000000..3b65dad
--- /dev/null
+++ b/tools/container_test.cpp
@@ -0,0 +1,132 @@
+
+#include <base_struct.h>
+#include <boost/ptr_container/ptr_vector.hpp>
+#include <deque>
+#include <dlist.h>
+#include <time.h>
+#include <common.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;
+
+class MY_ITEM : public EDA_ITEM
+{
+public:
+
+ MY_ITEM( KICAD_T id ) :
+ EDA_ITEM( id )
+ {}
+
+
+#if defined(DEBUG)
+ void Show( int nestLevel, std::ostream& os ) const
+ {
+ ShowDummy( os );
+ }
+#endif
+};
+
+
+void heap_warm_up();
+
+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 MY_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 MY_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 MY_ITEM( NOT_USED ) );
+ }
+
+ for( int i=0; i<TEST_NODES; ++i )
+ {
+ // delete vec[i];
+ }
+
+ vec.clear();
+}