From ca5e1be83df4629faf3bccabcc8e712447ac390e Mon Sep 17 00:00:00 2001 From: Benjamin Kosnik <bkoz@redhat.com> Date: Tue, 20 May 2003 22:25:09 +0000 Subject: [PATCH] README: Move to... 2003-05-20 Benjamin Kosnik <bkoz@redhat.com> * testsuite/README: Move to... * docs/html/test.html: ...here. Add documentation. * docs/html/install.html: Move testing bits out.. * docs/html/documentation.html: Add separate testing link. * testsuite/performance: Add. * testsuite/performance/allocator.cc: New. * testsuite/performance/complex_norm.cc: New. * testsuite/performance/cout_insert_int.cc: New. * testsuite/performance/fstream_seek_write.cc: New. * testsuite/performance/ifstream_getline.cc: New. * testsuite/performance/map_create_fill.cc: New. * testsuite/performance/ofstream_insert_float.cc: New. * testsuite/performance/ofstream_insert_int.cc: New. * testsuite/performance/string_append.cc: New. * testsuite/lib/libstdc++-v3-dg.exp (v3-compute-tests): Filter performance tests. From-SVN: r67040 --- libstdc++-v3/ChangeLog | 19 + libstdc++-v3/docs/html/documentation.html | 3 +- libstdc++-v3/docs/html/install.html | 32 +- libstdc++-v3/docs/html/test.html | 564 ++++++++++++++++++ libstdc++-v3/testsuite/README | 207 ------- .../testsuite/lib/libstdc++-v3-dg.exp | 23 + .../testsuite/performance/allocator.cc | 39 ++ .../testsuite/performance/complex_norm.cc | 59 ++ .../testsuite/performance/cout_insert_int.cc | 36 ++ .../performance/fstream_seek_write.cc | 46 ++ .../testsuite/performance/ifstream_getline.cc | 42 ++ .../testsuite/performance/map_create_fill.cc | 49 ++ .../performance/ofstream_insert_float.cc | 40 ++ .../performance/ofstream_insert_int.cc | 37 ++ .../testsuite/performance/string_append.cc | 83 +++ 15 files changed, 1040 insertions(+), 239 deletions(-) create mode 100644 libstdc++-v3/docs/html/test.html delete mode 100644 libstdc++-v3/testsuite/README create mode 100644 libstdc++-v3/testsuite/performance/allocator.cc create mode 100644 libstdc++-v3/testsuite/performance/complex_norm.cc create mode 100644 libstdc++-v3/testsuite/performance/cout_insert_int.cc create mode 100644 libstdc++-v3/testsuite/performance/fstream_seek_write.cc create mode 100644 libstdc++-v3/testsuite/performance/ifstream_getline.cc create mode 100644 libstdc++-v3/testsuite/performance/map_create_fill.cc create mode 100644 libstdc++-v3/testsuite/performance/ofstream_insert_float.cc create mode 100644 libstdc++-v3/testsuite/performance/ofstream_insert_int.cc create mode 100644 libstdc++-v3/testsuite/performance/string_append.cc diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 6f3c11083b02..01ddf1e129fc 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,22 @@ +2003-05-20 Benjamin Kosnik <bkoz@redhat.com> + + * testsuite/README: Move to... + * docs/html/test.html: ...here. Add documentation. + * docs/html/install.html: Move testing bits out.. + * docs/html/documentation.html: Add separate testing link. + * testsuite/performance: Add. + * testsuite/performance/allocator.cc: New. + * testsuite/performance/complex_norm.cc: New. + * testsuite/performance/cout_insert_int.cc: New. + * testsuite/performance/fstream_seek_write.cc: New. + * testsuite/performance/ifstream_getline.cc: New. + * testsuite/performance/map_create_fill.cc: New. + * testsuite/performance/ofstream_insert_float.cc: New. + * testsuite/performance/ofstream_insert_int.cc: New. + * testsuite/performance/string_append.cc: New. + * testsuite/lib/libstdc++-v3-dg.exp (v3-compute-tests): Filter + performance tests. + 2003-05-20 Gabriel Dos Reis <gdr@integrable-solutions.net> PR libstdc++/10689 diff --git a/libstdc++-v3/docs/html/documentation.html b/libstdc++-v3/docs/html/documentation.html index f1e2cd700d8a..827ed22c55fb 100644 --- a/libstdc++-v3/docs/html/documentation.html +++ b/libstdc++-v3/docs/html/documentation.html @@ -45,11 +45,12 @@ <hr /> <br /> -<h2><a name="2">Configuring, Building, Installing</a></h2> +<h2><a name="2">Configuring, Building, Testing, Installing</a></h2> <ul> <li><a href="configopts.html">Configure options</a></li> <li><a href="install.html">Getting started: configure, build, install</a> </li> + <li><a href="test.html">Testing details</a> <li><a href="debug.html">Debugging schemes and strategies</a> </li> </ul> diff --git a/libstdc++-v3/docs/html/install.html b/libstdc++-v3/docs/html/install.html index e7e495ade9d0..038291b8acc1 100644 --- a/libstdc++-v3/docs/html/install.html +++ b/libstdc++-v3/docs/html/install.html @@ -14,7 +14,7 @@ </head> <body> -<h1 class="centered"><a name="top">libstdc++-v3 INSTALL</a></h1> +<h1 class="centered"><a name="top">Getting started: configure, build, install</a></h1> <p class="fineprint"><em> 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 <code>lib/gcc-lib/</code> instead. </p> - <p>You can check the status of the build without installing it using</p> - <pre> - make check</pre> - <p>or you can check the status of the installed library using</p> - <pre> - make check-install</pre> - <p>in the <em>libbuilddir</em> directory. - These commands will create a 'testsuite' directory underneath - <em>libbuilddir</em> containing the results of the tests. We are - interested in any strange failures of the testsuite; please see - <a href="faq/index.html#2_4">FAQ 2.4</a> for which files to examine. - </p> - - <p> 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: - </p> - - <p>The library ABI can be tested using</p> - <pre> - make check-abi</pre> - - <p>The library can also be tested using a bash script, instead of - the default dejagnu test harness</p> - <pre> - make check-script</pre> - <p>or</p> - <pre> - make check-script-install</pre> <hr /> <h2><a name="usage">Using the library</a></h2> diff --git a/libstdc++-v3/docs/html/test.html b/libstdc++-v3/docs/html/test.html new file mode 100644 index 000000000000..61e372581e05 --- /dev/null +++ b/libstdc++-v3/docs/html/test.html @@ -0,0 +1,564 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <meta name="AUTHOR" content="bkoz@gcc.gnu.org (Benjamin Kosnik)" /> + <meta name="KEYWORDS" content="c++, libstdc++, test, regression, g++" /> + <meta name="DESCRIPTION" content="README for the GNU libstdc++ effort." /> + <meta name="GENERATOR" content="vi and eight fingers" /> + <title>libstdc++-v3 Testing Instructions</title> +<link rel="StyleSheet" href="lib3styles.css" /> +</head> +<body> + +<h1 class="centered"><a name="top">Testing Details</a></h1> + +<p class="fineprint"><em> + The latest version of this document is always available at + <a href="http://gcc.gnu.org/onlinedocs/libstdc++/test.html"> + http://gcc.gnu.org/onlinedocs/libstdc++/test.html</a>. +</em></p> + +<p><em> + To the <a href="http://gcc.gnu.org/libstdc++/">libstdc++-v3 homepage</a>. +</em></p> + +<!-- ####################################################### --> +<hr /> +<h2>Contents</h2> +<ul> + <li><a href="#org">Testsuite organization and naming conventions</a></li> + <li><a href="#util">Utilities: abicheck and libv3test</a></li> + <li><a href="#new">How to write a new test case</a></li> + <li><a href="#check">Options for running the tests</a></li> + <li><a href="#future">Future</a></li> +</ul> + +<hr /> + +<!-- ####################################################### --> + +<h2><a name="org">Testsuite organization and naming conventions</a></h2> + <p> + The directory <em>libsrcdir/testsuite</em> 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. + <p> + + <pre> +17_intro +18_support +19_diagnostics +20_util +21_strings +22_locale +23_containers +25_algorithms +26_numerics +27_io + </pre> + + <p> + In addition, the following directories include test files: + </p> + + <pre> +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. + </pre> + + <p> + Some directories don't have test files, but instead contain + auxiliary information: + </p> + + <pre> +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. + </pre> + + <p> + 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 + <code> 21.3.6.1 - basic_string::find [lib.string::find]</code> + in the standard, the following was used: + <p> + <pre> +21_strings/find.cc + </pre> + <p> + 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: + </p> + <pre> +21_strings/basic_string/find/char/1.cc +21_strings/basic_string/find/char/2.cc +21_strings/basic_string/find/char/3.cc +21_strings/basic_string/find/wchar_t/1.cc +21_strings/basic_string/find/wchar_t/2.cc +21_strings/basic_string/find/wchar_t/3.cc + </pre> + + <p> + 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. + </p> + + <p> + In addition, there are some special names and suffixes that are + used within the testsuite to designate particular kinds of + tests. + </p> + +<ul> +<li> + <em>_xin.cc</em> + <p> + 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: + <pre> +g++ 27_io/objects/char/3_xin.cc +cat 27_io/objects/char/3_xin.in | a.out + </pre> + </p> +</li> +<li> + <em>.in</em> + <p> + This file contains the expected input for the corresponding <em> + _xin.cc</em> test case. + </p> +</li> +<li> + <em>_neg.cc</em> + <p> + This test case is expected to fail: it's a negative test. At the + moment, these are almost always compile time errors. + </p> +</li> +<li> + <em>char</em> + <p> + 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 <code>char</code> instantiation of a + template. + </p> +</li> +<li> + <em>wchar_t</em> + <p> + 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 <code>wchar_t</code> instantiation of + a template. Some hosts do not support <code>wchar_t</code> + functionality, so for these targets, all of these tests will not + be run. + </p> +</li> +<li> + <em>performance</em> + <p> + 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. + </p> +</li> +</ul> + +<hr /> +<h2><a name="util">Utilities: abicheck and libv3test</a></h2> + <p> + 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 <em>abi_check</em>, and a static library called + <em>libv3test</em> are constructed during the build. Both of these + items are not installed, and only used during testing. + </p> + + <p> + These files include the following functionality: + </p> + + <ul> + <li> + <em>abi_check.cc</em> + <p> + Creates the executable <em>abi_check</em>. + 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 <a href="abi.txt"> here</a> + </p> + </li> + <li> + <em>testsuite_allocator.h and </em> + <em>testsuite_allocator.cc</em> + <p> + Specialized allocators that keep track of construction and destruction + </p> + </li> + <li> + <em>testsuite_hooks.h and </em> + <em>testsuite_hooks.cc</em> + <p> + A large number of utilities, including: + </p> + <ul> + <li>VERIFY</li> + <li>set_memory_limits</li> + <li>verify_demangle</li> + <li>run_tests_wrapped_locale</li> + <li>run_tests_wrapped_env</li> + <li>try_named_locale</li> + <li>counter</li> + <li>copy_constructor</li> + <li>assignment_operator</li> + <li>destructor</li> + <li>copy_tracker</li> + <li>pod_char, pod_int and associated char_traits specializations</li> + </ul> + <p></p> + </li> + <li> + <em>printnow.c</em> + <p> + A cross-platform timer for use in one of the older harnesses + to determine compilation and link time. + </p> + </li> + </ul> + +<hr /> +<h2><a name="new">How to write a new test case</a></h2> + + <p> + The first step in making a new test case is to choose the correct + directory and file name, given the organization as previously + described. + </p> + + <p> + 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. + </p> + + <p> + As per the dejagnu instructions, always return 0 from main to + indicate success. + </p> + + <p> + A bunch of utility functions and classes have already been + abstracted out into the testsuite utility library, <code> + libv3test</code>. To use this functionality, just include the + appropriate header file: the library will automatically be linked + in as part of the testsuite run. + </p> + + <p> + 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. + </p> + + <p> + To ease transition, here is the list of dg-keyword documentation + lifted from dg.exp. + </p> + +<pre> +# 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 <regexp> 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 <regexp> 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 <regexp> 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 <regexp> +# (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 } +</pre> + + <p> + More examples can be found in the libstdc++-v3/testsuite/*/*.cc files. + </p> + +<hr /> +<h2><a name="check">Options for running the tests</a></h2> + + <p> 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. + </p> + + <p>You can check the status of the build without installing it + using the dejagnu harness, much like the rest of the gcc tools.</p> + <p> + <pre> make check</pre> in the <em>libbuilddir</em> directory.</p> + <p>or</p> + <p><pre> make check-target-libstdc++-v3</pre> in the + <em>gccbuilddir</em> directory.</p> + + <p> + These commands are equivalent and will create a 'testsuite' + directory underneath <em>libbuilddir</em> containing the results + of the tests. Two results files will be generated: <em> + libstdc++-v3.sum</em>, which is a PASS/FAIL summary for each + test, and <em>libstdc++.log</em> 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: + </p> + + <ul> + <li> + <em>testsuite_files </em> + <p> 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 <em>libsrcdir/testsuite</em> directory. + </p> + </li> + + <li> + <em>testsuite_files_interactive </em> + <p> 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. + </p> + </li> + + <li> + <em>testsuite_files_performance</em> + <p> 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. + </p> + </li> + + <li> + <em>testsuite_wchar_t </em> + <p> This file indicates that the host system can run the wchar_t + tests, and corresponds to the macro definition <code> + _GLIBCPP_USE_WCHAR_T</code> in the file c++config.h. + </p> + </li> + </ul> + +<p> +To debug the dejagnu test harness during runs, try invoking with a +specific argument to the variable RUNTESTFLAGS, as below. +</p> + +<pre> +make check-target-libstdc++-v3 RUNTESTFLAGS="-v" +</pre> +or +<pre> +make check-target-libstdc++-v3 RUNTESTFLAGS="-v -v" +</pre> + +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: + +<pre> +--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" +</pre> + + <p> 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 <em>libbuilddir</em> directory.</p> These options + include, but are not necessarily limited to, the following: + </p> + + <p> + The library can also be tested using a bash script, instead of + the default dejagnu test harness. + </p> + <pre> + make check-script</pre> + <p> + 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. + </p> + + <pre> + make check-script-install</pre> + <p> As directly above, but tests an installed library, not the + library and compiler in the build tree. + </p> + + <pre> + make check-abi</pre> + <p>The library ABI can be tested. This involves testing the shared + library against an ABI-defining previous version.</p> + + <p> + We are interested in any strange failures of the + testsuite; please see <a href="faq/index.html#2_4">FAQ 2.4</a> + for which files to examine. + </p> + +<hr /> +<h2><a name="future">Future</a></h2> + +<p> +Shared runs need to be implemented, for targets that support shared libraries. +</p> + +<p> +Diffing of expected output to standard streams needs to be finished off. +</p> + +<p> +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: +</p> + + @require@ <files> + The existence of <files> 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@ <first-list> <second-list> + After the test case compiles and ran successfully, diff + <first-list> against <second-list>, these lists should have the + same length. The test fails if diff returns non-zero a pair of + files. + +<!-- ####################################################### --> + +<hr /> +<p class="fineprint"><em> +See <a href="17_intro/license.html">license.html</a> for copying conditions. +Comments and suggestions are welcome, and may be sent to +<a href="mailto:libstdc++@gcc.gnu.org">the libstdc++ mailing list</a>. +</em></p> + + +</body> +</html> diff --git a/libstdc++-v3/testsuite/README b/libstdc++-v3/testsuite/README deleted file mode 100644 index 07ff9fef4f88..000000000000 --- 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 <regexp> 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 <regexp> 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 <regexp> 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 <regexp> -# (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@ <files> - The existence of <files> 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@ <first-list> <second-list> - After the testcase compiles and ran successfully, diff - <first-list> against <second-list>, 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 1d8286261926..6a4351c21e5f 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 000000000000..a70eda5bd250 --- /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 <list> + +// Primarily a test of the default allocator. +// http://gcc.gnu.org/ml/libstdc++/2001-05/msg00105.html +int main () +{ + std::list<int> 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 000000000000..4a4277634cdb --- /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 <complex> + +// based on libstdc++/5730, use --fast-math +int main() +{ + typedef std::complex<double> 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 000000000000..42e44efdd862 --- /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 <iostream> + +// 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 000000000000..0ea0cfda3101 --- /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 <fstream> + +// 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 000000000000..f0a9131983ec --- /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 <fstream> + +// 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 000000000000..f0fc51458ccf --- /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 <map> +#include <testsuite_hooks.h> + +static bool test = true; + +static void create_and_fill(const unsigned int n) +{ + typedef std::map<int, int> Map; + Map m; + + for (unsigned int i = 0; i < n; ++i) + m[i] = i; + VERIFY ( m.size() == n ); +} + +void test01() +{ + const unsigned n = 10000000; + + for (unsigned int i = 0; i < n; ++i) + create_and_fill( 0 ); +} + +// http://gcc.gnu.org/ml/libstdc++/2003-03/msg00000.html +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/performance/ofstream_insert_float.cc b/libstdc++-v3/testsuite/performance/ofstream_insert_float.cc new file mode 100644 index 000000000000..0fefdd438771 --- /dev/null +++ b/libstdc++-v3/testsuite/performance/ofstream_insert_float.cc @@ -0,0 +1,40 @@ +// 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 <fstream> + +// based on libstdc++/8761 poor fstream performance (converted to float) +int main() +{ + std::ofstream out("tmp_perf_float.txt"); + for (int i = 0; i < 10000000; ++i) + { + float f = static_cast<float>(i); + out << f << "\n"; + } + return 0; +}; diff --git a/libstdc++-v3/testsuite/performance/ofstream_insert_int.cc b/libstdc++-v3/testsuite/performance/ofstream_insert_int.cc new file mode 100644 index 000000000000..69357f390841 --- /dev/null +++ b/libstdc++-v3/testsuite/performance/ofstream_insert_int.cc @@ -0,0 +1,37 @@ +// 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 <fstream> + +// libstdc++/8761 poor fstream performance +int main() +{ + std::ofstream out("tmp_perf_int.txt"); + for (int i = 0; i < 10000000; ++i) + out << i << "\n"; + return 0; +}; diff --git a/libstdc++-v3/testsuite/performance/string_append.cc b/libstdc++-v3/testsuite/performance/string_append.cc new file mode 100644 index 000000000000..e385eb752b21 --- /dev/null +++ b/libstdc++-v3/testsuite/performance/string_append.cc @@ -0,0 +1,83 @@ + // 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 <ctime> +#include <iostream> +#include <string> + +using namespace std; + +void +test_append_char(int how_much) +{ + string buf; // no preallocation + for (int i = 0; i < how_much; ++i) + buf.append(static_cast<string::size_type>(1) , 'x'); +} + +void +test_append_string(int how_much) +{ + string s(static_cast<string::size_type>(1) , 'x'); + string buf; // no preallocation + for (int i = 0; i < how_much; ++i) + buf.append(s); +} + +void +run_benchmark1(int how_much) +{ + clock_t t0 = clock(); + test_append_char(how_much); + clock_t t1 = clock(); + cout << "Execution time of " << how_much + << " string::append(char) calls: " + << (static_cast<float>(t1 - t0)/CLOCKS_PER_SEC) << " sec."<< endl; +} + +void +run_benchmark2(int how_much) +{ + clock_t t0 = clock(); + test_append_string(how_much); + clock_t t1 = clock(); + cout << "Execution time of " << how_much + << " string::append(const string&) calls: " + << (static_cast<float>(t1 - t0)/CLOCKS_PER_SEC) << " sec." << endl; +} + +// libstdc++/5380 +// libstdc++/4960 +int main() +{ + run_benchmark1(10000); + run_benchmark2(10000); + run_benchmark1(100000); + run_benchmark2(100000); + run_benchmark1(1000000); + run_benchmark2(1000000); +} -- GitLab