1// Copyright 2024 Matt Borland
2// Copyright 2024 Junekey Jeon
3// Distributed under the Boost Software License, Version 1.0.
4// https://www.boost.org/LICENSE_1_0.txt
5//
6// See: https://github.com/cppalliance/charconv/issues/158
7
8#include <boost/charconv.hpp>
9#include <boost/core/lightweight_test.hpp>
10
11void test_values_with_negative_exp()
12{
13 char buffer[256];
14
15 double d = 1e-13;
16 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
17 auto res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
18 fmt: boost::charconv::chars_format::scientific, precision: 50);
19 *res.ptr = '\0';
20
21 BOOST_TEST(res);
22 BOOST_TEST_CSTR_EQ(buffer, "1.00000000000000003037374556340037091360347168422784e-13");
23
24 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
25 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
26 fmt: boost::charconv::chars_format::fixed, precision: 50);
27 *res.ptr = '\0';
28 BOOST_TEST(res);
29 BOOST_TEST_CSTR_EQ(buffer, "0.00000000000010000000000000000303737455634003709136");
30
31 d = 1e-15;
32 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
33 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
34 fmt: boost::charconv::chars_format::scientific, precision: 50);
35 *res.ptr = '\0';
36
37 BOOST_TEST(res);
38 BOOST_TEST_CSTR_EQ(buffer, "1.00000000000000007770539987666107923830718560119502e-15");
39
40 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
41 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
42 fmt: boost::charconv::chars_format::fixed, precision: 50);
43 *res.ptr = '\0';
44 BOOST_TEST(res);
45 BOOST_TEST_CSTR_EQ(buffer, "0.00000000000000100000000000000007770539987666107924");
46
47 d = 1e-17;
48
49 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
50 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
51 fmt: boost::charconv::chars_format::scientific, precision: 50);
52 *res.ptr = '\0';
53 BOOST_TEST(res);
54 BOOST_TEST_CSTR_EQ(buffer, "1.00000000000000007154242405462192450852805618492325e-17");
55
56 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
57 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
58 fmt: boost::charconv::chars_format::fixed, precision: 50);
59 *res.ptr = '\0';
60 BOOST_TEST(res);
61 BOOST_TEST_CSTR_EQ(buffer, "0.00000000000000001000000000000000071542424054621925");
62
63 d = 1e-19;
64
65 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
66 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer), value: d,
67 fmt: boost::charconv::chars_format::scientific, precision: 50);
68 *res.ptr = '\0';
69 BOOST_TEST(res);
70 BOOST_TEST_CSTR_EQ(buffer, "9.99999999999999975245926835260131855729159055676882e-20");
71
72 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
73 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer), value: d,
74 fmt: boost::charconv::chars_format::fixed, precision: 50);
75 *res.ptr = '\0';
76 BOOST_TEST(res);
77 BOOST_TEST_CSTR_EQ(buffer, "0.00000000000000000009999999999999999752459268352601");
78
79 d = 1e-21;
80
81 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
82 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer), value: d,
83 fmt: boost::charconv::chars_format::scientific, precision: 50);
84 *res.ptr = '\0';
85 BOOST_TEST(res);
86 BOOST_TEST_CSTR_EQ(buffer, "9.99999999999999907537452227896371396729934511675531e-22");
87
88 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
89 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer), value: d,
90 fmt: boost::charconv::chars_format::fixed, precision: 50);
91 *res.ptr = '\0';
92 BOOST_TEST(res);
93 BOOST_TEST_CSTR_EQ(buffer, "0.00000000000000000000099999999999999990753745222790");
94}
95
96void test_long_double_with_negative_exp()
97{
98 char buffer[256];
99 long double d = 1e-15L;
100 auto res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer), value: d,
101 fmt: boost::charconv::chars_format::scientific, precision: 50);
102 *res.ptr = '\0';
103
104 BOOST_TEST(res);
105 BOOST_TEST_CSTR_EQ(buffer, "9.99999999999999999994126620636112567498475617893198e-16");
106
107 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer), value: d,
108 fmt: boost::charconv::chars_format::fixed, precision: 50);
109 *res.ptr = '\0';
110 BOOST_TEST(res);
111 // BOOST_TEST_CSTR_EQ(buffer, "0.00000000000000099999999999999999999412662063611257");
112 BOOST_TEST_CSTR_EQ(buffer, "0.00000000000000100000000000000000000000000000000000");
113
114 d = 1e-17L;
115
116 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer), value: d,
117 fmt: boost::charconv::chars_format::scientific, precision: 50);
118 *res.ptr = '\0';
119 BOOST_TEST(res);
120 BOOST_TEST_CSTR_EQ(buffer, "9.99999999999999999997135886174217623518875583428487e-18");
121
122 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer), value: d,
123 fmt: boost::charconv::chars_format::fixed, precision: 50);
124 *res.ptr = '\0';
125 BOOST_TEST(res);
126 // BOOST_TEST_CSTR_EQ(buffer, "0.00000000000000000999999999999999999997135886174218");
127 BOOST_TEST_CSTR_EQ(buffer, "0.00000000000000001000000000000000000000000000000000");
128}
129
130void test_values_with_positive_exp()
131{
132 char buffer[256];
133 double d = 1e15;
134 auto res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
135 fmt: boost::charconv::chars_format::scientific, precision: 50);
136 *res.ptr = '\0';
137
138 BOOST_TEST(res);
139 BOOST_TEST_CSTR_EQ(buffer, "1.00000000000000000000000000000000000000000000000000e+15");
140
141 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
142 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
143 fmt: boost::charconv::chars_format::fixed, precision: 50);
144 *res.ptr = '\0';
145 BOOST_TEST(res);
146 BOOST_TEST_CSTR_EQ(buffer, "1000000000000000.00000000000000000000000000000000000000000000000000");
147
148 d = 1e17;
149
150 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
151 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
152 fmt: boost::charconv::chars_format::scientific, precision: 50);
153 *res.ptr = '\0';
154 BOOST_TEST(res);
155 BOOST_TEST_CSTR_EQ(buffer, "1.00000000000000000000000000000000000000000000000000e+17");
156
157 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
158 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
159 fmt: boost::charconv::chars_format::fixed, precision: 50);
160 *res.ptr = '\0';
161 BOOST_TEST(res);
162 BOOST_TEST_CSTR_EQ(buffer, "100000000000000000.00000000000000000000000000000000000000000000000000");
163}
164
165void test_round_9()
166{
167 char buffer[256];
168 double d = 999999999.999999;
169 auto res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
170 fmt: boost::charconv::chars_format::scientific, precision: 10);
171 *res.ptr = '\0';
172
173 BOOST_TEST(res);
174 BOOST_TEST_CSTR_EQ(buffer, "1.0000000000e+09");
175
176 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
177 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
178 fmt: boost::charconv::chars_format::fixed, precision: 3);
179 *res.ptr = '\0';
180 BOOST_TEST(res);
181 BOOST_TEST_CSTR_EQ(buffer, "1000000000.000");
182
183 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
184 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
185 fmt: boost::charconv::chars_format::general, precision: 9);
186 *res.ptr = '\0';
187 BOOST_TEST(res);
188 BOOST_TEST_CSTR_EQ(buffer, "1e+09");
189
190 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
191 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
192 fmt: boost::charconv::chars_format::general, precision: 10);
193 *res.ptr = '\0';
194 BOOST_TEST(res);
195 BOOST_TEST_CSTR_EQ(buffer, "1000000000");
196
197 d = 999999.999999;
198
199 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
200 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
201 fmt: boost::charconv::chars_format::scientific, precision: 10);
202 *res.ptr = '\0';
203
204 BOOST_TEST(res);
205 BOOST_TEST_CSTR_EQ(buffer, "1.0000000000e+06");
206
207 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
208 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
209 fmt: boost::charconv::chars_format::fixed, precision: 3);
210 *res.ptr = '\0';
211 BOOST_TEST(res);
212 BOOST_TEST_CSTR_EQ(buffer, "1000000.000");
213
214 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
215 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
216 fmt: boost::charconv::chars_format::general, precision: 6);
217 *res.ptr = '\0';
218 BOOST_TEST(res);
219 BOOST_TEST_CSTR_EQ(buffer, "1e+06");
220
221 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
222 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
223 fmt: boost::charconv::chars_format::general, precision: 7);
224 *res.ptr = '\0';
225 BOOST_TEST(res);
226 BOOST_TEST_CSTR_EQ(buffer, "1000000");
227
228 d = 9.999999;
229
230 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
231 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
232 fmt: boost::charconv::chars_format::scientific, precision: 5);
233 *res.ptr = '\0';
234
235 BOOST_TEST(res);
236 BOOST_TEST_CSTR_EQ(buffer, "1.00000e+01");
237
238 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
239 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
240 fmt: boost::charconv::chars_format::fixed, precision: 3);
241 *res.ptr = '\0';
242 BOOST_TEST(res);
243 BOOST_TEST_CSTR_EQ(buffer, "10.000");
244
245 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
246 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
247 fmt: boost::charconv::chars_format::general, precision: 6);
248 *res.ptr = '\0';
249 BOOST_TEST(res);
250 BOOST_TEST_CSTR_EQ(buffer, "10");
251
252 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
253 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
254 fmt: boost::charconv::chars_format::general, precision: 7);
255 *res.ptr = '\0';
256 BOOST_TEST(res);
257 BOOST_TEST_CSTR_EQ(buffer, "9.999999");
258
259 d = 0.9999999;
260
261 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
262 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
263 fmt: boost::charconv::chars_format::scientific, precision: 5);
264 *res.ptr = '\0';
265
266 BOOST_TEST(res);
267 BOOST_TEST_CSTR_EQ(buffer, "1.00000e+00");
268
269 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
270 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
271 fmt: boost::charconv::chars_format::fixed, precision: 3);
272 *res.ptr = '\0';
273 BOOST_TEST(res);
274 BOOST_TEST_CSTR_EQ(buffer, "1.000");
275
276 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
277 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
278 fmt: boost::charconv::chars_format::general, precision: 6);
279 *res.ptr = '\0';
280 BOOST_TEST(res);
281 BOOST_TEST_CSTR_EQ(buffer, "1");
282
283 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
284 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
285 fmt: boost::charconv::chars_format::general, precision: 7);
286 *res.ptr = '\0';
287 BOOST_TEST(res);
288 BOOST_TEST_CSTR_EQ(buffer, "0.9999999");
289
290 d = 0.0009999999;
291
292 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
293 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
294 fmt: boost::charconv::chars_format::scientific, precision: 5);
295 *res.ptr = '\0';
296
297 BOOST_TEST(res);
298 BOOST_TEST_CSTR_EQ(buffer, "1.00000e-03");
299
300 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
301 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
302 fmt: boost::charconv::chars_format::fixed, precision: 3);
303 *res.ptr = '\0';
304 BOOST_TEST(res);
305 BOOST_TEST_CSTR_EQ(buffer, "0.001");
306
307 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
308 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
309 fmt: boost::charconv::chars_format::general, precision: 6);
310 *res.ptr = '\0';
311 BOOST_TEST(res);
312 BOOST_TEST_CSTR_EQ(buffer, "0.001");
313
314 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
315 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
316 fmt: boost::charconv::chars_format::general, precision: 7);
317 *res.ptr = '\0';
318 BOOST_TEST(res);
319 BOOST_TEST_CSTR_EQ(buffer, "0.0009999999");
320
321 d = 0.00009999999;
322
323 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
324 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
325 fmt: boost::charconv::chars_format::scientific, precision: 5);
326 *res.ptr = '\0';
327
328 BOOST_TEST(res);
329 BOOST_TEST_CSTR_EQ(buffer, "1.00000e-04");
330
331 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
332 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
333 fmt: boost::charconv::chars_format::fixed, precision: 3);
334 *res.ptr = '\0';
335 BOOST_TEST(res);
336 BOOST_TEST_CSTR_EQ(buffer, "0.000");
337
338 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
339 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
340 fmt: boost::charconv::chars_format::general, precision: 6);
341 *res.ptr = '\0';
342 BOOST_TEST(res);
343 BOOST_TEST_CSTR_EQ(buffer, "0.0001");
344
345 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
346 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
347 fmt: boost::charconv::chars_format::general, precision: 7);
348 *res.ptr = '\0';
349 BOOST_TEST(res);
350 BOOST_TEST_CSTR_EQ(buffer, "9.999999e-05");
351
352 d = 0.00000009999999;
353
354 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
355 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
356 fmt: boost::charconv::chars_format::scientific, precision: 5);
357 *res.ptr = '\0';
358
359 BOOST_TEST(res);
360 BOOST_TEST_CSTR_EQ(buffer, "1.00000e-07");
361
362 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
363 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
364 fmt: boost::charconv::chars_format::fixed, precision: 3);
365 *res.ptr = '\0';
366 BOOST_TEST(res);
367 BOOST_TEST_CSTR_EQ(buffer, "0.000");
368
369 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
370 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
371 fmt: boost::charconv::chars_format::general, precision: 6);
372 *res.ptr = '\0';
373 BOOST_TEST(res);
374 BOOST_TEST_CSTR_EQ(buffer, "1e-07");
375
376 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
377 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
378 fmt: boost::charconv::chars_format::general, precision: 7);
379 *res.ptr = '\0';
380 BOOST_TEST(res);
381 BOOST_TEST_CSTR_EQ(buffer, "9.999999e-08");
382}
383
384void test_zero()
385{
386 char buffer[256];
387 double d = 0;
388 auto res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
389 fmt: boost::charconv::chars_format::scientific, precision: 50);
390 *res.ptr = '\0';
391
392 BOOST_TEST(res);
393 BOOST_TEST_CSTR_EQ(buffer, "0.00000000000000000000000000000000000000000000000000e+00");
394
395 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
396 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
397 fmt: boost::charconv::chars_format::fixed, precision: 50);
398 *res.ptr = '\0';
399 BOOST_TEST(res);
400 BOOST_TEST_CSTR_EQ(buffer, "0.00000000000000000000000000000000000000000000000000");
401
402 std::memset(s: buffer, c: '\0', n: sizeof(buffer));
403 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer) - 1, value: d,
404 fmt: boost::charconv::chars_format::general, precision: 50);
405 *res.ptr = '\0';
406 BOOST_TEST(res);
407 BOOST_TEST_CSTR_EQ(buffer, "0");
408}
409
410void test_long_double_with_positive_exp()
411{
412 char buffer[256];
413 long double d = 1e15L;
414 auto res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer), value: d,
415 fmt: boost::charconv::chars_format::scientific, precision: 50);
416 *res.ptr = '\0';
417
418 BOOST_TEST(res);
419 BOOST_TEST_CSTR_EQ(buffer, "1.00000000000000000000000000000000000000000000000000e+15");
420
421 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer), value: d,
422 fmt: boost::charconv::chars_format::fixed, precision: 50);
423 *res.ptr = '\0';
424 BOOST_TEST(res);
425 BOOST_TEST_CSTR_EQ(buffer, "1000000000000000.00000000000000000000000000000000000000000000000000");
426
427 d = 1e17L;
428
429 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer), value: d,
430 fmt: boost::charconv::chars_format::scientific, precision: 50);
431 *res.ptr = '\0';
432 BOOST_TEST(res);
433 BOOST_TEST_CSTR_EQ(buffer, "1.00000000000000000000000000000000000000000000000000e+17");
434
435 res = boost::charconv::to_chars(first: buffer, last: buffer + sizeof(buffer), value: d,
436 fmt: boost::charconv::chars_format::fixed, precision: 50);
437 *res.ptr = '\0';
438 BOOST_TEST(res);
439 BOOST_TEST_CSTR_EQ(buffer, "100000000000000000.00000000000000000000000000000000000000000000000000");
440}
441
442template <typename T>
443void test_spot_value(T value, int precision, const char* result, boost::charconv::chars_format fmt = boost::charconv::chars_format::fixed)
444{
445 char buffer[256];
446 auto r = boost::charconv::to_chars(buffer, buffer + sizeof(buffer) - 1, value, fmt, precision);
447 *r.ptr = '\0';
448
449 BOOST_TEST(r);
450 BOOST_TEST_CSTR_EQ(buffer, result);
451}
452
453int main()
454{
455 test_values_with_negative_exp();
456 test_values_with_positive_exp();
457 test_zero();
458 test_round_9();
459
460 #if BOOST_CHARCONV_LDBL_BITS == 80
461 test_long_double_with_negative_exp();
462 test_long_double_with_positive_exp();
463 #endif
464
465 // Found during random testing in to_chars_float_STL_comp
466 //test_spot_value(27057.375F, 49, "27057.3750000000000000000000000000000000000000000000000");
467 //test_spot_value(-38347.10547F, 49, "-38347.1054687500000000000000000000000000000000000000000");
468 //test_spot_value(12043.7270408630284, 49, "12043.727040863028378225862979888916015625", boost::charconv::chars_format::general);
469
470 #if BOOST_CHARCONV_LDBL_BITS == 80
471 test_spot_value(value: -37512.44400929347152385L, precision: 17, result: "-3.75124440092934715e+04", fmt: boost::charconv::chars_format::scientific);
472 test_spot_value(value: 69260.5792027112860012L, precision: 17, result: "6.92605792027112860e+04", fmt: boost::charconv::chars_format::scientific);
473 test_spot_value(value: 7.420390267538564899041L, precision: 13, result: "7.4203902675386e+00", fmt: boost::charconv::chars_format::scientific);
474 test_spot_value(value: -72911.41743909836600324L, precision: 15, result: "-7.291141743909837e+04", fmt: boost::charconv::chars_format::scientific);
475 #endif
476
477 return boost::report_errors();
478}
479

source code of boost/libs/charconv/test/github_issue_158.cpp