re PR tree-optimization/16728 (std::set tests for allocator/insert core in make check-performance)
2004-10-31 Benjamin Kosnik <bkoz@redhat.com> PR c++/16728 * testsuite/23_containers/set/modifiers/16728.cc: New. From-SVN: r89921
This commit is contained in:
parent
7a6336aab4
commit
8d511b9097
@ -1,3 +1,8 @@
|
||||
2004-10-31 Benjamin Kosnik <bkoz@redhat.com>
|
||||
|
||||
PR c++/16728
|
||||
* testsuite/23_containers/set/modifiers/16728.cc: New.
|
||||
|
||||
2004-10-30 Paolo Carlini <pcarlini@suse.de>
|
||||
|
||||
* include/ext/bitmap_allocator.h (allocate(size_type)): Minor tweak.
|
||||
|
96
libstdc++-v3/testsuite/23_containers/set/modifiers/16728.cc
Normal file
96
libstdc++-v3/testsuite/23_containers/set/modifiers/16728.cc
Normal file
@ -0,0 +1,96 @@
|
||||
// Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the
|
||||
// Free Software Foundation; either version 2, or (at your option)
|
||||
// any later version.
|
||||
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License along
|
||||
// with this library; see the file COPYING. If not, write to the Free
|
||||
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
// USA.
|
||||
|
||||
// As a special exception, you may use this file as part of a free software
|
||||
// library without restriction. Specifically, if other files instantiate
|
||||
// templates or use macros or inline functions from this file, or you compile
|
||||
// this file and link it with other files to produce an executable, this
|
||||
// file does not by itself cause the resulting executable to be covered by
|
||||
// the GNU General Public License. This exception does not however
|
||||
// invalidate any other reasons why the executable file might be covered by
|
||||
// the GNU General Public License.
|
||||
|
||||
/*
|
||||
* The goal with this application is to compare the performance
|
||||
* between different std::allocator implementations. The results are
|
||||
* influenced by the underlying allocator in the "C" library, malloc.
|
||||
*/
|
||||
|
||||
#include <set>
|
||||
#include <sstream>
|
||||
#include <testsuite_performance.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
typedef int test_type;
|
||||
|
||||
// The number of iterations to be performed.
|
||||
int iterations = 10000;
|
||||
|
||||
// The number of values to insert in the container, 32 will cause 5
|
||||
// (re)allocations to be performed (sizes 4, 8, 16, 32 and 64)
|
||||
// This means that all allocations are within _MAX_BYTES = 128 as
|
||||
// defined in stl_alloc.h for __pool_alloc. Whether or not this
|
||||
// value is relevant in "the real world" or not I don't know and
|
||||
// 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()
|
||||
{
|
||||
Container obj;
|
||||
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.end(), ++test_value);
|
||||
++test_iterations;
|
||||
}
|
||||
}
|
||||
|
||||
template<typename Container>
|
||||
void
|
||||
test_container(Container obj, bool run_threaded = false)
|
||||
{
|
||||
do_loop<Container>();
|
||||
std::ostringstream comment;
|
||||
if (run_threaded)
|
||||
comment << "4-way threaded iterations: " << iterations*4 << '\t';
|
||||
else
|
||||
comment << "iterations: " << iterations << '\t';
|
||||
}
|
||||
|
||||
// http://gcc.gnu.org/ml/libstdc++/2001-05/msg00105.html
|
||||
// http://gcc.gnu.org/ml/libstdc++/2003-05/msg00231.html
|
||||
int main(void)
|
||||
{
|
||||
typedef less<test_type> compare_type;
|
||||
test_container(set<test_type, compare_type>());
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user