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