a5d39cb4a7
2010-09-14 Matt Austern <austern@google.com> Paolo Carlini <paolo.carlini@oracle.com> * testsuite/performance/21_strings/hash.cc: New. 2010-09-14 Paolo Carlini <paolo.carlini@oracle.com> * testsuite/performance/21_strings/string_append.cc: Rename to... * testsuite/performance/21_strings/append-1.cc: ... this. * testsuite/performance/21_strings/string_append_2.cc: Rename to... * testsuite/performance/21_strings/append-2.cc: ... this. * testsuite/performance/21_strings/string_cons_input_iterator.cc: Rename to... * testsuite/performance/21_strings/cons_input_iterator.cc: ... this. * testsuite/performance/21_strings/string_copy_cons_and_dest.cc: Rename to... * testsuite/performance/21_strings/copy_cons_and_dest.cc: ... this. * testsuite/performance/21_strings/string_find.cc: Rename to... * testsuite/performance/21_strings/find.cc: ... this. From-SVN: r164278
59 lines
1.3 KiB
C++
59 lines
1.3 KiB
C++
#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;
|
|
}
|