xref: /netbsd-src/external/apache2/llvm/dist/libcxx/benchmarks/stringstream.bench.cpp (revision 4d6fc14bc9b0c5bf3e30be318c143ee82cadd108)
1*4d6fc14bSjoerg #include "benchmark/benchmark.h"
2*4d6fc14bSjoerg #include "test_macros.h"
3*4d6fc14bSjoerg 
4*4d6fc14bSjoerg #include <sstream>
5*4d6fc14bSjoerg 
6*4d6fc14bSjoerg TEST_NOINLINE double istream_numbers();
7*4d6fc14bSjoerg 
istream_numbers()8*4d6fc14bSjoerg double istream_numbers() {
9*4d6fc14bSjoerg   const char *a[] = {
10*4d6fc14bSjoerg     "-6  69 -71  2.4882e-02 -100 101 -2.00005 5000000 -50000000",
11*4d6fc14bSjoerg     "-25 71   7 -9.3262e+01 -100 101 -2.00005 5000000 -50000000",
12*4d6fc14bSjoerg     "-14 53  46 -6.7026e-02 -100 101 -2.00005 5000000 -50000000"
13*4d6fc14bSjoerg   };
14*4d6fc14bSjoerg 
15*4d6fc14bSjoerg   int a1, a2, a3, a4, a5, a6, a7;
16*4d6fc14bSjoerg   double f1 = 0.0, f2 = 0.0, q = 0.0;
17*4d6fc14bSjoerg   for (int i=0; i < 3; i++) {
18*4d6fc14bSjoerg     std::istringstream s(a[i]);
19*4d6fc14bSjoerg     s >> a1
20*4d6fc14bSjoerg       >> a2
21*4d6fc14bSjoerg       >> a3
22*4d6fc14bSjoerg       >> f1
23*4d6fc14bSjoerg       >> a4
24*4d6fc14bSjoerg       >> a5
25*4d6fc14bSjoerg       >> f2
26*4d6fc14bSjoerg       >> a6
27*4d6fc14bSjoerg       >> a7;
28*4d6fc14bSjoerg     q += (a1 + a2 + a3 + a4 + a5 + a6 + a7 + f1 + f2)/1000000;
29*4d6fc14bSjoerg   }
30*4d6fc14bSjoerg   return q;
31*4d6fc14bSjoerg }
32*4d6fc14bSjoerg 
BM_Istream_numbers(benchmark::State & state)33*4d6fc14bSjoerg static void BM_Istream_numbers(benchmark::State &state) {
34*4d6fc14bSjoerg   double i = 0;
35*4d6fc14bSjoerg   while (state.KeepRunning())
36*4d6fc14bSjoerg     benchmark::DoNotOptimize(i += istream_numbers());
37*4d6fc14bSjoerg }
38*4d6fc14bSjoerg 
39*4d6fc14bSjoerg BENCHMARK(BM_Istream_numbers)->RangeMultiplier(2)->Range(1024, 4096);
40*4d6fc14bSjoerg BENCHMARK_MAIN();
41