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
29static 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
88int
89do_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 (format: "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 (c: '\n');
107 }
108
109 return 0;
110}
111
112#define TEST_FUNCTION do_bench ()
113
114#include "../test-skeleton.c"
115

source code of glibc/benchtests/bench-strtod.c