1// Copyright (c) Microsoft Corporation.
2// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
3
4#ifndef DOUBLE_FROM_CHARS_TEST_CASES_HPP
5#define DOUBLE_FROM_CHARS_TEST_CASES_HPP
6
7#include <charconv>
8#include <stddef.h>
9#include <system_error>
10using namespace std;
11
12inline constexpr DoubleFromCharsTestCase double_from_chars_test_cases[] = {
13 {.input: "1.000000000000a000", .fmt: chars_format::hex, .correct_idx: 18, .correct_ec: errc{}, .correct_value: 0x1.000000000000ap0}, // exact
14 {.input: "1.000000000000a001", .fmt: chars_format::hex, .correct_idx: 18, .correct_ec: errc{}, .correct_value: 0x1.000000000000ap0}, // below midpoint, round down
15 {.input: "1.000000000000a800", .fmt: chars_format::hex, .correct_idx: 18, .correct_ec: errc{}, .correct_value: 0x1.000000000000ap0}, // midpoint, round down to even
16 {.input: "1.000000000000a801", .fmt: chars_format::hex, .correct_idx: 18, .correct_ec: errc{}, .correct_value: 0x1.000000000000bp0}, // above midpoint, round up
17 {.input: "1.000000000000b000", .fmt: chars_format::hex, .correct_idx: 18, .correct_ec: errc{}, .correct_value: 0x1.000000000000bp0}, // exact
18 {.input: "1.000000000000b001", .fmt: chars_format::hex, .correct_idx: 18, .correct_ec: errc{}, .correct_value: 0x1.000000000000bp0}, // below midpoint, round down
19 {.input: "1.000000000000b800", .fmt: chars_format::hex, .correct_idx: 18, .correct_ec: errc{}, .correct_value: 0x1.000000000000cp0}, // midpoint, round up to even
20 {.input: "1.000000000000b801", .fmt: chars_format::hex, .correct_idx: 18, .correct_ec: errc{}, .correct_value: 0x1.000000000000cp0}, // above midpoint, round up
21
22 {.input: "1.00000000000020", .fmt: chars_format::hex, .correct_idx: 16, .correct_ec: errc{}, .correct_value: 0x1.0000000000002p0}, // exact
23 {.input: "1.00000000000021", .fmt: chars_format::hex, .correct_idx: 16, .correct_ec: errc{}, .correct_value: 0x1.0000000000002p0}, // below midpoint, round down
24 {.input: "1.00000000000028", .fmt: chars_format::hex, .correct_idx: 16, .correct_ec: errc{}, .correct_value: 0x1.0000000000002p0}, // midpoint, round down to even
25 {.input: "1.00000000000029", .fmt: chars_format::hex, .correct_idx: 16, .correct_ec: errc{}, .correct_value: 0x1.0000000000003p0}, // above midpoint, round up
26 {.input: "1.00000000000030", .fmt: chars_format::hex, .correct_idx: 16, .correct_ec: errc{}, .correct_value: 0x1.0000000000003p0}, // exact
27 {.input: "1.00000000000031", .fmt: chars_format::hex, .correct_idx: 16, .correct_ec: errc{}, .correct_value: 0x1.0000000000003p0}, // below midpoint, round down
28 {.input: "1.00000000000038", .fmt: chars_format::hex, .correct_idx: 16, .correct_ec: errc{}, .correct_value: 0x1.0000000000004p0}, // midpoint, round up to even
29 {.input: "1.00000000000039", .fmt: chars_format::hex, .correct_idx: 16, .correct_ec: errc{}, .correct_value: 0x1.0000000000004p0}, // above midpoint, round up
30
31 {.input: "1.00000000000000044408920985006261616945266723632812500000", .fmt: chars_format::general, .correct_idx: 58, .correct_ec: errc{},
32 .correct_value: 0x1.0000000000002p0}, // exact
33 {.input: "1.00000000000000045796699765787707292474806308746337890625", .fmt: chars_format::general, .correct_idx: 58, .correct_ec: errc{},
34 .correct_value: 0x1.0000000000002p0}, // below midpoint, round down
35 {.input: "1.00000000000000055511151231257827021181583404541015624999", .fmt: chars_format::general, .correct_idx: 58, .correct_ec: errc{},
36 .correct_value: 0x1.0000000000002p0}, // below midpoint, round down
37 {.input: "1.00000000000000055511151231257827021181583404541015625000", .fmt: chars_format::general, .correct_idx: 58, .correct_ec: errc{},
38 .correct_value: 0x1.0000000000002p0}, // midpoint, round down to even
39 {.input: "1.00000000000000055511151231257827021181583404541015625001", .fmt: chars_format::general, .correct_idx: 58, .correct_ec: errc{},
40 .correct_value: 0x1.0000000000003p0}, // above midpoint, round up
41 {.input: "1.00000000000000056898930012039272696711122989654541015625", .fmt: chars_format::general, .correct_idx: 58, .correct_ec: errc{},
42 .correct_value: 0x1.0000000000003p0}, // above midpoint, round up
43 {.input: "1.00000000000000066613381477509392425417900085449218750000", .fmt: chars_format::general, .correct_idx: 58, .correct_ec: errc{},
44 .correct_value: 0x1.0000000000003p0}, // exact
45 {.input: "1.00000000000000068001160258290838100947439670562744140625", .fmt: chars_format::general, .correct_idx: 58, .correct_ec: errc{},
46 .correct_value: 0x1.0000000000003p0}, // below midpoint, round down
47 {.input: "1.00000000000000077715611723760957829654216766357421874999", .fmt: chars_format::general, .correct_idx: 58, .correct_ec: errc{},
48 .correct_value: 0x1.0000000000003p0}, // below midpoint, round down
49 {.input: "1.00000000000000077715611723760957829654216766357421875000", .fmt: chars_format::general, .correct_idx: 58, .correct_ec: errc{},
50 .correct_value: 0x1.0000000000004p0}, // midpoint, round up to even
51 {.input: "1.00000000000000077715611723760957829654216766357421875001", .fmt: chars_format::general, .correct_idx: 58, .correct_ec: errc{},
52 .correct_value: 0x1.0000000000004p0}, // above midpoint, round up
53 {.input: "1.00000000000000079103390504542403505183756351470947265625", .fmt: chars_format::general, .correct_idx: 58, .correct_ec: errc{},
54 .correct_value: 0x1.0000000000004p0}, // above midpoint, round up
55
56 // https://www.exploringbinary.com/nondeterministic-floating-point-conversions-in-java/
57 {.input: "0.0000008p-1022", .fmt: chars_format::hex, .correct_idx: 15, .correct_ec: errc{}, .correct_value: 0x0.0000008p-1022},
58
59 // VSO-838635 "<charconv>: from_chars() mishandles certain subnormals"
60 // These values change on half-ulp boundaries:
61 // 1 * 2^-1075 ~= 2.47e-324 (half-ulp between zero and min subnormal)
62 // 2 * 2^-1075 ~= 4.94e-324 (min subnormal)
63 // 3 * 2^-1075 ~= 7.41e-324 (half-ulp between min subnormal and next subnormal)
64 // 4 * 2^-1075 ~= 9.88e-324 (next subnormal)
65 {.input: "1."
66 "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
67 "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
68 "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
69 "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
70 "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
71 "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
72 "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
73 "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
74 "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
75 "1111111111111111111e-324",
76 .fmt: chars_format::scientific, .correct_idx: 1007, .correct_ec: errc::result_out_of_range, .correct_value: 0x0.0000000000000p+0},
77 {.input: "2."
78 "2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222"
79 "2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222"
80 "2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222"
81 "2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222"
82 "2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222"
83 "2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222"
84 "2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222"
85 "2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222"
86 "2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222"
87 "2222222222222222222e-324",
88 .fmt: chars_format::scientific, .correct_idx: 1007, .correct_ec: errc::result_out_of_range, .correct_value: 0x0.0000000000000p+0},
89 {.input: "3."
90 "3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333"
91 "3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333"
92 "3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333"
93 "3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333"
94 "3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333"
95 "3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333"
96 "3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333"
97 "3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333"
98 "3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333"
99 "3333333333333333333e-324",
100 .fmt: chars_format::scientific, .correct_idx: 1007, .correct_ec: errc{}, .correct_value: 0x0.0000000000001p-1022},
101 {.input: "4."
102 "4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444"
103 "4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444"
104 "4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444"
105 "4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444"
106 "4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444"
107 "4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444"
108 "4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444"
109 "4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444"
110 "4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444"
111 "4444444444444444444e-324",
112 .fmt: chars_format::scientific, .correct_idx: 1007, .correct_ec: errc{}, .correct_value: 0x0.0000000000001p-1022},
113 {.input: "5."
114 "5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555"
115 "5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555"
116 "5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555"
117 "5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555"
118 "5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555"
119 "5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555"
120 "5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555"
121 "5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555"
122 "5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555"
123 "5555555555555555555e-324",
124 .fmt: chars_format::scientific, .correct_idx: 1007, .correct_ec: errc{}, .correct_value: 0x0.0000000000001p-1022},
125 {.input: "6."
126 "6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666"
127 "6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666"
128 "6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666"
129 "6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666"
130 "6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666"
131 "6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666"
132 "6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666"
133 "6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666"
134 "6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666"
135 "6666666666666666666e-324",
136 .fmt: chars_format::scientific, .correct_idx: 1007, .correct_ec: errc{}, .correct_value: 0x0.0000000000001p-1022},
137 {.input: "7."
138 "7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777"
139 "7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777"
140 "7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777"
141 "7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777"
142 "7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777"
143 "7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777"
144 "7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777"
145 "7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777"
146 "7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777"
147 "7777777777777777777e-324",
148 .fmt: chars_format::scientific, .correct_idx: 1007, .correct_ec: errc{}, .correct_value: 0x0.0000000000002p-1022},
149 {.input: "8."
150 "8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888"
151 "8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888"
152 "8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888"
153 "8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888"
154 "8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888"
155 "8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888"
156 "8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888"
157 "8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888"
158 "8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888"
159 "8888888888888888888e-324",
160 .fmt: chars_format::scientific, .correct_idx: 1007, .correct_ec: errc{}, .correct_value: 0x0.0000000000002p-1022},
161 {.input: "9."
162 "9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
163 "9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
164 "9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
165 "9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
166 "9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
167 "9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
168 "9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
169 "9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
170 "9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
171 "9999999999999999999e-324",
172 .fmt: chars_format::scientific, .correct_idx: 1007, .correct_ec: errc{}, .correct_value: 0x0.0000000000002p-1022},
173
174 // VSO-852024: Test cases for round-to-nearest, ties-to-even.
175 // Consider the values:
176 // A: 0x1.0000000000000p+0 == 1.0000000000000000000000000000000000000000000000000000
177 // X: (1 + 2^-53) * 2^0 == 1.00000000000000011102230246251565404236316680908203125
178 // B: 0x1.0000000000001p+0 == 1.0000000000000002220446049250313080847263336181640625
179 // X is equidistant from A and B. Because they're tied for being nearest, we need to round to even.
180 // That means rounding down to A, because A's least significant hexit 0 is even.
181 // However, values between X and B aren't tied - they're simply nearer to B, so they need to round up to B.
182 // We need to handle tricky cases like the digits of X, followed by a million 0 digits, followed by a 1 digit.
183 // Similarly:
184 // E: 0x1.ffffffffffffep+0 == 1.999999999999999555910790149937383830547332763671875
185 // Y: (1 + 1 - 3 * 2^-53) * 2^0 == 1.99999999999999966693309261245303787291049957275390625
186 // F: 0x1.fffffffffffffp+0 == 1.9999999999999997779553950749686919152736663818359375
187 // The hexit E is 14 and even, while F is 15 and odd.
188
189 // just below (0 + 2^-53) * 2^-1022: decremented last digit, then appended three 9 digits
190 {.input: "0."
191 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
192 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
193 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002470"
194 "3282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772"
195 "2858865463328355177969898199387398005390939063150356595155702263922908583924491051844359318028499365361525003"
196 "1937045767824921936562366986365848075700158576926990370631192827955855133292783433840935197801553124659726357"
197 "9574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324"
198 "6736009689513405355374585166611342237666786041621596804619144672918403005300575308490487653917113865916462395"
199 "2491262365388187963623937328042389101867234849766823508986338858792562830275599565752445550725518931369083625"
200 "4779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328124999",
201 .fmt: chars_format::fixed, .correct_idx: 1080, .correct_ec: errc::result_out_of_range, .correct_value: 0x0.0000000000000p+0},
202
203 // (0 + 2^-53) * 2^-1022 exactly
204 {.input: "0."
205 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
206 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
207 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002470"
208 "3282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772"
209 "2858865463328355177969898199387398005390939063150356595155702263922908583924491051844359318028499365361525003"
210 "1937045767824921936562366986365848075700158576926990370631192827955855133292783433840935197801553124659726357"
211 "9574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324"
212 "6736009689513405355374585166611342237666786041621596804619144672918403005300575308490487653917113865916462395"
213 "2491262365388187963623937328042389101867234849766823508986338858792562830275599565752445550725518931369083625"
214 "4779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328125",
215 .fmt: chars_format::fixed, .correct_idx: 1077, .correct_ec: errc::result_out_of_range, .correct_value: 0x0.0000000000000p+0},
216
217 // (0 + 2^-53) * 2^-1022 exactly, followed by a thousand 0 digits
218 {.input: "0."
219 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
220 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
221 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002470"
222 "3282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772"
223 "2858865463328355177969898199387398005390939063150356595155702263922908583924491051844359318028499365361525003"
224 "1937045767824921936562366986365848075700158576926990370631192827955855133292783433840935197801553124659726357"
225 "9574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324"
226 "6736009689513405355374585166611342237666786041621596804619144672918403005300575308490487653917113865916462395"
227 "2491262365388187963623937328042389101867234849766823508986338858792562830275599565752445550725518931369083625"
228 "4779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328125000000000000000"
229 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
230 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
231 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
232 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
233 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
234 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
235 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
236 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
237 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
238 "0000",
239 .fmt: chars_format::fixed, .correct_idx: 2077, .correct_ec: errc::result_out_of_range, .correct_value: 0x0.0000000000000p+0},
240
241 // above (0 + 2^-53) * 2^-1022: appended a thousand 0 digits followed by a 1 digit
242 {.input: "0."
243 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
244 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
245 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002470"
246 "3282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772"
247 "2858865463328355177969898199387398005390939063150356595155702263922908583924491051844359318028499365361525003"
248 "1937045767824921936562366986365848075700158576926990370631192827955855133292783433840935197801553124659726357"
249 "9574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324"
250 "6736009689513405355374585166611342237666786041621596804619144672918403005300575308490487653917113865916462395"
251 "2491262365388187963623937328042389101867234849766823508986338858792562830275599565752445550725518931369083625"
252 "4779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328125000000000000000"
253 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
254 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
255 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
256 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
257 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
258 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
259 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
260 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
261 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
262 "00001",
263 .fmt: chars_format::fixed, .correct_idx: 2078, .correct_ec: errc{}, .correct_value: 0x0.0000000000001p-1022},
264
265 // above (0 + 2^-53) * 2^-1022: appended a 1 digit
266 {.input: "0."
267 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
268 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
269 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002470"
270 "3282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772"
271 "2858865463328355177969898199387398005390939063150356595155702263922908583924491051844359318028499365361525003"
272 "1937045767824921936562366986365848075700158576926990370631192827955855133292783433840935197801553124659726357"
273 "9574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324"
274 "6736009689513405355374585166611342237666786041621596804619144672918403005300575308490487653917113865916462395"
275 "2491262365388187963623937328042389101867234849766823508986338858792562830275599565752445550725518931369083625"
276 "47791869486679949683240497058210285131854513962138377228261454376934125320985913276672363281251",
277 .fmt: chars_format::fixed, .correct_idx: 1078, .correct_ec: errc{}, .correct_value: 0x0.0000000000001p-1022},
278
279 // above (0 + 2^-53) * 2^-1022: incremented last digit
280 {.input: "0."
281 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
282 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
283 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002470"
284 "3282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772"
285 "2858865463328355177969898199387398005390939063150356595155702263922908583924491051844359318028499365361525003"
286 "1937045767824921936562366986365848075700158576926990370631192827955855133292783433840935197801553124659726357"
287 "9574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324"
288 "6736009689513405355374585166611342237666786041621596804619144672918403005300575308490487653917113865916462395"
289 "2491262365388187963623937328042389101867234849766823508986338858792562830275599565752445550725518931369083625"
290 "4779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328126",
291 .fmt: chars_format::fixed, .correct_idx: 1077, .correct_ec: errc{}, .correct_value: 0x0.0000000000001p-1022},
292
293 // just below (0 + 1 - 3 * 2^-53) * 2^-1022: decremented last digit, then appended three 9 digits
294 {.input: "0."
295 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
296 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
297 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072006419"
298 "9176395546258779936602667813027328296362349540005779643539444484102225369938322261431279727704724131030539099"
299 "2976863718870946851468024222968583977359185141028540361975476844303195813273469348201130421165308554532083149"
300 "3676067608324920106709384047261543474082573017216837765643921010648239116172158852475760231303527077156200284"
301 "1775343298712758123539074213191978739083589771549597066404661620550578925994422322342444472859570416955675758"
302 "5423752417124134805999073137808018133811049489046686648944255834488901008259721496147104204399198556535697531"
303 "0055231935448663898095485089604066035268185282450207861510244351362091237759797852153577038777504570568436147"
304 "5530270683064113556748943345076587312006145811358486831521563686919762403704226016998291015624999",
305 .fmt: chars_format::fixed, .correct_idx: 1080, .correct_ec: errc{}, .correct_value: 0x0.ffffffffffffep-1022},
306
307 // (0 + 1 - 3 * 2^-53) * 2^-1022 exactly
308 {.input: "0."
309 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
310 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
311 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072006419"
312 "9176395546258779936602667813027328296362349540005779643539444484102225369938322261431279727704724131030539099"
313 "2976863718870946851468024222968583977359185141028540361975476844303195813273469348201130421165308554532083149"
314 "3676067608324920106709384047261543474082573017216837765643921010648239116172158852475760231303527077156200284"
315 "1775343298712758123539074213191978739083589771549597066404661620550578925994422322342444472859570416955675758"
316 "5423752417124134805999073137808018133811049489046686648944255834488901008259721496147104204399198556535697531"
317 "0055231935448663898095485089604066035268185282450207861510244351362091237759797852153577038777504570568436147"
318 "5530270683064113556748943345076587312006145811358486831521563686919762403704226016998291015625",
319 .fmt: chars_format::fixed, .correct_idx: 1077, .correct_ec: errc{}, .correct_value: 0x0.ffffffffffffep-1022},
320
321 // (0 + 1 - 3 * 2^-53) * 2^-1022 exactly, followed by a thousand 0 digits
322 {.input: "0."
323 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
324 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
325 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072006419"
326 "9176395546258779936602667813027328296362349540005779643539444484102225369938322261431279727704724131030539099"
327 "2976863718870946851468024222968583977359185141028540361975476844303195813273469348201130421165308554532083149"
328 "3676067608324920106709384047261543474082573017216837765643921010648239116172158852475760231303527077156200284"
329 "1775343298712758123539074213191978739083589771549597066404661620550578925994422322342444472859570416955675758"
330 "5423752417124134805999073137808018133811049489046686648944255834488901008259721496147104204399198556535697531"
331 "0055231935448663898095485089604066035268185282450207861510244351362091237759797852153577038777504570568436147"
332 "5530270683064113556748943345076587312006145811358486831521563686919762403704226016998291015625000000000000000"
333 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
334 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
335 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
336 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
337 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
338 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
339 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
340 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
341 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
342 "0000",
343 .fmt: chars_format::fixed, .correct_idx: 2077, .correct_ec: errc{}, .correct_value: 0x0.ffffffffffffep-1022},
344
345 // above (0 + 1 - 3 * 2^-53) * 2^-1022: appended a thousand 0 digits followed by a 1 digit
346 {.input: "0."
347 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
348 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
349 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072006419"
350 "9176395546258779936602667813027328296362349540005779643539444484102225369938322261431279727704724131030539099"
351 "2976863718870946851468024222968583977359185141028540361975476844303195813273469348201130421165308554532083149"
352 "3676067608324920106709384047261543474082573017216837765643921010648239116172158852475760231303527077156200284"
353 "1775343298712758123539074213191978739083589771549597066404661620550578925994422322342444472859570416955675758"
354 "5423752417124134805999073137808018133811049489046686648944255834488901008259721496147104204399198556535697531"
355 "0055231935448663898095485089604066035268185282450207861510244351362091237759797852153577038777504570568436147"
356 "5530270683064113556748943345076587312006145811358486831521563686919762403704226016998291015625000000000000000"
357 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
358 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
359 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
360 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
361 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
362 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
363 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
364 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
365 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
366 "00001",
367 .fmt: chars_format::fixed, .correct_idx: 2078, .correct_ec: errc{}, .correct_value: 0x0.fffffffffffffp-1022},
368
369 // above (0 + 1 - 3 * 2^-53) * 2^-1022: appended a 1 digit
370 {.input: "0."
371 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
372 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
373 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072006419"
374 "9176395546258779936602667813027328296362349540005779643539444484102225369938322261431279727704724131030539099"
375 "2976863718870946851468024222968583977359185141028540361975476844303195813273469348201130421165308554532083149"
376 "3676067608324920106709384047261543474082573017216837765643921010648239116172158852475760231303527077156200284"
377 "1775343298712758123539074213191978739083589771549597066404661620550578925994422322342444472859570416955675758"
378 "5423752417124134805999073137808018133811049489046686648944255834488901008259721496147104204399198556535697531"
379 "0055231935448663898095485089604066035268185282450207861510244351362091237759797852153577038777504570568436147"
380 "55302706830641135567489433450765873120061458113584868315215636869197624037042260169982910156251",
381 .fmt: chars_format::fixed, .correct_idx: 1078, .correct_ec: errc{}, .correct_value: 0x0.fffffffffffffp-1022},
382
383 // above (0 + 1 - 3 * 2^-53) * 2^-1022: incremented last digit
384 {.input: "0."
385 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
386 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
387 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072006419"
388 "9176395546258779936602667813027328296362349540005779643539444484102225369938322261431279727704724131030539099"
389 "2976863718870946851468024222968583977359185141028540361975476844303195813273469348201130421165308554532083149"
390 "3676067608324920106709384047261543474082573017216837765643921010648239116172158852475760231303527077156200284"
391 "1775343298712758123539074213191978739083589771549597066404661620550578925994422322342444472859570416955675758"
392 "5423752417124134805999073137808018133811049489046686648944255834488901008259721496147104204399198556535697531"
393 "0055231935448663898095485089604066035268185282450207861510244351362091237759797852153577038777504570568436147"
394 "5530270683064113556748943345076587312006145811358486831521563686919762403704226016998291015626",
395 .fmt: chars_format::fixed, .correct_idx: 1077, .correct_ec: errc{}, .correct_value: 0x0.fffffffffffffp-1022},
396
397 // just below (1 + 2^-53) * 2^-1022: decremented last digit, then appended three 9 digits
398 {.input: "0."
399 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
400 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
401 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072016301"
402 "2305563795567615250361241457301801308322872404958664760675944619203679411688695321398552054903200090343478188"
403 "4412325572184367563347617020518175998922941393629966742598285899994830148971433555578567693279306015978183162"
404 "1424250679624607852958851992724935776883207324924799248168692322471659649343292587839501022509739575795105716"
405 "0073834364573849432419299709217920738991976169431413149717326525502008499797367678374315520581880443916381057"
406 "2367791175177756227497413804253387084478193655533073867420834526162513029462022730109054820067654020201547112"
407 "0020281397001415752591234401773622442737124681517501897455599786532342558862196115163359241679580296044770649"
408 "4647018477736093430045142168360701364747951396213837722826145437693412532098591327667236328124999",
409 .fmt: chars_format::fixed, .correct_idx: 1080, .correct_ec: errc{}, .correct_value: 0x1.0000000000000p-1022},
410
411 // (1 + 2^-53) * 2^-1022 exactly
412 {.input: "0."
413 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
414 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
415 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072016301"
416 "2305563795567615250361241457301801308322872404958664760675944619203679411688695321398552054903200090343478188"
417 "4412325572184367563347617020518175998922941393629966742598285899994830148971433555578567693279306015978183162"
418 "1424250679624607852958851992724935776883207324924799248168692322471659649343292587839501022509739575795105716"
419 "0073834364573849432419299709217920738991976169431413149717326525502008499797367678374315520581880443916381057"
420 "2367791175177756227497413804253387084478193655533073867420834526162513029462022730109054820067654020201547112"
421 "0020281397001415752591234401773622442737124681517501897455599786532342558862196115163359241679580296044770649"
422 "4647018477736093430045142168360701364747951396213837722826145437693412532098591327667236328125",
423 .fmt: chars_format::fixed, .correct_idx: 1077, .correct_ec: errc{}, .correct_value: 0x1.0000000000000p-1022},
424
425 // (1 + 2^-53) * 2^-1022 exactly, followed by a thousand 0 digits
426 {.input: "0."
427 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
428 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
429 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072016301"
430 "2305563795567615250361241457301801308322872404958664760675944619203679411688695321398552054903200090343478188"
431 "4412325572184367563347617020518175998922941393629966742598285899994830148971433555578567693279306015978183162"
432 "1424250679624607852958851992724935776883207324924799248168692322471659649343292587839501022509739575795105716"
433 "0073834364573849432419299709217920738991976169431413149717326525502008499797367678374315520581880443916381057"
434 "2367791175177756227497413804253387084478193655533073867420834526162513029462022730109054820067654020201547112"
435 "0020281397001415752591234401773622442737124681517501897455599786532342558862196115163359241679580296044770649"
436 "4647018477736093430045142168360701364747951396213837722826145437693412532098591327667236328125000000000000000"
437 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
438 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
439 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
440 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
441 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
442 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
443 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
444 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
445 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
446 "0000",
447 .fmt: chars_format::fixed, .correct_idx: 2077, .correct_ec: errc{}, .correct_value: 0x1.0000000000000p-1022},
448
449 // above (1 + 2^-53) * 2^-1022: appended a thousand 0 digits followed by a 1 digit
450 {.input: "0."
451 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
452 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
453 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072016301"
454 "2305563795567615250361241457301801308322872404958664760675944619203679411688695321398552054903200090343478188"
455 "4412325572184367563347617020518175998922941393629966742598285899994830148971433555578567693279306015978183162"
456 "1424250679624607852958851992724935776883207324924799248168692322471659649343292587839501022509739575795105716"
457 "0073834364573849432419299709217920738991976169431413149717326525502008499797367678374315520581880443916381057"
458 "2367791175177756227497413804253387084478193655533073867420834526162513029462022730109054820067654020201547112"
459 "0020281397001415752591234401773622442737124681517501897455599786532342558862196115163359241679580296044770649"
460 "4647018477736093430045142168360701364747951396213837722826145437693412532098591327667236328125000000000000000"
461 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
462 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
463 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
464 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
465 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
466 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
467 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
468 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
469 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
470 "00001",
471 .fmt: chars_format::fixed, .correct_idx: 2078, .correct_ec: errc{}, .correct_value: 0x1.0000000000001p-1022},
472
473 // above (1 + 2^-53) * 2^-1022: appended a 1 digit
474 {.input: "0."
475 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
476 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
477 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072016301"
478 "2305563795567615250361241457301801308322872404958664760675944619203679411688695321398552054903200090343478188"
479 "4412325572184367563347617020518175998922941393629966742598285899994830148971433555578567693279306015978183162"
480 "1424250679624607852958851992724935776883207324924799248168692322471659649343292587839501022509739575795105716"
481 "0073834364573849432419299709217920738991976169431413149717326525502008499797367678374315520581880443916381057"
482 "2367791175177756227497413804253387084478193655533073867420834526162513029462022730109054820067654020201547112"
483 "0020281397001415752591234401773622442737124681517501897455599786532342558862196115163359241679580296044770649"
484 "46470184777360934300451421683607013647479513962138377228261454376934125320985913276672363281251",
485 .fmt: chars_format::fixed, .correct_idx: 1078, .correct_ec: errc{}, .correct_value: 0x1.0000000000001p-1022},
486
487 // above (1 + 2^-53) * 2^-1022: incremented last digit
488 {.input: "0."
489 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
490 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
491 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072016301"
492 "2305563795567615250361241457301801308322872404958664760675944619203679411688695321398552054903200090343478188"
493 "4412325572184367563347617020518175998922941393629966742598285899994830148971433555578567693279306015978183162"
494 "1424250679624607852958851992724935776883207324924799248168692322471659649343292587839501022509739575795105716"
495 "0073834364573849432419299709217920738991976169431413149717326525502008499797367678374315520581880443916381057"
496 "2367791175177756227497413804253387084478193655533073867420834526162513029462022730109054820067654020201547112"
497 "0020281397001415752591234401773622442737124681517501897455599786532342558862196115163359241679580296044770649"
498 "4647018477736093430045142168360701364747951396213837722826145437693412532098591327667236328126",
499 .fmt: chars_format::fixed, .correct_idx: 1077, .correct_ec: errc{}, .correct_value: 0x1.0000000000001p-1022},
500
501 // just below (1 + 1 - 3 * 2^-53) * 2^-1022: decremented last digit, then appended three 9 digits
502 {.input: "0."
503 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
504 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
505 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044501477170144020250"
506 "8199667279499186358524265859260511351695091228726223124931264069530541271189424317838013700808305231545782515"
507 "4530323827726959236845743044099361970891187471508150509418060480375117378320411851935338796416115205148741308"
508 "3163272520124606023105869053620631175265621765214646643181420505164043632222668006474326056011713528291579642"
509 "2274554896821334728738317548403413978098469341510556195293821919814730032341053661708792231510873354131880491"
510 "1055533902788485678121901775450062980622457102958163711745945687733011032421168917765671370549738710820782247"
511 "7584250967061891687062782163335299376138075114200886249979505279101870966346394401564490729731565935244123171"
512 "5398102212132212018470035807616260163568645811358486831521563686919762403704226016998291015624999",
513 .fmt: chars_format::fixed, .correct_idx: 1080, .correct_ec: errc{}, .correct_value: 0x1.ffffffffffffep-1022},
514
515 // (1 + 1 - 3 * 2^-53) * 2^-1022 exactly
516 {.input: "0."
517 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
518 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
519 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044501477170144020250"
520 "8199667279499186358524265859260511351695091228726223124931264069530541271189424317838013700808305231545782515"
521 "4530323827726959236845743044099361970891187471508150509418060480375117378320411851935338796416115205148741308"
522 "3163272520124606023105869053620631175265621765214646643181420505164043632222668006474326056011713528291579642"
523 "2274554896821334728738317548403413978098469341510556195293821919814730032341053661708792231510873354131880491"
524 "1055533902788485678121901775450062980622457102958163711745945687733011032421168917765671370549738710820782247"
525 "7584250967061891687062782163335299376138075114200886249979505279101870966346394401564490729731565935244123171"
526 "5398102212132212018470035807616260163568645811358486831521563686919762403704226016998291015625",
527 .fmt: chars_format::fixed, .correct_idx: 1077, .correct_ec: errc{}, .correct_value: 0x1.ffffffffffffep-1022},
528
529 // (1 + 1 - 3 * 2^-53) * 2^-1022 exactly, followed by a thousand 0 digits
530 {.input: "0."
531 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
532 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
533 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044501477170144020250"
534 "8199667279499186358524265859260511351695091228726223124931264069530541271189424317838013700808305231545782515"
535 "4530323827726959236845743044099361970891187471508150509418060480375117378320411851935338796416115205148741308"
536 "3163272520124606023105869053620631175265621765214646643181420505164043632222668006474326056011713528291579642"
537 "2274554896821334728738317548403413978098469341510556195293821919814730032341053661708792231510873354131880491"
538 "1055533902788485678121901775450062980622457102958163711745945687733011032421168917765671370549738710820782247"
539 "7584250967061891687062782163335299376138075114200886249979505279101870966346394401564490729731565935244123171"
540 "5398102212132212018470035807616260163568645811358486831521563686919762403704226016998291015625000000000000000"
541 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
542 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
543 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
544 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
545 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
546 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
547 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
548 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
549 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
550 "0000",
551 .fmt: chars_format::fixed, .correct_idx: 2077, .correct_ec: errc{}, .correct_value: 0x1.ffffffffffffep-1022},
552
553 // above (1 + 1 - 3 * 2^-53) * 2^-1022: appended a thousand 0 digits followed by a 1 digit
554 {.input: "0."
555 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
556 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
557 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044501477170144020250"
558 "8199667279499186358524265859260511351695091228726223124931264069530541271189424317838013700808305231545782515"
559 "4530323827726959236845743044099361970891187471508150509418060480375117378320411851935338796416115205148741308"
560 "3163272520124606023105869053620631175265621765214646643181420505164043632222668006474326056011713528291579642"
561 "2274554896821334728738317548403413978098469341510556195293821919814730032341053661708792231510873354131880491"
562 "1055533902788485678121901775450062980622457102958163711745945687733011032421168917765671370549738710820782247"
563 "7584250967061891687062782163335299376138075114200886249979505279101870966346394401564490729731565935244123171"
564 "5398102212132212018470035807616260163568645811358486831521563686919762403704226016998291015625000000000000000"
565 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
566 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
567 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
568 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
569 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
570 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
571 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
572 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
573 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
574 "00001",
575 .fmt: chars_format::fixed, .correct_idx: 2078, .correct_ec: errc{}, .correct_value: 0x1.fffffffffffffp-1022},
576
577 // above (1 + 1 - 3 * 2^-53) * 2^-1022: appended a 1 digit
578 {.input: "0."
579 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
580 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
581 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044501477170144020250"
582 "8199667279499186358524265859260511351695091228726223124931264069530541271189424317838013700808305231545782515"
583 "4530323827726959236845743044099361970891187471508150509418060480375117378320411851935338796416115205148741308"
584 "3163272520124606023105869053620631175265621765214646643181420505164043632222668006474326056011713528291579642"
585 "2274554896821334728738317548403413978098469341510556195293821919814730032341053661708792231510873354131880491"
586 "1055533902788485678121901775450062980622457102958163711745945687733011032421168917765671370549738710820782247"
587 "7584250967061891687062782163335299376138075114200886249979505279101870966346394401564490729731565935244123171"
588 "53981022121322120184700358076162601635686458113584868315215636869197624037042260169982910156251",
589 .fmt: chars_format::fixed, .correct_idx: 1078, .correct_ec: errc{}, .correct_value: 0x1.fffffffffffffp-1022},
590
591 // above (1 + 1 - 3 * 2^-53) * 2^-1022: incremented last digit
592 {.input: "0."
593 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
594 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
595 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044501477170144020250"
596 "8199667279499186358524265859260511351695091228726223124931264069530541271189424317838013700808305231545782515"
597 "4530323827726959236845743044099361970891187471508150509418060480375117378320411851935338796416115205148741308"
598 "3163272520124606023105869053620631175265621765214646643181420505164043632222668006474326056011713528291579642"
599 "2274554896821334728738317548403413978098469341510556195293821919814730032341053661708792231510873354131880491"
600 "1055533902788485678121901775450062980622457102958163711745945687733011032421168917765671370549738710820782247"
601 "7584250967061891687062782163335299376138075114200886249979505279101870966346394401564490729731565935244123171"
602 "5398102212132212018470035807616260163568645811358486831521563686919762403704226016998291015626",
603 .fmt: chars_format::fixed, .correct_idx: 1077, .correct_ec: errc{}, .correct_value: 0x1.fffffffffffffp-1022},
604
605 // just below (1 + 2^-53) * 2^-33: decremented last digit, then appended three 9 digits
606 {.input: "0.00000000011641532182693482737782207114105741986576081359316958696581423282623291015624999", .fmt: chars_format::fixed,
607 .correct_idx: 91, .correct_ec: errc{}, .correct_value: 0x1.0000000000000p-33},
608
609 // (1 + 2^-53) * 2^-33 exactly
610 {.input: "0.00000000011641532182693482737782207114105741986576081359316958696581423282623291015625", .fmt: chars_format::fixed,
611 .correct_idx: 88, .correct_ec: errc{}, .correct_value: 0x1.0000000000000p-33},
612
613 // (1 + 2^-53) * 2^-33 exactly, followed by a thousand 0 digits
614 {.input: "0."
615 "0000000001164153218269348273778220711410574198657608135931695869658142328262329101562500000000000000000000000"
616 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
617 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
618 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
619 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
620 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
621 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
622 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
623 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
624 "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
625 .fmt: chars_format::fixed, .correct_idx: 1088, .correct_ec: errc{}, .correct_value: 0x1.0000000000000p-33},
626
627 // above (1 + 2^-53) * 2^-33: appended a thousand 0 digits followed by a 1 digit
628 {.input: "0."
629 "0000000001164153218269348273778220711410574198657608135931695869658142328262329101562500000000000000000000000"
630 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
631 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
632 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
633 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
634 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
635 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
636 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
637 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
638 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001",
639 .fmt: chars_format::fixed, .correct_idx: 1089, .correct_ec: errc{}, .correct_value: 0x1.0000000000001p-33},
640
641 // above (1 + 2^-53) * 2^-33: appended a 1 digit
642 {.input: "0.000000000116415321826934827377822071141057419865760813593169586965814232826232910156251", .fmt: chars_format::fixed,
643 .correct_idx: 89, .correct_ec: errc{}, .correct_value: 0x1.0000000000001p-33},
644
645 // above (1 + 2^-53) * 2^-33: incremented last digit
646 {.input: "0.00000000011641532182693482737782207114105741986576081359316958696581423282623291015626", .fmt: chars_format::fixed,
647 .correct_idx: 88, .correct_ec: errc{}, .correct_value: 0x1.0000000000001p-33},
648
649 // just below (1 + 1 - 3 * 2^-53) * 2^-33: decremented last digit, then appended three 9 digits
650 {.input: "0.00000000023283064365386959013215878657682774040271755922049123910255730152130126953124999", .fmt: chars_format::fixed,
651 .correct_idx: 91, .correct_ec: errc{}, .correct_value: 0x1.ffffffffffffep-33},
652
653 // (1 + 1 - 3 * 2^-53) * 2^-33 exactly
654 {.input: "0.00000000023283064365386959013215878657682774040271755922049123910255730152130126953125", .fmt: chars_format::fixed,
655 .correct_idx: 88, .correct_ec: errc{}, .correct_value: 0x1.ffffffffffffep-33},
656
657 // (1 + 1 - 3 * 2^-53) * 2^-33 exactly, followed by a thousand 0 digits
658 {.input: "0."
659 "0000000002328306436538695901321587865768277404027175592204912391025573015213012695312500000000000000000000000"
660 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
661 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
662 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
663 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
664 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
665 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
666 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
667 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
668 "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
669 .fmt: chars_format::fixed, .correct_idx: 1088, .correct_ec: errc{}, .correct_value: 0x1.ffffffffffffep-33},
670
671 // above (1 + 1 - 3 * 2^-53) * 2^-33: appended a thousand 0 digits followed by a 1 digit
672 {.input: "0."
673 "0000000002328306436538695901321587865768277404027175592204912391025573015213012695312500000000000000000000000"
674 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
675 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
676 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
677 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
678 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
679 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
680 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
681 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
682 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001",
683 .fmt: chars_format::fixed, .correct_idx: 1089, .correct_ec: errc{}, .correct_value: 0x1.fffffffffffffp-33},
684
685 // above (1 + 1 - 3 * 2^-53) * 2^-33: appended a 1 digit
686 {.input: "0.000000000232830643653869590132158786576827740402717559220491239102557301521301269531251", .fmt: chars_format::fixed,
687 .correct_idx: 89, .correct_ec: errc{}, .correct_value: 0x1.fffffffffffffp-33},
688
689 // above (1 + 1 - 3 * 2^-53) * 2^-33: incremented last digit
690 {.input: "0.00000000023283064365386959013215878657682774040271755922049123910255730152130126953126", .fmt: chars_format::fixed,
691 .correct_idx: 88, .correct_ec: errc{}, .correct_value: 0x1.fffffffffffffp-33},
692
693 // just below (1 + 2^-53) * 2^0: decremented last digit, then appended three 9 digits
694 {.input: "1.00000000000000011102230246251565404236316680908203124999", .fmt: chars_format::fixed, .correct_idx: 58, .correct_ec: errc{},
695 .correct_value: 0x1.0000000000000p+0},
696
697 // (1 + 2^-53) * 2^0 exactly
698 {.input: "1.00000000000000011102230246251565404236316680908203125", .fmt: chars_format::fixed, .correct_idx: 55, .correct_ec: errc{}, .correct_value: 0x1.0000000000000p+0},
699
700 // (1 + 2^-53) * 2^0 exactly, followed by a thousand 0 digits
701 {.input: "1."
702 "0000000000000001110223024625156540423631668090820312500000000000000000000000000000000000000000000000000000000"
703 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
704 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
705 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
706 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
707 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
708 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
709 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
710 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
711 "000000000000000000000000000000000000000000000000000000000000000000000000",
712 .fmt: chars_format::fixed, .correct_idx: 1055, .correct_ec: errc{}, .correct_value: 0x1.0000000000000p+0},
713
714 // above (1 + 2^-53) * 2^0: appended a thousand 0 digits followed by a 1 digit
715 {.input: "1."
716 "0000000000000001110223024625156540423631668090820312500000000000000000000000000000000000000000000000000000000"
717 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
718 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
719 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
720 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
721 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
722 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
723 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
724 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
725 "0000000000000000000000000000000000000000000000000000000000000000000000001",
726 .fmt: chars_format::fixed, .correct_idx: 1056, .correct_ec: errc{}, .correct_value: 0x1.0000000000001p+0},
727
728 // above (1 + 2^-53) * 2^0: appended a 1 digit
729 {.input: "1.000000000000000111022302462515654042363166809082031251", .fmt: chars_format::fixed, .correct_idx: 56, .correct_ec: errc{}, .correct_value: 0x1.0000000000001p+0},
730
731 // above (1 + 2^-53) * 2^0: incremented last digit
732 {.input: "1.00000000000000011102230246251565404236316680908203126", .fmt: chars_format::fixed, .correct_idx: 55, .correct_ec: errc{}, .correct_value: 0x1.0000000000001p+0},
733
734 // just below (1 + 1 - 3 * 2^-53) * 2^0: decremented last digit, then appended three 9 digits
735 {.input: "1.99999999999999966693309261245303787291049957275390624999", .fmt: chars_format::fixed, .correct_idx: 58, .correct_ec: errc{},
736 .correct_value: 0x1.ffffffffffffep+0},
737
738 // (1 + 1 - 3 * 2^-53) * 2^0 exactly
739 {.input: "1.99999999999999966693309261245303787291049957275390625", .fmt: chars_format::fixed, .correct_idx: 55, .correct_ec: errc{}, .correct_value: 0x1.ffffffffffffep+0},
740
741 // (1 + 1 - 3 * 2^-53) * 2^0 exactly, followed by a thousand 0 digits
742 {.input: "1."
743 "9999999999999996669330926124530378729104995727539062500000000000000000000000000000000000000000000000000000000"
744 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
745 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
746 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
747 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
748 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
749 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
750 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
751 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
752 "000000000000000000000000000000000000000000000000000000000000000000000000",
753 .fmt: chars_format::fixed, .correct_idx: 1055, .correct_ec: errc{}, .correct_value: 0x1.ffffffffffffep+0},
754
755 // above (1 + 1 - 3 * 2^-53) * 2^0: appended a thousand 0 digits followed by a 1 digit
756 {.input: "1."
757 "9999999999999996669330926124530378729104995727539062500000000000000000000000000000000000000000000000000000000"
758 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
759 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
760 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
761 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
762 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
763 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
764 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
765 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
766 "0000000000000000000000000000000000000000000000000000000000000000000000001",
767 .fmt: chars_format::fixed, .correct_idx: 1056, .correct_ec: errc{}, .correct_value: 0x1.fffffffffffffp+0},
768
769 // above (1 + 1 - 3 * 2^-53) * 2^0: appended a 1 digit
770 {.input: "1.999999999999999666933092612453037872910499572753906251", .fmt: chars_format::fixed, .correct_idx: 56, .correct_ec: errc{}, .correct_value: 0x1.fffffffffffffp+0},
771
772 // above (1 + 1 - 3 * 2^-53) * 2^0: incremented last digit
773 {.input: "1.99999999999999966693309261245303787291049957275390626", .fmt: chars_format::fixed, .correct_idx: 55, .correct_ec: errc{}, .correct_value: 0x1.fffffffffffffp+0},
774
775 // just below (1 + 2^-53) * 2^33: decremented last digit, then appended three 9 digits
776 {.input: "8589934592.00000095367431640624999", .fmt: chars_format::fixed, .correct_idx: 34, .correct_ec: errc{}, .correct_value: 0x1.0000000000000p+33},
777
778 // (1 + 2^-53) * 2^33 exactly
779 {.input: "8589934592.00000095367431640625", .fmt: chars_format::fixed, .correct_idx: 31, .correct_ec: errc{}, .correct_value: 0x1.0000000000000p+33},
780
781 // (1 + 2^-53) * 2^33 exactly, followed by a thousand 0 digits
782 {.input: "8589934592."
783 "0000009536743164062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
784 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
785 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
786 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
787 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
788 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
789 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
790 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
791 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
792 "000000000000000000000000000000000000000",
793 .fmt: chars_format::fixed, .correct_idx: 1031, .correct_ec: errc{}, .correct_value: 0x1.0000000000000p+33},
794
795 // above (1 + 2^-53) * 2^33: appended a thousand 0 digits followed by a 1 digit
796 {.input: "8589934592."
797 "0000009536743164062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
798 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
799 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
800 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
801 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
802 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
803 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
804 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
805 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
806 "0000000000000000000000000000000000000001",
807 .fmt: chars_format::fixed, .correct_idx: 1032, .correct_ec: errc{}, .correct_value: 0x1.0000000000001p+33},
808
809 // above (1 + 2^-53) * 2^33: appended a 1 digit
810 {.input: "8589934592.000000953674316406251", .fmt: chars_format::fixed, .correct_idx: 32, .correct_ec: errc{}, .correct_value: 0x1.0000000000001p+33},
811
812 // above (1 + 2^-53) * 2^33: incremented last digit
813 {.input: "8589934592.00000095367431640626", .fmt: chars_format::fixed, .correct_idx: 31, .correct_ec: errc{}, .correct_value: 0x1.0000000000001p+33},
814
815 // just below (1 + 1 - 3 * 2^-53) * 2^33: decremented last digit, then appended three 9 digits
816 {.input: "17179869183.99999713897705078124999", .fmt: chars_format::fixed, .correct_idx: 35, .correct_ec: errc{}, .correct_value: 0x1.ffffffffffffep+33},
817
818 // (1 + 1 - 3 * 2^-53) * 2^33 exactly
819 {.input: "17179869183.99999713897705078125", .fmt: chars_format::fixed, .correct_idx: 32, .correct_ec: errc{}, .correct_value: 0x1.ffffffffffffep+33},
820
821 // (1 + 1 - 3 * 2^-53) * 2^33 exactly, followed by a thousand 0 digits
822 {.input: "17179869183."
823 "9999971389770507812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
824 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
825 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
826 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
827 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
828 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
829 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
830 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
831 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
832 "000000000000000000000000000000000000000",
833 .fmt: chars_format::fixed, .correct_idx: 1032, .correct_ec: errc{}, .correct_value: 0x1.ffffffffffffep+33},
834
835 // above (1 + 1 - 3 * 2^-53) * 2^33: appended a thousand 0 digits followed by a 1 digit
836 {.input: "17179869183."
837 "9999971389770507812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
838 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
839 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
840 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
841 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
842 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
843 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
844 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
845 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
846 "0000000000000000000000000000000000000001",
847 .fmt: chars_format::fixed, .correct_idx: 1033, .correct_ec: errc{}, .correct_value: 0x1.fffffffffffffp+33},
848
849 // above (1 + 1 - 3 * 2^-53) * 2^33: appended a 1 digit
850 {.input: "17179869183.999997138977050781251", .fmt: chars_format::fixed, .correct_idx: 33, .correct_ec: errc{}, .correct_value: 0x1.fffffffffffffp+33},
851
852 // above (1 + 1 - 3 * 2^-53) * 2^33: incremented last digit
853 {.input: "17179869183.99999713897705078126", .fmt: chars_format::fixed, .correct_idx: 32, .correct_ec: errc{}, .correct_value: 0x1.fffffffffffffp+33},
854
855 // just below (1 + 2^-53) * 2^77: decremented last digit, then appended three 9 digits
856 {.input: "151115727451828663615487.999", .fmt: chars_format::fixed, .correct_idx: 28, .correct_ec: errc{}, .correct_value: 0x1.0000000000000p+77},
857
858 // (1 + 2^-53) * 2^77 exactly
859 {.input: "151115727451828663615488", .fmt: chars_format::fixed, .correct_idx: 24, .correct_ec: errc{}, .correct_value: 0x1.0000000000000p+77},
860
861 // (1 + 2^-53) * 2^77 exactly, followed by a thousand 0 digits
862 {.input: "151115727451828663615488."
863 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
864 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
865 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
866 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
867 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
868 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
869 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
870 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
871 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
872 "0000000000000000000",
873 .fmt: chars_format::fixed, .correct_idx: 1025, .correct_ec: errc{}, .correct_value: 0x1.0000000000000p+77},
874
875 // above (1 + 2^-53) * 2^77: appended a thousand 0 digits followed by a 1 digit
876 {.input: "151115727451828663615488."
877 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
878 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
879 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
880 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
881 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
882 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
883 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
884 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
885 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
886 "00000000000000000001",
887 .fmt: chars_format::fixed, .correct_idx: 1026, .correct_ec: errc{}, .correct_value: 0x1.0000000000001p+77},
888
889 // above (1 + 2^-53) * 2^77: appended a 1 digit
890 {.input: "151115727451828663615488.1", .fmt: chars_format::fixed, .correct_idx: 26, .correct_ec: errc{}, .correct_value: 0x1.0000000000001p+77},
891
892 // above (1 + 2^-53) * 2^77: incremented last digit
893 {.input: "151115727451828663615489", .fmt: chars_format::fixed, .correct_idx: 24, .correct_ec: errc{}, .correct_value: 0x1.0000000000001p+77},
894
895 // just below (1 + 1 - 3 * 2^-53) * 2^77: decremented last digit, then appended three 9 digits
896 {.input: "302231454903657243344895.999", .fmt: chars_format::fixed, .correct_idx: 28, .correct_ec: errc{}, .correct_value: 0x1.ffffffffffffep+77},
897
898 // (1 + 1 - 3 * 2^-53) * 2^77 exactly
899 {.input: "302231454903657243344896", .fmt: chars_format::fixed, .correct_idx: 24, .correct_ec: errc{}, .correct_value: 0x1.ffffffffffffep+77},
900
901 // (1 + 1 - 3 * 2^-53) * 2^77 exactly, followed by a thousand 0 digits
902 {.input: "302231454903657243344896."
903 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
904 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
905 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
906 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
907 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
908 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
909 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
910 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
911 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
912 "0000000000000000000",
913 .fmt: chars_format::fixed, .correct_idx: 1025, .correct_ec: errc{}, .correct_value: 0x1.ffffffffffffep+77},
914
915 // above (1 + 1 - 3 * 2^-53) * 2^77: appended a thousand 0 digits followed by a 1 digit
916 {.input: "302231454903657243344896."
917 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
918 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
919 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
920 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
921 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
922 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
923 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
924 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
925 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
926 "00000000000000000001",
927 .fmt: chars_format::fixed, .correct_idx: 1026, .correct_ec: errc{}, .correct_value: 0x1.fffffffffffffp+77},
928
929 // above (1 + 1 - 3 * 2^-53) * 2^77: appended a 1 digit
930 {.input: "302231454903657243344896.1", .fmt: chars_format::fixed, .correct_idx: 26, .correct_ec: errc{}, .correct_value: 0x1.fffffffffffffp+77},
931
932 // above (1 + 1 - 3 * 2^-53) * 2^77: incremented last digit
933 {.input: "302231454903657243344897", .fmt: chars_format::fixed, .correct_idx: 24, .correct_ec: errc{}, .correct_value: 0x1.fffffffffffffp+77},
934
935 // just below (1 + 2^-53) * 2^1023: decremented last digit, then appended three 9 digits
936 {.input: "8988465674311580536566680721305029496276241413130815897397134275615404541548669375241369800602409693534988440"
937 "3114202125541629105369684531108613657287705365884742938136589844238179474556051429647415148697857438797685859"
938 "063890851407391008830874765563025951597582513936655578157348020066364210154316532161708031.999",
939 .fmt: chars_format::fixed, .correct_idx: 312, .correct_ec: errc{}, .correct_value: 0x1.0000000000000p+1023},
940
941 // (1 + 2^-53) * 2^1023 exactly
942 {.input: "8988465674311580536566680721305029496276241413130815897397134275615404541548669375241369800602409693534988440"
943 "3114202125541629105369684531108613657287705365884742938136589844238179474556051429647415148697857438797685859"
944 "063890851407391008830874765563025951597582513936655578157348020066364210154316532161708032",
945 .fmt: chars_format::fixed, .correct_idx: 308, .correct_ec: errc{}, .correct_value: 0x1.0000000000000p+1023},
946
947 // (1 + 2^-53) * 2^1023 exactly, followed by a thousand 0 digits
948 {.input: "8988465674311580536566680721305029496276241413130815897397134275615404541548669375241369800602409693534988440"
949 "3114202125541629105369684531108613657287705365884742938136589844238179474556051429647415148697857438797685859"
950 "063890851407391008830874765563025951597582513936655578157348020066364210154316532161708032."
951 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
952 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
953 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
954 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
955 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
956 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
957 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
958 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
959 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
960 "0000000000000000000",
961 .fmt: chars_format::fixed, .correct_idx: 1309, .correct_ec: errc{}, .correct_value: 0x1.0000000000000p+1023},
962
963 // above (1 + 2^-53) * 2^1023: appended a thousand 0 digits followed by a 1 digit
964 {.input: "8988465674311580536566680721305029496276241413130815897397134275615404541548669375241369800602409693534988440"
965 "3114202125541629105369684531108613657287705365884742938136589844238179474556051429647415148697857438797685859"
966 "063890851407391008830874765563025951597582513936655578157348020066364210154316532161708032."
967 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
968 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
969 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
970 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
971 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
972 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
973 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
974 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
975 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
976 "00000000000000000001",
977 .fmt: chars_format::fixed, .correct_idx: 1310, .correct_ec: errc{}, .correct_value: 0x1.0000000000001p+1023},
978
979 // above (1 + 2^-53) * 2^1023: appended a 1 digit
980 {.input: "8988465674311580536566680721305029496276241413130815897397134275615404541548669375241369800602409693534988440"
981 "3114202125541629105369684531108613657287705365884742938136589844238179474556051429647415148697857438797685859"
982 "063890851407391008830874765563025951597582513936655578157348020066364210154316532161708032.1",
983 .fmt: chars_format::fixed, .correct_idx: 310, .correct_ec: errc{}, .correct_value: 0x1.0000000000001p+1023},
984
985 // above (1 + 2^-53) * 2^1023: incremented last digit
986 {.input: "8988465674311580536566680721305029496276241413130815897397134275615404541548669375241369800602409693534988440"
987 "3114202125541629105369684531108613657287705365884742938136589844238179474556051429647415148697857438797685859"
988 "063890851407391008830874765563025951597582513936655578157348020066364210154316532161708033",
989 .fmt: chars_format::fixed, .correct_idx: 308, .correct_ec: errc{}, .correct_value: 0x1.0000000000001p+1023},
990
991 // just below (1 + 1 - 3 * 2^-53) * 2^1023: decremented last digit, then appended three 9 digits
992 {.input: "1797693134862315608353258760581052985162070023416521662616611746258695532672923265745300992879465492467506314"
993 "9033587701752208710592698796290627760473556921329019091915239418047621712533496094635638726128664019802903779"
994 "9514183602981511756283727771403830521483963923935633133642802139091669457927874464075218943.999",
995 .fmt: chars_format::fixed, .correct_idx: 313, .correct_ec: errc{}, .correct_value: 0x1.ffffffffffffep+1023},
996
997 // (1 + 1 - 3 * 2^-53) * 2^1023 exactly
998 {.input: "1797693134862315608353258760581052985162070023416521662616611746258695532672923265745300992879465492467506314"
999 "9033587701752208710592698796290627760473556921329019091915239418047621712533496094635638726128664019802903779"
1000 "9514183602981511756283727771403830521483963923935633133642802139091669457927874464075218944",
1001 .fmt: chars_format::fixed, .correct_idx: 309, .correct_ec: errc{}, .correct_value: 0x1.ffffffffffffep+1023},
1002
1003 // (1 + 1 - 3 * 2^-53) * 2^1023 exactly, followed by a thousand 0 digits
1004 {.input: "1797693134862315608353258760581052985162070023416521662616611746258695532672923265745300992879465492467506314"
1005 "9033587701752208710592698796290627760473556921329019091915239418047621712533496094635638726128664019802903779"
1006 "9514183602981511756283727771403830521483963923935633133642802139091669457927874464075218944."
1007 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1008 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1009 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1010 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1011 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1012 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1013 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1014 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1015 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1016 "0000000000000000000",
1017 .fmt: chars_format::fixed, .correct_idx: 1310, .correct_ec: errc{}, .correct_value: 0x1.ffffffffffffep+1023},
1018
1019 // above (1 + 1 - 3 * 2^-53) * 2^1023: appended a thousand 0 digits followed by a 1 digit
1020 {.input: "1797693134862315608353258760581052985162070023416521662616611746258695532672923265745300992879465492467506314"
1021 "9033587701752208710592698796290627760473556921329019091915239418047621712533496094635638726128664019802903779"
1022 "9514183602981511756283727771403830521483963923935633133642802139091669457927874464075218944."
1023 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1024 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1025 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1026 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1027 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1028 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1029 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1030 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1031 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1032 "00000000000000000001",
1033 .fmt: chars_format::fixed, .correct_idx: 1311, .correct_ec: errc{}, .correct_value: 0x1.fffffffffffffp+1023},
1034
1035 // above (1 + 1 - 3 * 2^-53) * 2^1023: appended a 1 digit
1036 {.input: "1797693134862315608353258760581052985162070023416521662616611746258695532672923265745300992879465492467506314"
1037 "9033587701752208710592698796290627760473556921329019091915239418047621712533496094635638726128664019802903779"
1038 "9514183602981511756283727771403830521483963923935633133642802139091669457927874464075218944.1",
1039 .fmt: chars_format::fixed, .correct_idx: 311, .correct_ec: errc{}, .correct_value: 0x1.fffffffffffffp+1023},
1040
1041 // above (1 + 1 - 3 * 2^-53) * 2^1023: incremented last digit
1042 {.input: "1797693134862315608353258760581052985162070023416521662616611746258695532672923265745300992879465492467506314"
1043 "9033587701752208710592698796290627760473556921329019091915239418047621712533496094635638726128664019802903779"
1044 "9514183602981511756283727771403830521483963923935633133642802139091669457927874464075218945",
1045 .fmt: chars_format::fixed, .correct_idx: 309, .correct_ec: errc{}, .correct_value: 0x1.fffffffffffffp+1023},
1046
1047 // VSO-852024 also affected hexfloats.
1048 {.input: "0.00000000000008p-1022", .fmt: chars_format::hex, .correct_idx: 22, .correct_ec: errc::result_out_of_range, .correct_value: 0x0.0000000000000p+0},
1049 {.input: "0."
1050 "0000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1051 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1052 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1053 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1054 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1055 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1056 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1057 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1058 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1059 "0000000000000000000000000000000001p-1022",
1060 .fmt: chars_format::hex, .correct_idx: 1023, .correct_ec: errc{}, .correct_value: 0x0.0000000000001p-1022},
1061
1062 {.input: "0.ffffffffffffe8p-1022", .fmt: chars_format::hex, .correct_idx: 22, .correct_ec: errc{}, .correct_value: 0x0.ffffffffffffep-1022},
1063 {.input: "0."
1064 "ffffffffffffe800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1065 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1066 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1067 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1068 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1069 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1070 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1071 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1072 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1073 "0000000000000000000000000000000001p-1022",
1074 .fmt: chars_format::hex, .correct_idx: 1023, .correct_ec: errc{}, .correct_value: 0x0.fffffffffffffp-1022},
1075
1076 {.input: "1.00000000000008p+0", .fmt: chars_format::hex, .correct_idx: 19, .correct_ec: errc{}, .correct_value: 0x1.0000000000000p+0},
1077 {.input: "1."
1078 "0000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1079 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1080 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1081 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1082 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1083 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1084 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1085 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1086 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1087 "0000000000000000000000000000000001p+0",
1088 .fmt: chars_format::hex, .correct_idx: 1020, .correct_ec: errc{}, .correct_value: 0x1.0000000000001p+0},
1089
1090 {.input: "1.ffffffffffffe8p+0", .fmt: chars_format::hex, .correct_idx: 19, .correct_ec: errc{}, .correct_value: 0x1.ffffffffffffep+0},
1091 {.input: "1."
1092 "ffffffffffffe800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1093 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1094 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1095 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1096 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1097 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1098 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1099 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1100 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1101 "0000000000000000000000000000000001p+0",
1102 .fmt: chars_format::hex, .correct_idx: 1020, .correct_ec: errc{}, .correct_value: 0x1.fffffffffffffp+0},
1103
1104 {.input: "1.00000000000008p+1023", .fmt: chars_format::hex, .correct_idx: 22, .correct_ec: errc{}, .correct_value: 0x1.0000000000000p+1023},
1105 {.input: "1."
1106 "0000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1107 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1108 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1109 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1110 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1111 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1112 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1113 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1114 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1115 "0000000000000000000000000000000001p+1023",
1116 .fmt: chars_format::hex, .correct_idx: 1023, .correct_ec: errc{}, .correct_value: 0x1.0000000000001p+1023},
1117
1118 {.input: "1.ffffffffffffe8p+1023", .fmt: chars_format::hex, .correct_idx: 22, .correct_ec: errc{}, .correct_value: 0x1.ffffffffffffep+1023},
1119 {.input: "1."
1120 "ffffffffffffe800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1121 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1122 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1123 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1124 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1125 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1126 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1127 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1128 "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1129 "0000000000000000000000000000000001p+1023",
1130 .fmt: chars_format::hex, .correct_idx: 1023, .correct_ec: errc{}, .correct_value: 0x1.fffffffffffffp+1023},
1131
1132 // VSO-733765 "<charconv>: [Feedback] double std::from_chars behavior on exponent out of range"
1133 // LWG-3081 "Floating point from_chars API does not distinguish between overflow and underflow"
1134 // These test cases exercise every overflow/underflow codepath.
1135 {.input: "1e+1000", .fmt: chars_format::scientific, .correct_idx: 7, .correct_ec: errc::result_out_of_range, .correct_value: double_inf},
1136 {.input: "1e-1000", .fmt: chars_format::scientific, .correct_idx: 7, .correct_ec: errc::result_out_of_range, .correct_value: 0.0},
1137 {.input: "1.fffffffffffff8p+1023", .fmt: chars_format::hex, .correct_idx: 22, .correct_ec: errc::result_out_of_range, .correct_value: double_inf},
1138 {.input: "1e+2000", .fmt: chars_format::scientific, .correct_idx: 7, .correct_ec: errc::result_out_of_range, .correct_value: double_inf},
1139 {.input: "1e-2000", .fmt: chars_format::scientific, .correct_idx: 7, .correct_ec: errc::result_out_of_range, .correct_value: 0.0},
1140 {.input: "1e+9999", .fmt: chars_format::scientific, .correct_idx: 7, .correct_ec: errc::result_out_of_range, .correct_value: double_inf},
1141 {.input: "1e-9999", .fmt: chars_format::scientific, .correct_idx: 7, .correct_ec: errc::result_out_of_range, .correct_value: 0.0},
1142 {.input: "10e+5199", .fmt: chars_format::scientific, .correct_idx: 8, .correct_ec: errc::result_out_of_range, .correct_value: double_inf},
1143 {.input: "0.001e-5199", .fmt: chars_format::scientific, .correct_idx: 11, .correct_ec: errc::result_out_of_range, .correct_value: 0.0},
1144};
1145
1146#endif // DOUBLE_FROM_CHARS_TEST_CASES_HPP
1147

source code of libcxx/test/std/utilities/charconv/charconv.msvc/double_from_chars_test_cases.hpp