summaryrefslogtreecommitdiff
path: root/libstdc++-v3/testsuite/performance/21_strings
diff options
context:
space:
mode:
Diffstat (limited to 'libstdc++-v3/testsuite/performance/21_strings')
-rw-r--r--libstdc++-v3/testsuite/performance/21_strings/append-1.cc77
-rw-r--r--libstdc++-v3/testsuite/performance/21_strings/append-2.cc46
-rw-r--r--libstdc++-v3/testsuite/performance/21_strings/cons_input_iterator.cc49
-rw-r--r--libstdc++-v3/testsuite/performance/21_strings/copy_cons_and_dest.cc52
-rw-r--r--libstdc++-v3/testsuite/performance/21_strings/find.cc96
-rw-r--r--libstdc++-v3/testsuite/performance/21_strings/hash.cc58
6 files changed, 378 insertions, 0 deletions
diff --git a/libstdc++-v3/testsuite/performance/21_strings/append-1.cc b/libstdc++-v3/testsuite/performance/21_strings/append-1.cc
new file mode 100644
index 000000000..60a9a8654
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/21_strings/append-1.cc
@@ -0,0 +1,77 @@
+ // Copyright (C) 2003, 2009 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+#include <ctime>
+#include <iostream>
+#include <string>
+#include <testsuite_performance.h>
+
+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)
+{
+ using namespace __gnu_test;
+ time_counter time;
+ resource_counter resource;
+ start_counters(time, resource);
+ test_append_char(how_much);
+ stop_counters(time, resource);
+ report_performance(__FILE__, "char", time, resource);
+}
+
+void
+run_benchmark2(int how_much)
+{
+ using namespace __gnu_test;
+ time_counter time;
+ resource_counter resource;
+ start_counters(time, resource);
+ test_append_string(how_much);
+ stop_counters(time, resource);
+ report_performance(__FILE__, "string", time, resource);
+}
+
+// libstdc++/5380
+// libstdc++/4960
+int main()
+{
+ run_benchmark1(100000);
+ run_benchmark2(100000);
+ run_benchmark1(1000000);
+ run_benchmark2(1000000);
+ run_benchmark1(10000000);
+ run_benchmark2(10000000);
+}
diff --git a/libstdc++-v3/testsuite/performance/21_strings/append-2.cc b/libstdc++-v3/testsuite/performance/21_strings/append-2.cc
new file mode 100644
index 000000000..8c44cb0f0
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/21_strings/append-2.cc
@@ -0,0 +1,46 @@
+// Copyright (C) 2004, 2009 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+#include <string>
+#include <testsuite_performance.h>
+
+// Short strings didn't grow quickly...
+void test01()
+{
+ using namespace __gnu_test;
+ time_counter time;
+ resource_counter resource;
+
+ start_counters(time, resource);
+ for (unsigned i = 0; i < 200000; ++i)
+ {
+ std::string a;
+ for (unsigned j = 0; j < 400; ++j)
+ a.append(1, 'x');
+ }
+ stop_counters(time, resource);
+
+ report_performance(__FILE__, "", time, resource);
+ clear_counters(time, resource);
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/performance/21_strings/cons_input_iterator.cc b/libstdc++-v3/testsuite/performance/21_strings/cons_input_iterator.cc
new file mode 100644
index 000000000..fcf3eb893
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/21_strings/cons_input_iterator.cc
@@ -0,0 +1,49 @@
+// Copyright (C) 2004, 2009 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+#include <iterator>
+#include <sstream>
+
+#include <testsuite_performance.h>
+
+void benchmark(long len)
+{
+ using namespace std;
+ using namespace __gnu_test;
+
+ time_counter time;
+ resource_counter resource;
+
+ istringstream isstr(string(len, 'a'));
+
+ start_counters(time, resource);
+ string str((istreambuf_iterator<char>(isstr)),
+ istreambuf_iterator<char>());
+ stop_counters(time, resource);
+
+ report_performance(__FILE__, "", time, resource);
+ clear_counters(time, resource);
+}
+
+int main()
+{
+ benchmark(500000);
+ benchmark(5000000);
+ benchmark(50000000);
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/performance/21_strings/copy_cons_and_dest.cc b/libstdc++-v3/testsuite/performance/21_strings/copy_cons_and_dest.cc
new file mode 100644
index 000000000..1ec18d3e4
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/21_strings/copy_cons_and_dest.cc
@@ -0,0 +1,52 @@
+// Copyright (C) 2006, 2009 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+#include <string>
+#include <testsuite_performance.h>
+
+void benchmark(long len)
+{
+ using namespace std;
+ using namespace __gnu_test;
+
+ time_counter time;
+ resource_counter resource;
+
+ start_counters(time, resource);
+ string a("1");
+ for (long i = 0; i < len; ++i)
+ {
+ string ss1(a);
+ string ss2(ss1);
+ string ss3(ss2);
+ string ss4(ss3);
+ string ss5(ss4);
+ }
+ stop_counters(time, resource);
+
+ report_performance(__FILE__, "", time, resource);
+ clear_counters(time, resource);
+}
+
+int main()
+{
+ benchmark(1000000);
+ benchmark(10000000);
+ benchmark(100000000);
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/performance/21_strings/find.cc b/libstdc++-v3/testsuite/performance/21_strings/find.cc
new file mode 100644
index 000000000..eeda0802b
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/21_strings/find.cc
@@ -0,0 +1,96 @@
+ // Copyright (C) 2004, 2009 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+#include <string>
+#include <testsuite_performance.h>
+
+void
+test_pair(const std::string& s, const std::string& f, int n)
+{
+ std::string::size_type sz = 0;
+
+ for (int i = 0; i < n; ++i)
+ sz = s.find(f);
+}
+
+int main()
+{
+ using namespace std;
+ using namespace __gnu_test;
+
+ time_counter time;
+ resource_counter resource;
+
+ const unsigned int iterations = 2000000;
+
+ string s, f;
+ s = "aabbaabbaaxd adbffdadgaxaabbbddhatyaaaabbbaabbaabbcsy";
+ f = "aabbaabbc";
+ start_counters(time, resource);
+ test_pair(s, f, iterations);
+ stop_counters(time, resource);
+ report_performance(__FILE__, "1", time, resource);
+ clear_counters(time, resource);
+
+ f = "aabbb";
+ start_counters(time, resource);
+ test_pair(s, f, iterations);
+ stop_counters(time, resource);
+ report_performance(__FILE__, "2", time, resource);
+ clear_counters(time, resource);
+
+ f = "xd";
+ start_counters(time, resource);
+ test_pair(s, f, iterations);
+ stop_counters(time, resource);
+ report_performance(__FILE__, "3", time, resource);
+ clear_counters(time, resource);
+
+ s = "dhruv is a very very good boy ;-)";
+ f = "very";
+ start_counters(time, resource);
+ test_pair(s, f, iterations);
+ stop_counters(time, resource);
+ report_performance(__FILE__, "4", time, resource);
+ clear_counters(time, resource);
+
+ f = "bad";
+ start_counters(time, resource);
+ test_pair(s, f, iterations);
+ stop_counters(time, resource);
+ report_performance(__FILE__, "5", time, resource);
+ clear_counters(time, resource);
+
+ f = "extra irritating";
+ start_counters(time, resource);
+ test_pair(s, f, iterations);
+ stop_counters(time, resource);
+ report_performance(__FILE__, "6", time, resource);
+ clear_counters(time, resource);
+
+ s = "this is a very this is a very this is a verty this is a very "
+ "this is a very long sentence";
+ f = "this is a very long sentence";
+ start_counters(time, resource);
+ test_pair(s, f, iterations);
+ stop_counters(time, resource);
+ report_performance(__FILE__, "7", time, resource);
+ clear_counters(time, resource);
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/performance/21_strings/hash.cc b/libstdc++-v3/testsuite/performance/21_strings/hash.cc
new file mode 100644
index 000000000..0c409c5da
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/21_strings/hash.cc
@@ -0,0 +1,58 @@
+#include <string>
+#include <vector>
+#include <unordered_set>
+#include <cstdlib>
+#include <random>
+#include <testsuite_performance.h>
+
+using namespace std;
+
+vector<string>
+random_strings(int n, int len)
+{
+ string s(len, '\0');
+ unordered_set<string> result_set;
+ random_device rd;
+ while (result_set.size() < n)
+ {
+ result_set.insert(s);
+ unsigned int tmp = rd();
+ tmp %= len * 256;
+ s[tmp / 256] = tmp % 256;
+ }
+ return vector<string>(result_set.begin(), result_set.end());
+}
+
+int
+main(int argc, char **argv)
+{
+ using namespace __gnu_test;
+ time_counter time;
+ resource_counter resource;
+
+ int string_size = 71;
+ int num_strings = 6000000;
+ if (argc > 1)
+ {
+ string_size = atoi(argv[1]);
+ if (argc > 2)
+ num_strings = atoi(argv[2]);
+ }
+
+ // Construct random strings.
+ vector<string> v = random_strings(num_strings, string_size);
+
+ // Time hashing.
+ size_t tmp = 0; // prevent compiler from optimizing away all the work
+ start_counters(time, resource);
+ for (int i = 0; i < num_strings; i++)
+ tmp += hash<string>()(v[i]);
+ stop_counters(time, resource);
+
+ if (tmp != 0 || argc < 9) // use tmp to prevent compiler optimization
+ report_performance(__FILE__, "", time, resource);
+
+ clear_counters(time, resource);
+
+ return 0;
+}