allocator.cc: Add map, deque, set tests.
authorFelix Yen <fwy@alumni.brown.edu>
Wed, 4 Feb 2004 06:21:21 +0000 (06:21 +0000)
committerBenjamin Kosnik <bkoz@gcc.gnu.org>
Wed, 4 Feb 2004 06:21:21 +0000 (06:21 +0000)
2004-02-03  Felix Yen  <fwy@alumni.brown.edu>
    Benjamin Kosnik  <bkoz@redhat.com>

* testsuite/performance/20_util/allocator.cc: Add map,
deque, set tests.
* testsuite/performance/20_util/allocator_thread.cc: Same.

Co-Authored-By: Benjamin Kosnik <bkoz@redhat.com>
From-SVN: r77225

libstdc++-v3/ChangeLog
libstdc++-v3/testsuite/performance/20_util/allocator.cc
libstdc++-v3/testsuite/performance/20_util/allocator_thread.cc

index 490b1b4..6921ac1 100644 (file)
@@ -1,3 +1,10 @@
+2004-02-03  Felix Yen  <fwy@alumni.brown.edu>
+           Benjamin Kosnik  <bkoz@redhat.com>
+       
+       * testsuite/performance/20_util/allocator.cc: Add map,
+       deque, set tests.
+       * testsuite/performance/20_util/allocator_thread.cc: Same.
+       
 2004-02-03  Paolo Carlini  <pcarlini@suse.de>
 
        * include/bits/basic_string.h (insert(iterator)): Remove,
index 5f864ea..7a27c2f 100644 (file)
@@ -35,6 +35,9 @@
 
 #include <vector>
 #include <list>
+#include <map>
+#include <deque>
+#include <set>
 #include <typeinfo>
 #include <sstream>
 #include <ext/mt_allocator.h>
@@ -44,9 +47,6 @@
 #include <testsuite_performance.h>
 
 using namespace std;
-using __gnu_cxx::__mt_alloc;
-using __gnu_cxx::new_allocator;
-using __gnu_cxx::malloc_allocator;
 
 typedef int test_type;
 
@@ -61,18 +61,27 @@ int iterations = 100000;
 // should probably be investigated in more detail.
 int insert_values = 128;
 
+template<typename TestType>
+  struct value_type : public pair<TestType, TestType>
+  {
+    value_type() : pair<TestType, TestType>(0, 0) { }
+
+    inline value_type operator++() { return ++this->first, *this; }
+    inline operator TestType() const { return this->first; }
+  };
+
 template<typename Container>
   int
-  do_loop()
+  do_loop(Container& obj)
   {
     int test_iterations = 0;
     try
       {
-       Container obj;
+       value_type<test_type> test_value;
        while (test_iterations < iterations)
          {
            for (int j = 0; j < insert_values; ++j)
-             obj.push_back(test_iterations);
+             obj.insert(obj.end(), ++test_value);
            ++test_iterations;
          }
       }
@@ -94,7 +103,7 @@ template<typename Container>
     resource_counter resource;
     clear_counters(time, resource);
     start_counters(time, resource);
-    int test_iterations = do_loop<Container>();
+    int test_iterations = do_loop(obj);
     stop_counters(time, resource);
  
     std::ostringstream comment;
@@ -109,30 +118,59 @@ template<typename Container>
 // http://gcc.gnu.org/ml/libstdc++/2003-05/msg00231.html
 int main(void)
 {
+  typedef __gnu_cxx::malloc_allocator<test_type> m_alloc_type;
+  typedef __gnu_cxx::new_allocator<test_type> n_alloc_type;
+  typedef __gnu_cxx::__mt_alloc<test_type> so_alloc_type;
+
+#ifdef TEST_B0
+  test_container(vector<test_type, m_alloc_type>());
+#endif
 #ifdef TEST_B1
-  test_container(vector<test_type>());
+  test_container(vector<test_type, n_alloc_type>());
 #endif
 #ifdef TEST_B2
-  test_container(vector<test_type, malloc_allocator<test_type> >());
+  test_container(vector<test_type, so_alloc_type>());
 #endif
+
 #ifdef TEST_B3
-  test_container(vector<test_type, new_allocator<test_type> >());
+  test_container(list<test_type, m_alloc_type>());
 #endif
 #ifdef TEST_B4
-  test_container(vector<test_type, __mt_alloc<test_type> >());
+  test_container(list<test_type, n_alloc_type>());
 #endif
-
 #ifdef TEST_B5
-  test_container(list<test_type>());
+  test_container(list<test_type, so_alloc_type>());
 #endif
+
 #ifdef TEST_B6
-  test_container(list<test_type, malloc_allocator<test_type> >());
+  test_container(deque<test_type, m_alloc_type>());
 #endif
 #ifdef TEST_B7
-  test_container(list<test_type, new_allocator<test_type> >());
+  test_container(deque<test_type, n_alloc_type>());
 #endif
 #ifdef TEST_B8
-  test_container(list<test_type, __mt_alloc<test_type> >());
+  test_container(deque<test_type, so_alloc_type>());
+#endif
+
+  typedef less<test_type> compare_type;
+#ifdef TEST_B9
+  test_container(map<test_type, test_type, compare_type, m_alloc_type>());
+#endif
+#ifdef TEST_B10
+  test_container(map<test_type, test_type, compare_type, n_alloc_type>());
+#endif
+#ifdef TEST_B11
+  test_container(map<test_type, test_type, compare_type, so_alloc_type>());
+#endif
+
+#ifdef TEST_B12
+  test_container(set<test_type, compare_type, m_alloc_type>());
+#endif
+#ifdef TEST_B13
+  test_container(set<test_type, compare_type, n_alloc_type>());
+#endif
+#ifdef TEST_B14
+  test_container(set<test_type, compare_type, so_alloc_type>());
 #endif
 
   return 0;
index e9e8428..b46ee4d 100644 (file)
@@ -35,6 +35,9 @@
 
 #include <vector>
 #include <list>
+#include <map>
+#include <deque>
+#include <set>
 #include <typeinfo>
 #include <sstream>
 #include <pthread.h>
@@ -45,9 +48,6 @@
 #include <testsuite_performance.h>
 
 using namespace std;
-using __gnu_cxx::__mt_alloc;
-using __gnu_cxx::new_allocator;
-using __gnu_cxx::malloc_allocator;
 
 typedef int test_type;
 
@@ -62,6 +62,15 @@ int iterations = 25000;
 // should probably be investigated in more detail.
 int insert_values = 128;
 
+template<typename TestType>
+  struct value_type : public pair<TestType, TestType>
+  {
+    value_type() : pair<TestType, TestType>(0, 0) { }
+
+    inline value_type operator++() { return ++this->first, *this; }
+    inline operator TestType() const { return this->first; }
+  };
+
 template<typename Container>
   void*
   do_loop(void* p = NULL)
@@ -70,19 +79,21 @@ template<typename Container>
     try
       {
        int test_iterations = 0;
+       value_type<test_type> test_value;
        while (test_iterations < iterations)
          {
            for (int j = 0; j < insert_values; ++j)
-             obj.insert(obj.begin(), test_iterations);
+             obj.insert(obj.end(), ++test_value);
            ++test_iterations;
          }
        // NB: Don't use clear() here, instead force deallocation.
         obj = Container();
        test_iterations = 0;
+       test_value = value_type<test_type>();
        while (test_iterations < iterations)
          {
            for (int j = 0; j < insert_values; ++j)
-             obj.insert(obj.begin(), test_iterations);
+             obj.insert(obj.end(), ++test_value);
            ++test_iterations;
          }
       }
@@ -130,30 +141,59 @@ template<typename Container>
 // http://gcc.gnu.org/ml/libstdc++/2003-05/msg00231.html
 int main(void)
 {
+  typedef __gnu_cxx::malloc_allocator<test_type> m_alloc_type;
+  typedef __gnu_cxx::new_allocator<test_type> n_alloc_type;
+  typedef __gnu_cxx::__mt_alloc<test_type> so_alloc_type;
+
+#ifdef TEST_T0
+  test_container(vector<test_type, m_alloc_type>());
+#endif
 #ifdef TEST_T1
-  test_container(vector<test_type>());
+  test_container(vector<test_type, n_alloc_type>());
 #endif
 #ifdef TEST_T2
-  test_container(vector<test_type, malloc_allocator<test_type> >());
+  test_container(vector<test_type, so_alloc_type>());
 #endif
+
 #ifdef TEST_T3
-  test_container(vector<test_type, new_allocator<test_type> >());
+  test_container(list<test_type, m_alloc_type>());
 #endif
 #ifdef TEST_T4
-  test_container(vector<test_type, __mt_alloc<test_type> >());
+  test_container(list<test_type, n_alloc_type>());
 #endif
-
 #ifdef TEST_T5
-  test_container(list<test_type>());
+  test_container(list<test_type, so_alloc_type>());
 #endif
+
 #ifdef TEST_T6
-  test_container(list<test_type, malloc_allocator<test_type> >());
+  test_container(deque<test_type, m_alloc_type>());
 #endif
 #ifdef TEST_T7
-  test_container(list<test_type, new_allocator<test_type> >());
+  test_container(deque<test_type, n_alloc_type>());
 #endif
 #ifdef TEST_T8
-  test_container(list<test_type, __mt_alloc<test_type> >());
+  test_container(deque<test_type, so_alloc_type>());
+#endif
+
+  typedef less<test_type> compare_type;
+#ifdef TEST_T9
+  test_container(map<test_type, test_type, compare_type, m_alloc_type>());
+#endif
+#ifdef TEST_T10
+  test_container(map<test_type, test_type, compare_type, n_alloc_type>());
+#endif
+#ifdef TEST_T11
+  test_container(map<test_type, test_type, compare_type, so_alloc_type>());
+#endif
+
+#ifdef TEST_T12
+  test_container(set<test_type, compare_type, m_alloc_type>());
+#endif
+#ifdef TEST_T13
+  test_container(set<test_type, compare_type, n_alloc_type>());
+#endif
+#ifdef TEST_T14
+  test_container(set<test_type, compare_type, so_alloc_type>());
 #endif
 
   return 0;