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