1 /* Measure strtod implementation.
2    Copyright (C) 2013-2022 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4 
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9 
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14 
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, see
17    <https://www.gnu.org/licenses/>.  */
18 
19 #define TEST_MAIN
20 #define TEST_NAME "strtod"
21 
22 #include <stdio.h>
23 #include <stdlib.h>
24 #include "bench-timing.h"
25 
26 #undef INNER_LOOP_ITERS
27 #define INNER_LOOP_ITERS 131072
28 
29 static const char *inputs[] =
30 {
31   "1e308",
32   "100000000e300",
33   "0x1p1023",
34   "0x1000p1011",
35   "0x1p1020",
36   "0x0.00001p1040" "1e-307",
37   "0.000001e-301",
38   "0.0000001e-300",
39   "0.00000001e-299",
40   "1000000e-313",
41   "10000000e-314",
42   "100000000e-315",
43   "0x1p-1021",
44   "0x1000p-1033",
45   "0x10000p-1037",
46   "0x0.001p-1009",
47   "0x0.0001p-1005",
48   "12.345",
49   "12.345e19",
50   "-.1e+9",
51   ".125",
52   "1e20",
53   "0e-19",
54   "4\00012",
55   "5.9e-76",
56   "0x1.4p+3",
57   "0xAp0",
58   "0x0Ap0",
59   "0x0A",
60   "0xA0",
61   "0x0.A0p8",
62   "0x0.50p9",
63   "0x0.28p10",
64   "0x0.14p11",
65   "0x0.0A0p12",
66   "0x0.050p13",
67   "0x0.028p14",
68   "0x0.014p15",
69   "0x00.00A0p16",
70   "0x00.0050p17",
71   "0x00.0028p18",
72   "0x00.0014p19",
73   "0x1p-1023",
74   "0x0.8p-1022",
75   "Inf",
76   "-Inf",
77   "+InFiNiTy",
78   "0x80000Ap-23",
79   "1e-324",
80   "0x100000000000008p0",
81   "0x100000000000008.p0",
82   "0x100000000000008.00p0",
83   "0x10000000000000800p0",
84   "0x10000000000000801p0",
85   NULL
86 };
87 
88 int
do_bench(void)89 do_bench (void)
90 {
91   const size_t iters = INNER_LOOP_ITERS;
92 
93   for (size_t i = 0; inputs[i] != NULL; ++i)
94     {
95       char *ep;
96       timing_t start, stop, cur;
97 
98       printf ("Input %-24s:", inputs[i]);
99       TIMING_NOW (start);
100       for (size_t j = 0; j < iters; ++j)
101 	strtod (inputs[i], &ep);
102       TIMING_NOW (stop);
103 
104       TIMING_DIFF (cur, start, stop);
105       TIMING_PRINT_MEAN ((double) cur, (double) iters);
106       putchar ('\n');
107     }
108 
109   return 0;
110 }
111 
112 #define TEST_FUNCTION do_bench ()
113 
114 #include "../test-skeleton.c"
115