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