The latest version of this document is always available at
@@ -312,36 +312,6 @@ se_NO.UTF-8 UTF-8
the headers and library files will be moved under
lib/gcc-lib/ instead.
-
You can check the status of the build without installing it using
-
- make check
-
or you can check the status of the installed library using
-
- make check-install
-
in the libbuilddir directory.
- These commands will create a 'testsuite' directory underneath
- libbuilddir containing the results of the tests. We are
- interested in any strange failures of the testsuite; please see
- FAQ 2.4 for which files to examine.
-
-
-
In addition, there are some testing options that are mostly of
- interest to library maintainers and system integrators. As such,
- these tests may not work on all cpu and host combinations. These
- options include, but are not necessarily limited to, the following:
-
-
-
The library ABI can be tested using
-
- make check-abi
-
-
The library can also be tested using a bash script, instead of
- the default dejagnu test harness
+ The directory libsrcdir/testsuite contains the test
+ files, test harness, and utility information for verifying the
+ correctness of C++ library on a given host. It includes the
+ following directories, each named after a specific chapter of
+ the C++ standard, and each containing test files or
+ subdirectories of test files that test for that particular part
+ of the standard.
+
+ In addition, the following directories include test files:
+
+
+
+backward Tests for backwards compatibility and deprecated features.
+demangle Tests for __cxa_demangle, the IA 64 C++ ABI demangler
+ext Tests for extensions.
+performance Tests for performance analysis, and performance regressions.
+thread Tests for threads.
+
+
+
+ Some directories don't have test files, but instead contain
+ auxiliary information:
+
+
+
+config Files for the dejagnu test harness.
+lib Files for the dejagnu test harness.
+libstdc++-v3.dg Files for the dejagnu test harness.
+data Sample text files for testing input and output.
+
+
+
+ Within a directory that includes test files, there may be
+ additional subdirectories, or files: this particular point is in
+ flux. Originally, test cases were appended to one file that
+ represented a particular section of the chapter under test, and
+ was named accordingly. For instance, to test items related to
+ 21.3.6.1 - basic_string::find [lib.string::find]
+ in the standard, the following was used:
+
+
+21_strings/find.cc
+
+
+ However, that practice soon became a liability as the test cases
+ became huge and unwieldy, and testing new or extended
+ functionality (like wide characters or named locales) became
+ frustrating, leading to aggressive pruning of test cases on some
+ platforms that covered up implementation errors. Now, the test
+ suite is converging on a policy of one file, one test case,
+ which solves the above issues and gives finer grained results
+ and more manageable error debugging. As an example, the test case
+ quoted above becomes:
+
+ All new tests should be written with the policy of one test
+ case, one file in mind. At some point the entire testsuite will
+ be converted: the current status is that the 21_string,
+ 22_locale, 27_io, and demangle directories have all been
+ transitioned.
+
+
+
+ In addition, there are some special names and suffixes that are
+ used within the testsuite to designate particular kinds of
+ tests.
+
+
+
+
+ _xin.cc
+
+ This test case expects some kind of interactive input in order
+ to finish or pass. At the moment, the interactive tests are not
+ run by default. Instead, they are run by hand, like:
+
+ This file contains the expected input for the corresponding
+ _xin.cc test case.
+
+
+
+ _neg.cc
+
+ This test case is expected to fail: it's a negative test. At the
+ moment, these are almost always compile time errors.
+
+
+
+ char
+
+ This can either be a directory name or part of a longer file
+ name, and indicates that this file, or the files within this
+ directory are testing the char instantiation of a
+ template.
+
+
+
+ wchar_t
+
+ This can either be a directory name or part of a longer file
+ name, and indicates that this file, or the files within this
+ directory are testing the wchar_t instantiation of
+ a template. Some hosts do not support wchar_t
+ functionality, so for these targets, all of these tests will not
+ be run.
+
+
+
+ performance
+
+ This can either be an enclosing directory name or part of a
+ specific file name. This indicates a test that is used to
+ analyze runtime performance, for performance regression testing,
+ or for other optimization related analysis. At the moment, these
+ test cases are not run by default, and instead assumed to be run
+ manually.
+
+ The testsuite directory also contains some files that implement
+ functionality that is intended to make writing test cases easier,
+ or to avoid duplication, or to provide error checking in a way that
+ is consistent across platforms and test harnesses. A stand-alone
+ executable, called abi_check, and a static library called
+ libv3test are constructed during the build. Both of these
+ items are not installed, and only used during testing.
+
+
+
+ These files include the following functionality:
+
+
+
+
+ abi_check.cc
+
+ Creates the executable abi_check.
+ Used to check correctness of symbol versioning, visibility of
+ exported symbols, and compatibility on symbols in the shared
+ library, for hosts that support this feature. More information
+ can be found in the ABI documentation here
+
+
+
+ testsuite_allocator.h and
+ testsuite_allocator.cc
+
+ Specialized allocators that keep track of construction and destruction
+
+
+
+ testsuite_hooks.h and
+ testsuite_hooks.cc
+
+ A large number of utilities, including:
+
+
+
VERIFY
+
set_memory_limits
+
verify_demangle
+
run_tests_wrapped_locale
+
run_tests_wrapped_env
+
try_named_locale
+
counter
+
copy_constructor
+
assignment_operator
+
destructor
+
copy_tracker
+
pod_char, pod_int and associated char_traits specializations
+
+
+
+
+ printnow.c
+
+ A cross-platform timer for use in one of the older harnesses
+ to determine compilation and link time.
+
+ The first step in making a new test case is to choose the correct
+ directory and file name, given the organization as previously
+ described.
+
+
+
+ All files are copyright the FSF, and GPL'd: this is very
+ important. The first copyright year should correspond to the date
+ the file was checked in to CVS.
+
+
+
+ As per the dejagnu instructions, always return 0 from main to
+ indicate success.
+
+
+
+ A bunch of utility functions and classes have already been
+ abstracted out into the testsuite utility library,
+ libv3test. To use this functionality, just include the
+ appropriate header file: the library will automatically be linked
+ in as part of the testsuite run.
+
+
+
+ For a test that needs to take advantage of the dejagnu test
+ harness, what follows below is a list of special keyword that
+ harness uses. Basically, a test case contains dg-keywords (see
+ dg.exp) indicating what to do and what kinds of behavior are to be
+ expected. New test cases should be written with the new style
+ DejaGnu framework in mind.
+
+
+
+ To ease transition, here is the list of dg-keyword documentation
+ lifted from dg.exp.
+
+
+
+# The currently supported options are:
+#
+# dg-prms-id N
+# set prms_id to N
+#
+# dg-options "options ..." [{ target selector }]
+# specify special options to pass to the tool (eg: compiler)
+#
+# dg-do do-what-keyword [{ target/xfail selector }]
+# `do-what-keyword' is tool specific and is passed unchanged to
+# ${tool}-dg-test. An example is gcc where `keyword' can be any of:
+# preprocess|compile|assemble|link|run
+# and will do one of: produce a .i, produce a .s, produce a .o,
+# produce an a.out, or produce an a.out and run it (the default is
+# compile).
+#
+# dg-error regexp comment [{ target/xfail selector } [{.|0|linenum}]]
+# indicate an error message is expected on this line
+# (the test fails if it doesn't occur)
+# Linenum=0 for general tool messages (eg: -V arg missing).
+# "." means the current line.
+#
+# dg-warning regexp comment [{ target/xfail selector } [{.|0|linenum}]]
+# indicate a warning message is expected on this line
+# (the test fails if it doesn't occur)
+#
+# dg-bogus regexp comment [{ target/xfail selector } [{.|0|linenum}]]
+# indicate a bogus error message use to occur here
+# (the test fails if it does occur)
+#
+# dg-build regexp comment [{ target/xfail selector }]
+# indicate the build use to fail for some reason
+# (errors covered here include bad assembler generated, tool crashes,
+# and link failures)
+# (the test fails if it does occur)
+#
+# dg-excess-errors comment [{ target/xfail selector }]
+# indicate excess errors are expected (any line)
+# (this should only be used sparingly and temporarily)
+#
+# dg-output regexp [{ target selector }]
+# indicate the expected output of the program is
+# (there may be multiple occurrences of this, they are concatenated)
+#
+# dg-final { tcl code }
+# add some tcl code to be run at the end
+# (there may be multiple occurrences of this, they are concatenated)
+# (unbalanced braces must be \-escaped)
+#
+# "{ target selector }" is a list of expressions that determine whether the
+# test succeeds or fails for a particular target, or in some cases whether the
+# option applies for a particular target. If the case of `dg-do' it specifies
+# whether the test case is even attempted on the specified target.
+#
+# The target selector is always optional. The format is one of:
+#
+# { xfail *-*-* ... } - the test is expected to fail for the given targets
+# { target *-*-* ... } - the option only applies to the given targets
+#
+# At least one target must be specified, use *-*-* for "all targets".
+# At present it is not possible to specify both `xfail' and `target'.
+# "native" may be used in place of "*-*-*".
+
+Example 1: Testing compilation only
+// { dg-do compile }
+
+Example 2: Testing for expected warnings on line 36, which all targets fail
+// { dg-warning "string literals" "" { xfail *-*-* } 36
+
+Example 3: Testing for expected warnings on line 36
+// { dg-warning "string literals" "" { target *-*-* } 36
+
+Example 4: Testing for compilation errors on line 41
+// { dg-do compile }
+// { dg-error "no match for" "" { target *-*-* } 41 }
+
+
+
+ More examples can be found in the libstdc++-v3/testsuite/*/*.cc files.
+
There are several ways to run the testsuite. There are two
+ harnesses, one using dejagnu and one using bash. In addition, there
+ is a special rule for checking the ABI of the shared library.
+
+
+
You can check the status of the build without installing it
+ using the dejagnu harness, much like the rest of the gcc tools.
+
+
make check
in the libbuilddir directory.
+
or
+
make check-target-libstdc++-v3
in the
+ gccbuilddir directory.
+
+
+ These commands are equivalent and will create a 'testsuite'
+ directory underneath libbuilddir containing the results
+ of the tests. Two results files will be generated:
+ libstdc++-v3.sum, which is a PASS/FAIL summary for each
+ test, and libstdc++.log which is a log of the exact
+ command line passed to the compiler, the compiler output, and
+ the executable output (if any). In addition, four files are
+ generated that determine what test files are run. These files
+ are:
+
+
+
+
+ testsuite_files
+
This is a list of all the test cases that will be run. Each
+ test case is on a separate line, given with an absolute path
+ from the libsrcdir/testsuite directory.
+
+
+
+
+ testsuite_files_interactive
+
This is a list of all the interactive test cases, using the
+ same format as the file list above. These tests are not run by default.
+
+
+
+
+ testsuite_files_performance
+
This is a list of all the performance test cases, using the
+ same format as the file list above. These tests are not run by default.
+
+
+
+
+ testsuite_wchar_t
+
This file indicates that the host system can run the wchar_t
+ tests, and corresponds to the macro definition
+ _GLIBCPP_USE_WCHAR_T in the file c++config.h.
+
+
+
+
+
+To debug the dejagnu test harness during runs, try invoking with a
+specific argument to the variable RUNTESTFLAGS, as below.
+
+
+There are two ways to run on a simulator: set up DEJAGNU to point to a
+specially crafted site.exp, or pass down --target_board flags.
+
+Example flags to pass down for various embedded builds are as follows:
+
+
In addition, there are some testing options that are mostly of
+ interest to library maintainers and system integrators. As such,
+ these tests may not work on all cpu and host combinations, and must
+ be executed in the libbuilddir directory.
These options
+ include, but are not necessarily limited to, the following:
+
+
+
+ The library can also be tested using a bash script, instead of
+ the default dejagnu test harness.
+
+
+ make check-script
+
+ These commands use the generated test_file lists as above, but
+ run all the tests using both shared and static linking, and in
+ addition provide some additional diffing of expected output
+ files for the input/output tests. (This added diff may or may
+ not be useful or necessary at the moment.) In addition, these
+ tests provide size information for all the generated test cases,
+ so that size data for new compiler or linker features can be
+ collected. At one time timing information was attempted, so that
+ compile speeds, link speeds, etc. could be measured, however at
+ the moment all timing information is currently disabled.
+
+
+
+ make check-script-install
+
As directly above, but tests an installed library, not the
+ library and compiler in the build tree.
+
+
+
+ make check-abi
+
The library ABI can be tested. This involves testing the shared
+ library against an ABI-defining previous version.
+
+
+ We are interested in any strange failures of the
+ testsuite; please see FAQ 2.4
+ for which files to examine.
+
+Shared runs need to be implemented, for targets that support shared libraries.
+
+
+
+Diffing of expected output to standard streams needs to be finished off.
+
+
+
+The V3 testing framework supports, or will eventually support,
+additional keywords for the purpose of easing the job of writing
+test cases. All V3-keywords are of the form @xxx@. Currently plans
+for supported keywords include:
+
+
+ @require@
+ The existence of is essential for the test to complete
+ successfully. For example, a test case foo.C using bar.baz as
+ input file could say
+ // @require@ bar.baz
+ The special variable % stands for the rootname, e.g. the
+ file-name without its `.C' extension. Example of use (taken
+ verbatim from 27_io/filebuf.cc)
+ // @require@ %-*.tst %-*.txt
+
+ @diff@
+ After the test case compiles and ran successfully, diff
+ against , these lists should have the
+ same length. The test fails if diff returns non-zero a pair of
+ files.
+
+
+
+
+
+
+
+
+
diff --git a/libstdc++-v3/testsuite/README b/libstdc++-v3/testsuite/README
deleted file mode 100644
index 07ff9fef4f8..00000000000
--- a/libstdc++-v3/testsuite/README
+++ /dev/null
@@ -1,207 +0,0 @@
-We're in the process of converting the existing testsuite machinery to
-use the new style DejaGnu framework. Eventually, we'll abandon
-../mkcheck.in in favor of this new testsuite framework.
-
-// 1: Thoughts on naming test cases, and structuring them.
-The testsuite directory has been divided into 11 directories, directly
-correlated to the relevant chapters in the standard. For example, the
-directory testsuite/21_strings contains tests related to "Chapter 21,
-Strings library" in the C++ standard.
-
-So, the first step in making a new test case is to choose the correct
-directory. The second item is seeing if a test file exists that tests
-the item in question. Generally, within chapters test files are named
-after the section headings in ISO 14882, the C++ standard. For instance,
-
-21.3.7.9 Inserters and Extractors
-
-Has a related test case:
-21_strings/inserters_extractors.cc
-
-Not so hard. Some time, the words "ctor" and "dtor" are used instead
-of "construct", "constructor", "cons", "destructor", etc. Other than
-that, the naming seems mostly consistent. If the file exists, add a
-test to it. If it does not, then create a new file. All files are
-copyright the FSF, and GPL'd: this is very important.
-
-In addition, some of the locale and io code tests different
-instantiating types: thus, 'char' or 'wchar_t' is appended to the name
-as constructed above.
-
-Also, some test files are negative tests. That is, they are supposed
-to fail (usually this involves making sure some kind of construct gets
-an error when it's compiled.) These test files have 'neg' appended to
-the name as constructed above.
-
-Inside a test file, the plan is to test the relevant parts of the
-standard, and then add specific regressions as additional test
-functions, ie test04() can represent a specific regression noted in
-GNATS. Once test files get unwieldy or too big, then they should be
-broken up into multiple sub-categories, hopefully intelligently named
-after the relevant (and more specific) part of the standard.
-
-
-// 2: How to write a test case, from a dejagnu perspective
-As per the dejagnu instructions, always return 0 from main to indicate
-success.
-
-Basically, a test case contains dg-keywords (see dg.exp) indicating
-what to do and what kinds of behaviour are to be expected. New
-testcases should be written with the new style DejaGnu framework in
-mind.
-
-To ease transition, here is the list of dg-keyword documentation
-lifted from dg.exp -- eventually we should improve DejaGnu
-documentation, but getting checkin account currently demands Pyrrhic
-effort.
-
-# The currently supported options are:
-#
-# dg-prms-id N
-# set prms_id to N
-#
-# dg-options "options ..." [{ target selector }]
-# specify special options to pass to the tool (eg: compiler)
-#
-# dg-do do-what-keyword [{ target/xfail selector }]
-# `do-what-keyword' is tool specific and is passed unchanged to
-# ${tool}-dg-test. An example is gcc where `keyword' can be any of:
-# preprocess|compile|assemble|link|run
-# and will do one of: produce a .i, produce a .s, produce a .o,
-# produce an a.out, or produce an a.out and run it (the default is
-# compile).
-#
-# dg-error regexp comment [{ target/xfail selector } [{.|0|linenum}]]
-# indicate an error message is expected on this line
-# (the test fails if it doesn't occur)
-# Linenum=0 for general tool messages (eg: -V arg missing).
-# "." means the current line.
-#
-# dg-warning regexp comment [{ target/xfail selector } [{.|0|linenum}]]
-# indicate a warning message is expected on this line
-# (the test fails if it doesn't occur)
-#
-# dg-bogus regexp comment [{ target/xfail selector } [{.|0|linenum}]]
-# indicate a bogus error message use to occur here
-# (the test fails if it does occur)
-#
-# dg-build regexp comment [{ target/xfail selector }]
-# indicate the build use to fail for some reason
-# (errors covered here include bad assembler generated, tool crashes,
-# and link failures)
-# (the test fails if it does occur)
-#
-# dg-excess-errors comment [{ target/xfail selector }]
-# indicate excess errors are expected (any line)
-# (this should only be used sparingly and temporarily)
-#
-# dg-output regexp [{ target selector }]
-# indicate the expected output of the program is
-# (there may be multiple occurrences of this, they are concatenated)
-#
-# dg-final { tcl code }
-# add some tcl code to be run at the end
-# (there may be multiple occurrences of this, they are concatenated)
-# (unbalanced braces must be \-escaped)
-#
-# "{ target selector }" is a list of expressions that determine whether the
-# test succeeds or fails for a particular target, or in some cases whether the
-# option applies for a particular target. If the case of `dg-do' it specifies
-# whether the testcase is even attempted on the specified target.
-#
-# The target selector is always optional. The format is one of:
-#
-# { xfail *-*-* ... } - the test is expected to fail for the given targets
-# { target *-*-* ... } - the option only applies to the given targets
-#
-# At least one target must be specified, use *-*-* for "all targets".
-# At present it is not possible to specify both `xfail' and `target'.
-# "native" may be used in place of "*-*-*".
-
-Example 1: Testing compilation only
-(to just have a testcase do compile testing, without linking and executing)
-// { dg-do compile }
-
-Example 2: Testing for expected warings on line 36
-// { dg-warning "string literals" "" { xfail *-*-* } 36
-
-Example 3: Testing for compilation errors on line 41
-// { dg-do compile }
-// { dg-error "no match for" "" { xfail *-*-* } 41 }
-
-More examples can be found in the libstdc++-v3/testsuite/*/*.cc files.
-
-
-// 3: Test harness notes, invocation, and debugging.
-Configuring the dejagnu harness to work with libstdc++-v3 in a cross
-compilation environment has been maddening. However, it does work now,
-and on a variety of platforms. Including solaris, linux, and cygwin.
-
-To debug the test harness during runs, try invoking with
-
-make check-target-libstdc++-v3 RUNTESTFLAGS="-v"
-or
-make check-target-libstdc++-v3 RUNTESTFLAGS="-v -v"
-
-There are two ways to run on a simulator: set up DEJAGNU to point to a
-specially crafted site.exp, or pass down --target_board flags.
-
-Example flags to pass down for various embedded builds are as follows:
-
---target=powerpc-eabism (libgloss/sim)
-make check-target-libstdc++-v3 RUNTESTFLAGS="--target_board=powerpc-sim"
-
---target=calmrisc32 (libgloss/sid)
-make check-target-libstdc++-v3 RUNTESTFLAGS="--target_board=calmrisc32-sid"
-
---target=xscale-elf (newlib/sim)
-make check-target-libstdc++-v3 RUNTESTFLAGS="--target_board=arm-sim"
-
-
-// 4: Future plans, to be done
-Shared runs need to be implemented, for targets that support shared libraries.
-
-Diffing of expected output to standard streams needs to be finished off.
-
-The V3 testing framework supports, or will eventually support,
-additional keywords for the purpose of easing the job of writing
-testcases. All V3-keywords are of the form @xxx@. Currently plans
-for supported keywords include:
-
- @require@
- The existence of is essential for the test to complete
- successfully. For example, a testcase foo.C using bar.baz as
- input file could say
- // @require@ bar.baz
- The special variable % stands for the rootname, e.g. the
- file-name without its `.C' extension. Example of use (taken
- verbatim from 27_io/filebuf.cc)
- // @require@ %-*.tst %-*.txt
-
- @diff@
- After the testcase compiles and ran successfully, diff
- against , these lists should have the
- same length. The test fails if diff returns non-zero a pair of
- files.
-
-Current testing problems with cygwin-hosted tools:
-
-There are two known problems which I have not addressed. The first is
-that when testing cygwin hosted tools from the unix build dir, it does
-the wrong thing building the wrapper program (testglue.c) because host
-and target are the same in site.exp (host and target are the same from
-the perspective of the target libraries)
-
-Problem number two is a little more annoying. In order for me to make
-v3 testing work on Windows, I had to tell dejagnu to copy over the
-debug_assert.h file to the remote host and then set the includes to
--I./. This is how all the other tests like this are done so I didn't
-think much of it. However, this had some unfortunate results due to
-gcc having a testcase called "limits" and C++ having an include file
-called "limits". The gcc "limits" binary was in the temporary dir
-when the v3 tests were being built. As a result, the gcc "limits"
-binary was being #included rather than the intended one. The only way
-to fix this is to go through the testsuites and make sure binaries are
-deleted on the remote host when testing is done with them. That is a
-lot more work than I want to do so I worked around it by cleaning out
-D:\kermit on compsognathus and rerunning tests.
diff --git a/libstdc++-v3/testsuite/lib/libstdc++-v3-dg.exp b/libstdc++-v3/testsuite/lib/libstdc++-v3-dg.exp
index 1d828626192..6a4351c21e5 100644
--- a/libstdc++-v3/testsuite/lib/libstdc++-v3-dg.exp
+++ b/libstdc++-v3/testsuite/lib/libstdc++-v3-dg.exp
@@ -233,6 +233,7 @@ proc v3-compute-tests { } {
set tests_file "${outdir}/testsuite_files"
set tests_file_inter "${outdir}/testsuite_files_interactive"
+ set tests_file_perf "${outdir}/testsuite_files_performance"
set sfiles ""
# If there is a testsuite_file, use it.
@@ -281,6 +282,21 @@ proc v3-compute-tests { } {
}
set sfiles ${restwo}
+ # Filter performance analysis tests.
+ # Use special rules to run these tests.
+ set resthree {}
+ set sfiles_perf {}
+ foreach i $sfiles {
+ if [regexp "performance" $i] {
+ verbose "element performance list is $i"
+ lappend sfiles_perf $i
+ } else {
+ verbose "element non-performancet list is $i"
+ lappend resthree $i
+ }
+ }
+ set sfiles ${resthree}
+
# Write out testsuite_files.
set f [open $tests_file "w"]
foreach t $sfiles {
@@ -294,6 +310,13 @@ proc v3-compute-tests { } {
puts $f $t
}
close $f
+
+ # Write out testsuite_files_performance.
+ set f [open $tests_file_perf "w"]
+ foreach t $sfiles_perf {
+ puts $f $t
+ }
+ close $f
}
proc v3-list-tests { filename } {
diff --git a/libstdc++-v3/testsuite/performance/allocator.cc b/libstdc++-v3/testsuite/performance/allocator.cc
new file mode 100644
index 00000000000..a70eda5bd25
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/allocator.cc
@@ -0,0 +1,39 @@
+// Copyright (C) 2003 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.
+
+#include
+
+// Primarily a test of the default allocator.
+// http://gcc.gnu.org/ml/libstdc++/2001-05/msg00105.html
+int main ()
+{
+ std::list List;
+ for (int i = 0; i < 10000000; ++i )
+ List.push_back( int() );
+ return 0;
+}
+
diff --git a/libstdc++-v3/testsuite/performance/complex_norm.cc b/libstdc++-v3/testsuite/performance/complex_norm.cc
new file mode 100644
index 00000000000..4a4277634cd
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/complex_norm.cc
@@ -0,0 +1,59 @@
+// Copyright (C) 2003 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.
+
+#include
+
+// based on libstdc++/5730, use --fast-math
+int main()
+{
+ typedef std::complex complex_type;
+ complex_type u[2048];
+
+ for (int i = 0; i < 2048; ++i)
+ u[i] = 1.0;
+
+ for (int i = 0; i < 2000; ++i)
+ {
+ complex_type * p = u;
+ for (int j = 0; j < 2048; ++j)
+ {
+#if 1
+ double u2 = norm(*p);
+#else
+ // Shouldn't be slower than the above.
+ double ur = real(*p);
+ double ui = imag(*p);
+ double u2 = ur * ur + ui * ui;
+#endif
+ double t = u2 * 0.1;
+ *p *= complex_type(cos(t), sin(t));
+ ++p;
+ }
+ }
+ return 0;
+}
+
diff --git a/libstdc++-v3/testsuite/performance/cout_insert_int.cc b/libstdc++-v3/testsuite/performance/cout_insert_int.cc
new file mode 100644
index 00000000000..42e44efdd86
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/cout_insert_int.cc
@@ -0,0 +1,36 @@
+// Copyright (C) 2003 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.
+
+#include
+
+// libstdc++/7076
+int main()
+{
+ for (int i = 0; i < 150000; i++)
+ std::cout << i << '\n';
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/performance/fstream_seek_write.cc b/libstdc++-v3/testsuite/performance/fstream_seek_write.cc
new file mode 100644
index 00000000000..0ea0cfda310
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/fstream_seek_write.cc
@@ -0,0 +1,46 @@
+// Copyright (C) 2003 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.
+
+#include
+
+// libstdc++/10672
+int main()
+{
+ using namespace std;
+ fstream s("tmp_perf_seek", ios::binary | ios::in | ios::out | ios::trunc);
+ if (s.good())
+ {
+ for (int i = 0; i < 300000; i++)
+ {
+ s.seekp(0);
+ s.write((char *) & i, sizeof(int));
+ s.seekp(sizeof(int));
+ s.write((char *) & i, sizeof(int));
+ }
+ }
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/performance/ifstream_getline.cc b/libstdc++-v3/testsuite/performance/ifstream_getline.cc
new file mode 100644
index 00000000000..f0a9131983e
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/ifstream_getline.cc
@@ -0,0 +1,42 @@
+// Copyright (C) 2003 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.
+
+#include
+
+// libstdc++/5001 (100,000 line input file)
+int main ()
+{
+ using namespace std;
+ const char* name = "/usr/share/dict/linux.words";
+
+ ifstream in(name);
+ char buffer[BUFSIZ];
+ while(!in.eof())
+ {
+ in.getline(buffer, BUFSIZ);
+ }
+}
diff --git a/libstdc++-v3/testsuite/performance/map_create_fill.cc b/libstdc++-v3/testsuite/performance/map_create_fill.cc
new file mode 100644
index 00000000000..f0fc51458cc
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/map_create_fill.cc
@@ -0,0 +1,49 @@
+// 2003-03-01 gp dot bolton at computer dot org
+
+// Copyright (C) 2003 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.
+
+#include