File: from_chars_float.cpp

package info (click to toggle)
boost1.90 1.90.0-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 593,120 kB
  • sloc: cpp: 4,190,908; xml: 196,648; python: 34,618; ansic: 23,145; asm: 5,468; sh: 3,774; makefile: 1,161; perl: 1,020; sql: 728; ruby: 676; yacc: 478; java: 77; lisp: 24; csh: 6
file content (1932 lines) | stat: -rw-r--r-- 146,559 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
// Copyright 2023 Matt Borland
// Distributed under the Boost Software License, Version 1.0.
// https://www.boost.org/LICENSE_1_0.txt

#include "../src/from_chars_float_impl.hpp"
#include <boost/charconv.hpp>
#include <boost/core/lightweight_test.hpp>
#include <system_error>
#include <iostream>
#include <iomanip>
#include <string>
#include <limits>
#include <cstdlib>
#include <cstring>
#include <cerrno>
#include <cmath>

template <typename T>
void spot_value(const std::string& buffer, T expected_value, boost::charconv::chars_format fmt = boost::charconv::chars_format::general)
{
    T v;
    auto r = boost::charconv::from_chars(buffer.c_str(), buffer.c_str() + buffer.size(), v, fmt);
    BOOST_TEST(r.ec == std::errc());
    if (!(BOOST_TEST_EQ(v, expected_value) && BOOST_TEST_EQ(buffer.c_str() + buffer.size(), r.ptr)))
    {
        #if defined(__GNUC__) && __GNUC__ >= 5
        std::cerr << std::hexfloat
                  << "Test failure for: " << expected_value
                  << "\n             Got: " << v << std::endl;
        #else
        std::cerr << "Test failure for: " << buffer << " got: " << v << std::endl;
        #endif
    }
}

template <typename T>
void overflow_spot_value(const std::string& buffer, T expected_value, boost::charconv::chars_format fmt = boost::charconv::chars_format::general)
{
    auto v = static_cast<T>(42.L);
    auto r = boost::charconv::from_chars_erange(buffer.c_str(), buffer.c_str() + std::strlen(buffer.c_str()), v, fmt);

    if (!(BOOST_TEST_EQ(v, expected_value) && BOOST_TEST(r.ec == std::errc::result_out_of_range)))
    {
        std::cerr << "Test failure for: " << buffer << " got: " << v << std::endl;
    }
}

template <typename T>
inline void spot_check(T expected_value, const std::string& buffer, boost::charconv::chars_format fmt)
{
    spot_value(buffer, expected_value, fmt);
}

template <typename T>
void spot_check_nan(const std::string& buffer, boost::charconv::chars_format fmt = boost::charconv::chars_format::general)
{
    T v {};
    auto r = boost::charconv::from_chars(buffer.c_str(), buffer.c_str() + buffer.size(), v, fmt);
    if (!(BOOST_TEST(std::isnan(v)) && BOOST_TEST(r)))
    {
        std::cerr << "Test failure for: " << buffer << " got: " << v << std::endl; // LCOV_EXCL_LINE
    }
}

template <typename T>
void spot_check_inf(const std::string& buffer, boost::charconv::chars_format fmt = boost::charconv::chars_format::general)
{
    T v {};
    auto r = boost::charconv::from_chars(buffer.c_str(), buffer.c_str() + buffer.size(), v, fmt);
    if (!(BOOST_TEST(std::isinf(v)) && BOOST_TEST(r)))
    {
        std::cerr << "Test failure for: " << buffer << " got: " << v << std::endl; // LCOV_EXCL_LINE
    }
}

template <typename T>
void spot_check_invalid_argument(const std::string& buffer, boost::charconv::chars_format fmt)
{
    T v = static_cast<T>(5.0L);
    auto r = boost::charconv::from_chars(buffer.c_str(), buffer.c_str() + buffer.size(), v, fmt);
    BOOST_TEST(r.ec == std::errc::invalid_argument);
}

void fc (const std::string& s)
{
    char* str_end;
    const double expected_value = std::strtod(s.c_str(), &str_end);
    spot_value(s, expected_value);
}

template <typename T>
void simple_integer_test()
{
    const char* buffer1 = "12";
    T v1;
    auto r1 = boost::charconv::from_chars(buffer1, buffer1 + std::strlen(buffer1), v1);
    BOOST_TEST(r1.ec == std::errc());
    BOOST_TEST_EQ(v1, static_cast<T>(12));

    const char* buffer2 = "1200";
    T v2;
    auto r2 = boost::charconv::from_chars(buffer2, buffer2 + std::strlen(buffer2), v2);
    BOOST_TEST(r2.ec == std::errc());
    BOOST_TEST_EQ(v2, static_cast<T>(1200));
}

template <typename T>
void simple_hex_integer_test()
{
    const char* buffer1 = "-2a";
    T v1;
    auto r1 = boost::charconv::from_chars(buffer1, buffer1 + std::strlen(buffer1), v1, boost::charconv::chars_format::hex);
    BOOST_TEST(r1.ec == std::errc());
    BOOST_TEST_EQ(v1, static_cast<T>(-42));
}

template <typename T>
void simple_scientific_test()
{
    const char* buffer1 = "1e1";
    T v1;
    auto r1 = boost::charconv::from_chars(buffer1, buffer1 + std::strlen(buffer1), v1);
    BOOST_TEST(r1.ec == std::errc());
    BOOST_TEST_EQ(v1, static_cast<T>(1e1L));

    const char* buffer2 = "123456789e10";
    T v2;
    auto r2 = boost::charconv::from_chars(buffer2, buffer2 + std::strlen(buffer2), v2);
    BOOST_TEST(r2.ec == std::errc());
    BOOST_TEST_EQ(v2, static_cast<T>(123456789e10L));

    const char* buffer3 = "1.23456789e+10";
    T v3;
    auto r3 = boost::charconv::from_chars(buffer3, buffer3 + std::strlen(buffer3), v3);
    BOOST_TEST(r3.ec == std::errc());
    BOOST_TEST_EQ(v3, static_cast<T>(1.23456789e+10L));

    const char* buffer4 = "1234.56789e+10";
    T v4;
    auto r4 = boost::charconv::from_chars(buffer4, buffer4 + std::strlen(buffer4), v4);
    BOOST_TEST(r4.ec == std::errc());
    BOOST_TEST_EQ(v4, static_cast<T>(1234.56789e+10L));

    const char* buffer5 = "+1234.56789e+10";
    auto v5 = static_cast<T>(3.0L);
    auto r5 = boost::charconv::from_chars(buffer5, buffer5 + std::strlen(buffer5), v5);
    BOOST_TEST(r5.ec == std::errc::invalid_argument);
    BOOST_TEST_EQ(v5, static_cast<T>(3.0L));
}

template <typename T>
void simple_hex_scientific_test()
{
    const char* buffer1 = "1.3a2bp-10";
    T v1;
    auto r1 = boost::charconv::from_chars(buffer1, buffer1 + std::strlen(buffer1), v1, boost::charconv::chars_format::hex);
    BOOST_TEST(r1.ec == std::errc());
    BOOST_TEST_EQ(v1, static_cast<T>(80427e-14L));

    const char* buffer2 = "1.234p-10";
    T v2;
    auto r2 = boost::charconv::from_chars(buffer2, buffer2 + std::strlen(buffer2), v2, boost::charconv::chars_format::hex);
    BOOST_TEST(r2.ec == std::errc());
    BOOST_TEST_EQ(v2, static_cast<T>(4660e-13L));
}

template <typename T>
void dot_position_test()
{
    const char* buffer1 = "11.11111111";
    T v1;
    auto r1 = boost::charconv::from_chars(buffer1, buffer1 + std::strlen(buffer1), v1);
    BOOST_TEST(r1.ec == std::errc());
    BOOST_TEST_EQ(v1, static_cast<T>(11.11111111L));

    const char* buffer2 = "1111.111111";
    T v2;
    auto r2 = boost::charconv::from_chars(buffer2, buffer2 + std::strlen(buffer2), v2);
    BOOST_TEST(r2.ec == std::errc());
    BOOST_TEST_EQ(v2, static_cast<T>(1111.111111L));

    const char* buffer3 = "111111.1111";
    T v3;
    auto r3 = boost::charconv::from_chars(buffer3, buffer3 + std::strlen(buffer3), v3);
    BOOST_TEST(r3.ec == std::errc());
    BOOST_TEST_EQ(v3, static_cast<T>(111111.1111L));

    const char* buffer4 = "1111111111.";
    T v4;
    auto r4 = boost::charconv::from_chars(buffer4, buffer4 + std::strlen(buffer4), v4);
    BOOST_TEST(r4.ec == std::errc());
    BOOST_TEST_EQ(v4, static_cast<T>(1111111111.L));
}

template <typename T>
void odd_strings_test()
{
    const char* buffer1 = "00000000000000000000000000000000000000000005";
    T v1;
    auto r1 = boost::charconv::from_chars(buffer1, buffer1 + std::strlen(buffer1), v1);
    BOOST_TEST(r1.ec == std::errc());
    BOOST_TEST_EQ(v1, static_cast<T>(5));

    const char* buffer2 = "123456789123456789123456789";
    T v2;
    auto r2 = boost::charconv::from_chars(buffer2, buffer2 + std::strlen(buffer2), v2);
    BOOST_TEST(r2.ec == std::errc());
    BOOST_TEST_EQ(v2, static_cast<T>(1.23456789123456789123456789e26L));

    const char* buffer3 = "100000000000000000000000e5";
    T v3;
    auto r3 = boost::charconv::from_chars(buffer3, buffer3 + std::strlen(buffer3), v3);
    BOOST_TEST(r3.ec == std::errc());
    BOOST_TEST_EQ(v3, static_cast<T>(100000000000000000000000e5L));

    const char* buffer4 = "1.23456789123456789123456789123456789123456789e-5";
    T v4;
    auto r4 = boost::charconv::from_chars(buffer4, buffer4 + std::strlen(buffer4), v4);
    BOOST_TEST(r4.ec == std::errc());
    BOOST_TEST_EQ(v4, static_cast<T>(1.23456789123456789123456789123456789123456789e-5L));

    const char* buffer5 = "1.23456789123456789123456789123456789123456789e-00000000000000000005";
    T v5;
    auto r5 = boost::charconv::from_chars(buffer5, buffer5 + std::strlen(buffer5), v5);
    BOOST_TEST(r5.ec == std::errc());
    BOOST_TEST_EQ(v5, static_cast<T>(1.23456789123456789123456789123456789123456789e-5L));

    const char* buffer6 = "E01";
    T v6;
    auto r6 = boost::charconv::from_chars(buffer6, buffer6 + std::strlen(buffer6), v6);
    BOOST_TEST(r6.ec == std::errc::invalid_argument);
}

template <typename T>
void zero_test()
{
    const char* buffer1 = "0e0";
    T v1;
    auto r1 = boost::charconv::from_chars(buffer1, buffer1 + std::strlen(buffer1), v1);
    BOOST_TEST(r1.ec == std::errc());
    BOOST_TEST_EQ(v1, static_cast<T>(0));
    BOOST_TEST(!std::signbit(v1));

    const char* buffer2 = "-0e0";
    T v2;
    auto r2 = boost::charconv::from_chars(buffer2, buffer2 + std::strlen(buffer2), v2);
    BOOST_TEST(r2.ec == std::errc());
    BOOST_TEST_EQ(v2, static_cast<T>(-0));
    BOOST_TEST(std::signbit(v2));

    const char* buffer3 = "0.0";
    T v3;
    auto r3 = boost::charconv::from_chars(buffer3, buffer3 + std::strlen(buffer3), v3);
    BOOST_TEST(r3.ec == std::errc());
    BOOST_TEST_EQ(v3, static_cast<T>(0.0));
    BOOST_TEST(!std::signbit(v3));

    const char* buffer4 = "-0.0";
    T v4;
    auto r4 = boost::charconv::from_chars(buffer4, buffer4 + std::strlen(buffer4), v4);
    BOOST_TEST(r4.ec == std::errc());
    BOOST_TEST_EQ(v4, static_cast<T>(-0));
    BOOST_TEST(std::signbit(v4));

    const char* buffer5 = "0";
    T v5;
    auto r5 = boost::charconv::from_chars(buffer5, buffer5 + std::strlen(buffer5), v5);
    BOOST_TEST(r5.ec == std::errc());
    BOOST_TEST_EQ(v5, static_cast<T>(0));
    BOOST_TEST(!std::signbit(v5));

    const char* buffer6 = "-0";
    T v6;
    auto r6 = boost::charconv::from_chars(buffer6, buffer6 + std::strlen(buffer6), v6);
    BOOST_TEST(r6.ec == std::errc());
    BOOST_TEST_EQ(v6, static_cast<T>(-0));
    BOOST_TEST(std::signbit(v6));
}

// See: https://github.com/boostorg/json/blob/develop/test/double.cpp#L243
template <typename T>
void boost_json_test()
{
    spot_value("-1.010", -1.01);
    spot_value("-0.010", -0.01);
    spot_value("-0.0", -0.0);
    spot_value("-0e0", -0.0);
    spot_value( "18.4",  18.4);
    spot_value("-18.4", -18.4);
    spot_value( "18446744073709551616",  1.8446744073709552e+19);
    spot_value("-18446744073709551616", -1.8446744073709552e+19);
    spot_value( "18446744073709551616.0",  1.8446744073709552e+19);
    spot_value( "18446744073709551616.00009",  1.8446744073709552e+19);
    spot_value( "1844674407370955161600000",  1.8446744073709552e+24);
    spot_value("-1844674407370955161600000", -1.8446744073709552e+24);
    spot_value( "1844674407370955161600000.0",  1.8446744073709552e+24);
    spot_value( "1844674407370955161600000.00009",  1.8446744073709552e+24);
    spot_value( "19700720435664.186294290058937593e13",  1.9700720435664185e+26);

    spot_value( "1.0", 1.0);
    spot_value( "1.1", 1.1);
    spot_value( "1.11", 1.11);
    spot_value( "1.11111", 1.11111);
    spot_value( "11.1111", 11.1111);
    spot_value( "111.111", 111.111);

    fc("-0.9999999999999999999999");
    fc("-0.9999999999999999");
    fc("-0.9007199254740991");
    fc("-0.999999999999999");
    fc("-0.99999999999999");
    fc("-0.9999999999999");
    fc("-0.999999999999");
    fc("-0.99999999999");
    fc("-0.9999999999");
    fc("-0.999999999");
    fc("-0.99999999");
    fc("-0.9999999");
    fc("-0.999999");
    fc("-0.99999");
    fc("-0.9999");
    fc("-0.8125");
    fc("-0.999");
    fc("-0.99");
    fc("-1.0");
    fc("-0.9");
    fc("-0.0");
    fc("0.0");
    fc("0.9");
    fc("0.99");
    fc("0.999");
    fc("0.8125");
    fc("0.9999");
    fc("0.99999");
    fc("0.999999");
    fc("0.9999999");
    fc("0.99999999");
    fc("0.999999999");
    fc("0.9999999999");
    fc("0.99999999999");
    fc("0.999999999999");
    fc("0.9999999999999");
    fc("0.99999999999999");
    fc("0.999999999999999");
    fc("0.9007199254740991");
    fc("0.9999999999999999");
    fc("0.9999999999999999999999");
    fc("0.999999999999999999999999999");

    fc("-1e308");
    fc("-1e-308");
    fc("-9999e300");
    fc("-999e100");
    fc("-99e10");
    fc("-9e1");
    fc("9e1");
    fc("99e10");
    fc("999e100");
    fc("9999e300");
    fc("999999999999999999.0");
    fc("999999999999999999999.0");
    fc("999999999999999999999e5");
    fc("999999999999999999999.0e5");

    fc("0.00000000000000001");

    fc("-1e-1");
    fc("-1e0");
    fc("-1e1");
    fc("0e0");
    fc("1e0");
    fc("1e10");

    fc("0."
       "00000000000000000000000000000000000000000000000000" // 50 zeroes
       "1e50");
    fc("-0."
       "00000000000000000000000000000000000000000000000000" // 50 zeroes
       "1e50");

    fc("0."
       "00000000000000000000000000000000000000000000000000"
       "00000000000000000000000000000000000000000000000000"
       "00000000000000000000000000000000000000000000000000"
       "00000000000000000000000000000000000000000000000000"
       "00000000000000000000000000000000000000000000000000"
       "00000000000000000000000000000000000000000000000000"
       "00000000000000000000000000000000000000000000000000"
       "00000000000000000000000000000000000000000000000000"
       "00000000000000000000000000000000000000000000000000"
       "00000000000000000000000000000000000000000000000000" // 500 zeroes
       "1e600");
    fc("-0."
       "00000000000000000000000000000000000000000000000000"
       "00000000000000000000000000000000000000000000000000"
       "00000000000000000000000000000000000000000000000000"
       "00000000000000000000000000000000000000000000000000"
       "00000000000000000000000000000000000000000000000000"
       "00000000000000000000000000000000000000000000000000"
       "00000000000000000000000000000000000000000000000000"
       "00000000000000000000000000000000000000000000000000"
       "00000000000000000000000000000000000000000000000000"
       "00000000000000000000000000000000000000000000000000" // 500 zeroes
       "1e600");

    fc("0e"
       "00000000000000000000000000000000000000000000000000"
       "00000000000000000000000000000000000000000000000000"
       "00000000000000000000000000000000000000000000000000"
       "00000000000000000000000000000000000000000000000000"
       "00000000000000000000000000000000000000000000000000"
       "00000000000000000000000000000000000000000000000000"
       "00000000000000000000000000000000000000000000000000"
       "00000000000000000000000000000000000000000000000000"
       "00000000000000000000000000000000000000000000000000"
       "00000000000000000000000000000000000000000000000000" // 500 zeroes
    );

    // Reported on slack
    // https://cpplang.slack.com/archives/C04NBCS69U7/p1685363266630429
    fc("25188282901709339043e-252");
    fc("308984926168550152811e-052");
    fc("6372891218502368041059e064");
}

template <typename T>
void test_issue_37()
{
    BOOST_IF_CONSTEXPR (std::is_same<T, float>::value)
    {
        overflow_spot_value("1e999", HUGE_VALF);
        overflow_spot_value("-1e999", -HUGE_VALF);
        overflow_spot_value("1.0e+999", HUGE_VALF);
        overflow_spot_value("-1.0e+999", -HUGE_VALF);
    }
    else BOOST_IF_CONSTEXPR (std::is_same<T, double>::value)
    {
        overflow_spot_value("1e9999", HUGE_VAL);
        overflow_spot_value("-1e9999", -HUGE_VAL);
        overflow_spot_value("1.0e+9999", HUGE_VAL);
        overflow_spot_value("-1.0e+9999", -HUGE_VAL);
    }
    #ifndef BOOST_CHARCONV_UNSUPPORTED_LONG_DOUBLE
    else
    {
        overflow_spot_value("1e99999", HUGE_VALL);
        overflow_spot_value("-1e99999",-HUGE_VALL);
        overflow_spot_value("1.0e+99999", HUGE_VALL);
        overflow_spot_value("-1.0e+99999", -HUGE_VALL);
    }
    #endif

    overflow_spot_value("1e-99999", static_cast<T>(0.0L));
    overflow_spot_value("-1.0e-99999", static_cast<T>(-0.0L));
}

template <typename T>
void test_issue_45(T v, const std::string& full_buffer, const std::ptrdiff_t ptr, boost::charconv::chars_format fmt = boost::charconv::chars_format::general)
{
    T from_v;
    auto r = boost::charconv::from_chars(full_buffer.c_str(), full_buffer.c_str() + ptr, from_v, fmt);

    // v may not be exactly representable, so we only test within an epsilon
    if (!(BOOST_TEST((std::abs(v - from_v) < std::numeric_limits<T>::epsilon())) && BOOST_TEST_EQ(ptr, std::ptrdiff_t(r.ptr - full_buffer.c_str()))))
    {
        std::cerr << std::setprecision(std::numeric_limits<T>::digits10 + 1)
                  << "\nFrom chars value: " << from_v
                  << "\n  From chars ptr: " << std::ptrdiff_t(r.ptr - full_buffer.c_str())
                  << "\n      Original V: " << v
                  << "\n    Original ptr: " << ptr << std::endl;
    }
}

template <typename T>
void test_strtod_routines(T val, const char* str)
{
    T strtod_val = -2;
    const auto r = boost::charconv::detail::from_chars_strtod(str, str + std::strlen(str), strtod_val);
    if (r.ec == std::errc::not_enough_memory || r.ec == std::errc::result_out_of_range)
    {
        if (!BOOST_TEST_EQ(strtod_val, T(-2)))
        {
            std::cerr << "Value was modified from input value, but should not have been";
        }
    }
    else
    {
        if (!BOOST_TEST_EQ(strtod_val, val))
        {
            std::cerr << std::setprecision(std::numeric_limits<T>::digits10 + 1)
                      << "Expected: " << val
                      << "\n     Got: " << strtod_val << std::endl;
        }
    }
}

// Parser ignoring null terminator
template <typename T>
void test_issue_48(const T val, const char* str, const std::ptrdiff_t expected_pos, boost::charconv::chars_format fmt = boost::charconv::chars_format::general)
{
    const char* last = str + std::strlen(str);
    T from_val;
    const auto r = boost::charconv::from_chars(str, last, from_val, fmt);

    if (!(BOOST_TEST_EQ(from_val, val) && BOOST_TEST(r.ec == std::errc())))
    {
        std::cerr << std::setprecision(std::numeric_limits<T>::digits10 + 1)
                  << "\nFrom chars value: " << from_val
                  << "\n      Original V: " << val
                  << "\n  From chars ptr: " << (r.ptr - str)
                  << "\n    Expected ptr: " << expected_pos << std::endl;
    }
}

// Values that are valid floats but should fail interchange to 16-bit types
template <typename T>
void test_16bit_overflow(const char* str)
{
    const char* last = str + std::strlen(str);
    T from_val;
    const auto r = boost::charconv::from_chars(str, last, from_val);
    BOOST_TEST(r.ec == std::errc::result_out_of_range);

    // Validation
    float float_val;
    const auto r2 = boost::charconv::from_chars(str, last, float_val);
    BOOST_TEST(r2);
}

int main()
{
    simple_integer_test<float>();
    simple_integer_test<double>();
    
    simple_hex_integer_test<float>();
    simple_hex_integer_test<double>();

    simple_scientific_test<float>();
    simple_scientific_test<double>();

    simple_hex_scientific_test<float>();
    simple_hex_scientific_test<double>();

    dot_position_test<float>();
    dot_position_test<double>();

    odd_strings_test<float>();
    odd_strings_test<double>();

    #ifndef BOOST_CHARCONV_UNSUPPORTED_LONG_DOUBLE
    simple_integer_test<long double>();
    simple_hex_integer_test<long double>();
    simple_scientific_test<long double>();
    simple_hex_scientific_test<long double>();
    zero_test<long double>();
    test_issue_37<long double>();
    #endif

    zero_test<float>();
    zero_test<double>();

    boost_json_test<double>();

    test_issue_37<float>();
    test_issue_37<double>();

    test_issue_45<double>(static_cast<double>(-4109895455460520.5), "-4109895455460520.513430", 19);
    test_issue_45<double>(1.035695536657502e-308, "1.0356955366575023e-3087", 23);
    test_issue_45<double>(static_cast<double>(-1985444280612224.5), "-1985444280612224.5e+258", 19);
    test_issue_45<double>(2.196197480766336e-308, "2.196197480766336e-30889", 22);
    test_issue_45<double>(static_cast<double>(278061055647717.5), "278061055647717.5e-2288", 17);

    // Value from Lemire's comments
    spot_check<double>(7.3177701707893310e+15, "7.3177701707893310e+15", boost::charconv::chars_format::scientific);

    // From GCC 13 Excess Precision Support was implemented and made standard and causes these hard value tests to be off by 1 ULP
    //
    // Excess precision support (which has been available in C since GCC 4.5) has been implemented for C++ as well.
    // It is enabled by default in strict standard modes like -std=c++17, where it defaults to -fexcess-precision=standard,
    // while in GNU standard modes like -std=gnu++20 it defaults to -fexcess-precision=fast.
    // The option mainly affects IA-32/x86-64 using x87 math and in some cases on Motorola 68000,
    // where float and double expressions are evaluated in long double precision and S/390, System z,
    // IBM z Systems where float expressions are evaluated in double precision.
    //
    // Values from testbase report: https://www.icir.org/vern/papers/testbase-report.pdf
    // Table 1
    spot_check<double>(9e-265, "9e-265", boost::charconv::chars_format::scientific);
    spot_check<double>(85e-37, "85e-37", boost::charconv::chars_format::scientific);
    spot_check<double>(623e+100, "623e+100", boost::charconv::chars_format::scientific);
    spot_check<double>(3571e+263, "3571e+263", boost::charconv::chars_format::scientific);
    spot_check<double>(81661e+153, "81661e+153", boost::charconv::chars_format::scientific);
    spot_check<double>(920657e-23, "920657e-23", boost::charconv::chars_format::scientific);
    spot_check<double>(4603285e-24, "4603285e-24", boost::charconv::chars_format::scientific);
    spot_check<double>(87575437e-309, "87575437e-309", boost::charconv::chars_format::scientific);
    spot_check<double>(245540327e+122, "245540327e+122", boost::charconv::chars_format::scientific);
    spot_check<double>(6138508175e+120, "6138508175e+120", boost::charconv::chars_format::scientific);
    spot_check<double>(83356057653e+193, "83356057653e+193", boost::charconv::chars_format::scientific);
    spot_check<double>(619534293513e+124, "619534293513e+124", boost::charconv::chars_format::scientific);
    spot_check<double>(2335141086879e+218, "2335141086879e+218", boost::charconv::chars_format::scientific);
    spot_check<double>(36167929443327e-159, "36167929443327e-159", boost::charconv::chars_format::scientific);
    spot_check<double>(609610927149051e-255, "609610927149051e-255", boost::charconv::chars_format::scientific);
    spot_check<double>(3743626360493413e-165, "3743626360493413e-165", boost::charconv::chars_format::scientific);
    spot_check<double>(94080055902682397e-242, "94080055902682397e-242", boost::charconv::chars_format::scientific);
    spot_check<double>(899810892172646163e+283, "899810892172646163e+283", boost::charconv::chars_format::scientific);
    spot_check<double>(7120190517612959703e+120, "7120190517612959703e+120", boost::charconv::chars_format::scientific);
    spot_check<double>(20505426358836677347e-221, "20505426358836677347e-221", boost::charconv::chars_format::scientific);
    spot_check<double>(836168422905420598437e-234, "836168422905420598437e-234", boost::charconv::chars_format::scientific);
    spot_check<double>(4891559871276714924261e+222, "4891559871276714924261e+222", boost::charconv::chars_format::scientific);

    // Table 2
    spot_check<double>(9e-265, "9e-265", boost::charconv::chars_format::scientific);
    spot_check<double>(85e-37, "85e-37", boost::charconv::chars_format::scientific);
    spot_check<double>(623e+100, "623e+100", boost::charconv::chars_format::scientific);
    spot_check<double>(3571e+263, "3571e+263", boost::charconv::chars_format::scientific);
    spot_check<double>(81661e+153, "81661e+153", boost::charconv::chars_format::scientific);
    spot_check<double>(920657e-023, "920657e-023", boost::charconv::chars_format::scientific);
    spot_check<double>(4603285e-24, "4603285e-24", boost::charconv::chars_format::scientific);
    spot_check<double>(87575437e-309, "87575437e-309", boost::charconv::chars_format::scientific);
    spot_check<double>(245540327e122, "245540327e+122", boost::charconv::chars_format::scientific);
    spot_check<double>(6138508175e+120, "6138508175e120", boost::charconv::chars_format::scientific);
    spot_check<double>(83356057653e193, "83356057653e+193", boost::charconv::chars_format::scientific);
    spot_check<double>(619534293513e124, "619534293513e+124", boost::charconv::chars_format::scientific);
    spot_check<double>(2335141086879e218, "2335141086879e+218", boost::charconv::chars_format::scientific);
    spot_check<double>(609610927149051e-255, "609610927149051e-255", boost::charconv::chars_format::scientific);
    spot_check<double>(3743626360493413e-165, "3743626360493413e-165", boost::charconv::chars_format::scientific);
    spot_check<double>(94080055902682397e-242, "94080055902682397e-242", boost::charconv::chars_format::scientific);
    spot_check<double>(899810892172646163e+283, "899810892172646163e+283", boost::charconv::chars_format::scientific);
    spot_check<double>(7120190517612959703e+120, "7120190517612959703e+120", boost::charconv::chars_format::scientific);
    //spot_check<double>(25188282901709339043e-252, "25188282901709339043e-252", boost::charconv::chars_format::scientific);
    //spot_check<double>(308984926168550152811e-052, "308984926168550152811e-052", boost::charconv::chars_format::scientific);
    //spot_check<double>(6372891218502368041059e+064, "6372891218502368041059e+064", boost::charconv::chars_format::scientific);

    // Page 22 - The worst 17-digit number
    // Requires 119 bits of precision to calculate
    spot_check<double>(78459735791271921e+049, "78459735791271921e+049", boost::charconv::chars_format::scientific);

    // Values dumped from RapidJSON tests that require them to use big ints
    spot_check<double>(222507385850720113605740979670913197593481954635164564e-361, "222507385850720113605740979670913197593481954635164564e-361", boost::charconv::chars_format::scientific);
    spot_check<double>(1634460786126566e-216, "1634460786126566e-216", boost::charconv::chars_format::scientific);
    spot_check<double>( 17976931348623158079372897140530341507993413271003782693617377898044496829276475094664901797758720709633028641669288791094655554785194040263065748867150582068190890200070838367627385484581771153176447573027006985557136695962284291481986083493647529271907416844436551070434271155969950809304288017790417449779.0,
                        "1797693134862315807937289714053034150799341327100378269361737789804449682927647509466"
                        "4901797758720709633028641669288791094655554785194040263065748867150582068190890200070"
                        "8383676273854845817711531764475730270069855571366959622842914819860834936475292719074"
                        "16844436551070434271155969950809304288017790417449779.0", boost::charconv::chars_format::general);

    // Sub-normals
    spot_check(4.41953449404251504e-310, "4.41953449404251504e-310", boost::charconv::chars_format::scientific);
    spot_check(8.495975094332900732e-310, "8.495975094332900732e-310", boost::charconv::chars_format::scientific);
    spot_check(5.657373097294075947e-310, "5.657373097294075947e-310", boost::charconv::chars_format::scientific);
    spot_check(6.2680033580958509e-310, "6.2680033580958509e-310", boost::charconv::chars_format::scientific);
    spot_check(-8.94321267152868987e-310, "-8.94321267152868987e-310", boost::charconv::chars_format::scientific);

    test_issue_48(-1.132185940257003e+207, "-1.132185940257003e+207\05.406741134053704e+77\0", 23);
    // Various list delimiters
    test_issue_48(-1.3982765396485712e+05, "-1.3982765396485712e+05,5.406741134053704e+77", 23);
    test_issue_48(-1.3982765396485712e+05, "-1.3982765396485712e+05;5.406741134053704e+77", 23);
    test_issue_48(-1.3982765396485712e+05, "-1.3982765396485712e+05\t5.406741134053704e+77", 23);
    test_issue_48(-1.3982765396485712e+05, "-1.3982765396485712e+05\n5.406741134053704e+77", 23);
    test_issue_48(-1.3982765396485712e+05, "-1.3982765396485712e+05 5.406741134053704e+77", 23);

    // Delimited values without exponents
    test_issue_48(-1.398276, "-1.398276,5.396485", 9);
    test_issue_48(-1.398276, "-1.398276\05.396485", 9);
    test_issue_48(-1.398276, "-1.398276;5.396485", 9);
    test_issue_48(-1.398276, "-1.398276\t5.396485", 9);
    test_issue_48(-1.398276, "-1.398276\n5.396485", 9);

    // Pointers did not match
    // See: https://github.com/cppalliance/charconv/issues/55
    spot_value<double>("0e0", 0e0);
    spot_value<double>("0e00000000000", 0e00000000000);
    spot_value<double>("0e1", 0e1);

    // Value in range with 20 million digits. Malloc should max out at 16'711'568 bytes
    test_strtod_routines<double>(1.982645139827653964857196,
                                "1.98264513982765396485719650498261498564729856318926451982754398672495874691824659645"
                                "1092348576918246513984659103485721634589126458619584619051982671298642158641958264819"
                                "0519826492851648192519856419258612541685159172360917510925761093561879512865908275198"
                                "2651982563012895610769517352609182751093560198257610928576510481965234109182954019825"
                                "7610935761093571092387540619275610395718290513769285109237856091827569104857109358109"
                                "3857910671958109375610935865109834571986201958109246581398246396857109651089639186275"
                                "1238961023875609182763509182703618927450916837259013650296857109258607129845760918576"
                                "5109384659103865791083659127490287596102935761092375819627109382651098346598163450983"
                                "5109384750198273561907351098627531098465109384750983610984675109384750984610987456109"
                                "3847561098475260193847609187326501982735601985761904782659013487569102738957109184756"
                                "9018743691872634509287561098274510938746509827536019827536091827650918327650918265091"
                                "8237560918275961083726510983726510982650198275609182375609187236510982356109827509862"
                                "3140985671294567190264790263190756290824609182356907123056918276091837561097812365908"
                                "1726509817365109823561097235690719823560987126509812376598712635098712365098475610982"
                                "3756098135760981273965019827609182375609182756098123765098123765081273650982173650982"
                                "1735091823756109821736509182763905109286510982653109826501982653109835601928375609182"
                                "5673098217536098217560918273560982165309821753609817365098271365098217365091827651098"
                                "2735610982735610982735610982713509182756310982715630982735610982175631098275610982735"
                                "6091827561098273650981253609821753609821765310982756309821763509182756309821756309182"
                                "7563098217563109827653091827563098217653091827650918273560982716350918273561098217536"
                                "0918276350918276530982176531098275609182756309827156310982735609182753609827153609182"
                                "7563098271563908127563091827563109827156309827153609827365109827153098271536098271536"
                                "0918275631098271536098271560918275630982716530918275630982715360918275360982715360918"
                                "2753609827153609182756309827156309182756310982715630982715360982715360982715360982715"
                                "3609827153609827156309827153609821765309182756091827356098271653091827356098271563091"
                                "8275630982716350918273561098271536098271536098271536098271563098271536098271536098271"
                                "536098271563098271536098271536098271536"
                                "198264513982765396485719650498261498564729856318926451982754398672495874691824659645"
                                "1092348576918246513984659103485721634589126458619584619051982671298642158641958264819"
                                "0519826492851648192519856419258612541685159172360917510925761093561879512865908275198"
                                "2651982563012895610769517352609182751093560198257610928576510481965234109182954019825"
                                "7610935761093571092387540619275610395718290513769285109237856091827569104857109358109"
                                "3857910671958109375610935865109834571986201958109246581398246396857109651089639186275"
                                "1238961023875609182763509182703618927450916837259013650296857109258607129845760918576"
                                "5109384659103865791083659127490287596102935761092375819627109382651098346598163450983"
                                "5109384750198273561907351098627531098465109384750983610984675109384750984610987456109"
                                "3847561098475260193847609187326501982735601985761904782659013487569102738957109184756"
                                "9018743691872634509287561098274510938746509827536019827536091827650918327650918265091"
                                "8237560918275961083726510983726510982650198275609182375609187236510982356109827509862"
                                "3140985671294567190264790263190756290824609182356907123056918276091837561097812365908"
                                "1726509817365109823561097235690719823560987126509812376598712635098712365098475610982"
                                "3756098135760981273965019827609182375609182756098123765098123765081273650982173650982"
                                "1735091823756109821736509182763905109286510982653109826501982653109835601928375609182"
                                "5673098217536098217560918273560982165309821753609817365098271365098217365091827651098"
                                "2735610982735610982735610982713509182756310982715630982735610982175631098275610982735"
                                "6091827561098273650981253609821753609821765310982756309821763509182756309821756309182"
                                "7563098217563109827653091827563098217653091827650918273560982716350918273561098217536"
                                "0918276350918276530982176531098275609182756309827156310982735609182753609827153609182"
                                "7563098271563908127563091827563109827156309827153609827365109827153098271536098271536"
                                "0918275631098271536098271560918275630982716530918275630982715360918275360982715360918"
                                "2753609827153609182756309827156309182756310982715630982715360982715360982715360982715"
                                "3609827153609827156309827153609821765309182756091827356098271653091827356098271563091"
                                "8275630982716350918273561098271536098271536098271536098271563098271536098271536098271"
                                "536098271563098271536098271536098271536"
                                "198264513982765396485719650498261498564729856318926451982754398672495874691824659645"
                                "1092348576918246513984659103485721634589126458619584619051982671298642158641958264819"
                                "0519826492851648192519856419258612541685159172360917510925761093561879512865908275198"
                                "2651982563012895610769517352609182751093560198257610928576510481965234109182954019825"
                                "7610935761093571092387540619275610395718290513769285109237856091827569104857109358109"
                                "3857910671958109375610935865109834571986201958109246581398246396857109651089639186275"
                                "1238961023875609182763509182703618927450916837259013650296857109258607129845760918576"
                                "5109384659103865791083659127490287596102935761092375819627109382651098346598163450983"
                                "5109384750198273561907351098627531098465109384750983610984675109384750984610987456109"
                                "3847561098475260193847609187326501982735601985761904782659013487569102738957109184756"
                                "9018743691872634509287561098274510938746509827536019827536091827650918327650918265091"
                                "8237560918275961083726510983726510982650198275609182375609187236510982356109827509862"
                                "3140985671294567190264790263190756290824609182356907123056918276091837561097812365908"
                                "1726509817365109823561097235690719823560987126509812376598712635098712365098475610982"
                                "3756098135760981273965019827609182375609182756098123765098123765081273650982173650982"
                                "1735091823756109821736509182763905109286510982653109826501982653109835601928375609182"
                                "5673098217536098217560918273560982165309821753609817365098271365098217365091827651098"
                                "2735610982735610982735610982713509182756310982715630982735610982175631098275610982735"
                                "6091827561098273650981253609821753609821765310982756309821763509182756309821756309182"
                                "7563098217563109827653091827563098217653091827650918273560982716350918273561098217536"
                                "0918276350918276530982176531098275609182756309827156310982735609182753609827153609182"
                                "7563098271563908127563091827563109827156309827153609827365109827153098271536098271536"
                                "0918275631098271536098271560918275630982716530918275630982715360918275360982715360918"
                                "2753609827153609182756309827156309182756310982715630982715360982715360982715360982715"
                                "3609827153609827156309827153609821765309182756091827356098271653091827356098271563091"
                                "8275630982716350918273561098271536098271536098271536098271563098271536098271536098271"
                                "536098271563098271536098271536098271536"
                                "198264513982765396485719650498261498564729856318926451982754398672495874691824659645"
                                "1092348576918246513984659103485721634589126458619584619051982671298642158641958264819"
                                "0519826492851648192519856419258612541685159172360917510925761093561879512865908275198"
                                "2651982563012895610769517352609182751093560198257610928576510481965234109182954019825"
                                "7610935761093571092387540619275610395718290513769285109237856091827569104857109358109"
                                "3857910671958109375610935865109834571986201958109246581398246396857109651089639186275"
                                "1238961023875609182763509182703618927450916837259013650296857109258607129845760918576"
                                "5109384659103865791083659127490287596102935761092375819627109382651098346598163450983"
                                "5109384750198273561907351098627531098465109384750983610984675109384750984610987456109"
                                "3847561098475260193847609187326501982735601985761904782659013487569102738957109184756"
                                "9018743691872634509287561098274510938746509827536019827536091827650918327650918265091"
                                "8237560918275961083726510983726510982650198275609182375609187236510982356109827509862"
                                "3140985671294567190264790263190756290824609182356907123056918276091837561097812365908"
                                "1726509817365109823561097235690719823560987126509812376598712635098712365098475610982"
                                "3756098135760981273965019827609182375609182756098123765098123765081273650982173650982"
                                "1735091823756109821736509182763905109286510982653109826501982653109835601928375609182"
                                "5673098217536098217560918273560982165309821753609817365098271365098217365091827651098"
                                "2735610982735610982735610982713509182756310982715630982735610982175631098275610982735"
                                "6091827561098273650981253609821753609821765310982756309821763509182756309821756309182"
                                "7563098217563109827653091827563098217653091827650918273560982716350918273561098217536"
                                "0918276350918276530982176531098275609182756309827156310982735609182753609827153609182"
                                "7563098271563908127563091827563109827156309827153609827365109827153098271536098271536"
                                "0918275631098271536098271560918275630982716530918275630982715360918275360982715360918"
                                "2753609827153609182756309827156309182756310982715630982715360982715360982715360982715"
                                "3609827153609827156309827153609821765309182756091827356098271653091827356098271563091"
                                "8275630982716350918273561098271536098271536098271536098271563098271536098271536098271"
                                "536098271563098271536098271536098271536"
                                "198264513982765396485719650498261498564729856318926451982754398672495874691824659645"
                                "1092348576918246513984659103485721634589126458619584619051982671298642158641958264819"
                                "0519826492851648192519856419258612541685159172360917510925761093561879512865908275198"
                                "2651982563012895610769517352609182751093560198257610928576510481965234109182954019825"
                                "7610935761093571092387540619275610395718290513769285109237856091827569104857109358109"
                                "3857910671958109375610935865109834571986201958109246581398246396857109651089639186275"
                                "1238961023875609182763509182703618927450916837259013650296857109258607129845760918576"
                                "5109384659103865791083659127490287596102935761092375819627109382651098346598163450983"
                                "5109384750198273561907351098627531098465109384750983610984675109384750984610987456109"
                                "3847561098475260193847609187326501982735601985761904782659013487569102738957109184756"
                                "9018743691872634509287561098274510938746509827536019827536091827650918327650918265091"
                                "8237560918275961083726510983726510982650198275609182375609187236510982356109827509862"
                                "3140985671294567190264790263190756290824609182356907123056918276091837561097812365908"
                                "1726509817365109823561097235690719823560987126509812376598712635098712365098475610982"
                                "3756098135760981273965019827609182375609182756098123765098123765081273650982173650982"
                                "1735091823756109821736509182763905109286510982653109826501982653109835601928375609182"
                                "5673098217536098217560918273560982165309821753609817365098271365098217365091827651098"
                                "2735610982735610982735610982713509182756310982715630982735610982175631098275610982735"
                                "6091827561098273650981253609821753609821765310982756309821763509182756309821756309182"
                                "7563098217563109827653091827563098217653091827650918273560982716350918273561098217536"
                                "0918276350918276530982176531098275609182756309827156310982735609182753609827153609182"
                                "7563098271563908127563091827563109827156309827153609827365109827153098271536098271536"
                                "0918275631098271536098271560918275630982716530918275630982715360918275360982715360918"
                                "2753609827153609182756309827156309182756310982715630982715360982715360982715360982715"
                                "3609827153609827156309827153609821765309182756091827356098271653091827356098271563091"
                                "8275630982716350918273561098271536098271536098271536098271563098271536098271536098271"
                                "536098271563098271536098271536098271536"
                                "198264513982765396485719650498261498564729856318926451982754398672495874691824659645"
                                "1092348576918246513984659103485721634589126458619584619051982671298642158641958264819"
                                "0519826492851648192519856419258612541685159172360917510925761093561879512865908275198"
                                "2651982563012895610769517352609182751093560198257610928576510481965234109182954019825"
                                "7610935761093571092387540619275610395718290513769285109237856091827569104857109358109"
                                "3857910671958109375610935865109834571986201958109246581398246396857109651089639186275"
                                "1238961023875609182763509182703618927450916837259013650296857109258607129845760918576"
                                "5109384659103865791083659127490287596102935761092375819627109382651098346598163450983"
                                "5109384750198273561907351098627531098465109384750983610984675109384750984610987456109"
                                "3847561098475260193847609187326501982735601985761904782659013487569102738957109184756"
                                "9018743691872634509287561098274510938746509827536019827536091827650918327650918265091"
                                "8237560918275961083726510983726510982650198275609182375609187236510982356109827509862"
                                "3140985671294567190264790263190756290824609182356907123056918276091837561097812365908"
                                "1726509817365109823561097235690719823560987126509812376598712635098712365098475610982"
                                "3756098135760981273965019827609182375609182756098123765098123765081273650982173650982"
                                "1735091823756109821736509182763905109286510982653109826501982653109835601928375609182"
                                "5673098217536098217560918273560982165309821753609817365098271365098217365091827651098"
                                "2735610982735610982735610982713509182756310982715630982735610982175631098275610982735"
                                "6091827561098273650981253609821753609821765310982756309821763509182756309821756309182"
                                "7563098217563109827653091827563098217653091827650918273560982716350918273561098217536"
                                "0918276350918276530982176531098275609182756309827156310982735609182753609827153609182"
                                "7563098271563908127563091827563109827156309827153609827365109827153098271536098271536"
                                "0918275631098271536098271560918275630982716530918275630982715360918275360982715360918"
                                "2753609827153609182756309827156309182756310982715630982715360982715360982715360982715"
                                "3609827153609827156309827153609821765309182756091827356098271653091827356098271563091"
                                "8275630982716350918273561098271536098271536098271536098271563098271536098271536098271"
                                "536098271563098271536098271536098271536"
                                "198264513982765396485719650498261498564729856318926451982754398672495874691824659645"
                                "1092348576918246513984659103485721634589126458619584619051982671298642158641958264819"
                                "0519826492851648192519856419258612541685159172360917510925761093561879512865908275198"
                                "2651982563012895610769517352609182751093560198257610928576510481965234109182954019825"
                                "7610935761093571092387540619275610395718290513769285109237856091827569104857109358109"
                                "3857910671958109375610935865109834571986201958109246581398246396857109651089639186275"
                                "1238961023875609182763509182703618927450916837259013650296857109258607129845760918576"
                                "5109384659103865791083659127490287596102935761092375819627109382651098346598163450983"
                                "5109384750198273561907351098627531098465109384750983610984675109384750984610987456109"
                                "3847561098475260193847609187326501982735601985761904782659013487569102738957109184756"
                                "9018743691872634509287561098274510938746509827536019827536091827650918327650918265091"
                                "8237560918275961083726510983726510982650198275609182375609187236510982356109827509862"
                                "3140985671294567190264790263190756290824609182356907123056918276091837561097812365908"
                                "1726509817365109823561097235690719823560987126509812376598712635098712365098475610982"
                                "3756098135760981273965019827609182375609182756098123765098123765081273650982173650982"
                                "1735091823756109821736509182763905109286510982653109826501982653109835601928375609182"
                                "5673098217536098217560918273560982165309821753609817365098271365098217365091827651098"
                                "2735610982735610982735610982713509182756310982715630982735610982175631098275610982735"
                                "6091827561098273650981253609821753609821765310982756309821763509182756309821756309182"
                                "7563098217563109827653091827563098217653091827650918273560982716350918273561098217536"
                                "0918276350918276530982176531098275609182756309827156310982735609182753609827153609182"
                                "7563098271563908127563091827563109827156309827153609827365109827153098271536098271536"
                                "0918275631098271536098271560918275630982716530918275630982715360918275360982715360918"
                                "2753609827153609182756309827156309182756310982715630982715360982715360982715360982715"
                                "3609827153609827156309827153609821765309182756091827356098271653091827356098271563091"
                                "8275630982716350918273561098271536098271536098271536098271563098271536098271536098271"
                                "536098271563098271536098271536098271536"
                                "198264513982765396485719650498261498564729856318926451982754398672495874691824659645"
                                "1092348576918246513984659103485721634589126458619584619051982671298642158641958264819"
                                "0519826492851648192519856419258612541685159172360917510925761093561879512865908275198"
                                "2651982563012895610769517352609182751093560198257610928576510481965234109182954019825"
                                "7610935761093571092387540619275610395718290513769285109237856091827569104857109358109"
                                "3857910671958109375610935865109834571986201958109246581398246396857109651089639186275"
                                "1238961023875609182763509182703618927450916837259013650296857109258607129845760918576"
                                "5109384659103865791083659127490287596102935761092375819627109382651098346598163450983"
                                "5109384750198273561907351098627531098465109384750983610984675109384750984610987456109"
                                "3847561098475260193847609187326501982735601985761904782659013487569102738957109184756"
                                "9018743691872634509287561098274510938746509827536019827536091827650918327650918265091"
                                "8237560918275961083726510983726510982650198275609182375609187236510982356109827509862"
                                "3140985671294567190264790263190756290824609182356907123056918276091837561097812365908"
                                "1726509817365109823561097235690719823560987126509812376598712635098712365098475610982"
                                "3756098135760981273965019827609182375609182756098123765098123765081273650982173650982"
                                "1735091823756109821736509182763905109286510982653109826501982653109835601928375609182"
                                "5673098217536098217560918273560982165309821753609817365098271365098217365091827651098"
                                "2735610982735610982735610982713509182756310982715630982735610982175631098275610982735"
                                "6091827561098273650981253609821753609821765310982756309821763509182756309821756309182"
                                "7563098217563109827653091827563098217653091827650918273560982716350918273561098217536"
                                "0918276350918276530982176531098275609182756309827156310982735609182753609827153609182"
                                "7563098271563908127563091827563109827156309827153609827365109827153098271536098271536"
                                "0918275631098271536098271560918275630982716530918275630982715360918275360982715360918"
                                "2753609827153609182756309827156309182756310982715630982715360982715360982715360982715"
                                "3609827153609827156309827153609821765309182756091827356098271653091827356098271563091"
                                "8275630982716350918273561098271536098271536098271536098271563098271536098271536098271"
                                "536098271563098271536098271536098271536"
                                "198264513982765396485719650498261498564729856318926451982754398672495874691824659645"
                                "1092348576918246513984659103485721634589126458619584619051982671298642158641958264819"
                                "0519826492851648192519856419258612541685159172360917510925761093561879512865908275198"
                                "2651982563012895610769517352609182751093560198257610928576510481965234109182954019825"
                                "7610935761093571092387540619275610395718290513769285109237856091827569104857109358109"
                                "3857910671958109375610935865109834571986201958109246581398246396857109651089639186275"
                                "1238961023875609182763509182703618927450916837259013650296857109258607129845760918576"
                                "5109384659103865791083659127490287596102935761092375819627109382651098346598163450983"
                                "5109384750198273561907351098627531098465109384750983610984675109384750984610987456109"
                                "3847561098475260193847609187326501982735601985761904782659013487569102738957109184756"
                                "9018743691872634509287561098274510938746509827536019827536091827650918327650918265091"
                                "8237560918275961083726510983726510982650198275609182375609187236510982356109827509862"
                                "3140985671294567190264790263190756290824609182356907123056918276091837561097812365908"
                                "1726509817365109823561097235690719823560987126509812376598712635098712365098475610982"
                                "3756098135760981273965019827609182375609182756098123765098123765081273650982173650982"
                                "1735091823756109821736509182763905109286510982653109826501982653109835601928375609182"
                                "5673098217536098217560918273560982165309821753609817365098271365098217365091827651098"
                                "2735610982735610982735610982713509182756310982715630982735610982175631098275610982735"
                                "6091827561098273650981253609821753609821765310982756309821763509182756309821756309182"
                                "7563098217563109827653091827563098217653091827650918273560982716350918273561098217536"
                                "0918276350918276530982176531098275609182756309827156310982735609182753609827153609182"
                                "7563098271563908127563091827563109827156309827153609827365109827153098271536098271536"
                                "0918275631098271536098271560918275630982716530918275630982715360918275360982715360918"
                                "2753609827153609182756309827156309182756310982715630982715360982715360982715360982715"
                                "3609827153609827156309827153609821765309182756091827356098271653091827356098271563091"
                                "8275630982716350918273561098271536098271536098271536098271563098271536098271536098271"
                                "536098271563098271536098271536098271536"
                                "198264513982765396485719650498261498564729856318926451982754398672495874691824659645"
                                "1092348576918246513984659103485721634589126458619584619051982671298642158641958264819"
                                "0519826492851648192519856419258612541685159172360917510925761093561879512865908275198"
                                "2651982563012895610769517352609182751093560198257610928576510481965234109182954019825"
                                "7610935761093571092387540619275610395718290513769285109237856091827569104857109358109"
                                "3857910671958109375610935865109834571986201958109246581398246396857109651089639186275"
                                "1238961023875609182763509182703618927450916837259013650296857109258607129845760918576"
                                "5109384659103865791083659127490287596102935761092375819627109382651098346598163450983"
                                "5109384750198273561907351098627531098465109384750983610984675109384750984610987456109"
                                "3847561098475260193847609187326501982735601985761904782659013487569102738957109184756"
                                "9018743691872634509287561098274510938746509827536019827536091827650918327650918265091"
                                "8237560918275961083726510983726510982650198275609182375609187236510982356109827509862"
                                "3140985671294567190264790263190756290824609182356907123056918276091837561097812365908"
                                "1726509817365109823561097235690719823560987126509812376598712635098712365098475610982"
                                "3756098135760981273965019827609182375609182756098123765098123765081273650982173650982"
                                "1735091823756109821736509182763905109286510982653109826501982653109835601928375609182"
                                "5673098217536098217560918273560982165309821753609817365098271365098217365091827651098"
                                "2735610982735610982735610982713509182756310982715630982735610982175631098275610982735"
                                "6091827561098273650981253609821753609821765310982756309821763509182756309821756309182"
                                "7563098217563109827653091827563098217653091827650918273560982716350918273561098217536"
                                "0918276350918276530982176531098275609182756309827156310982735609182753609827153609182"
                                "7563098271563908127563091827563109827156309827153609827365109827153098271536098271536"
                                "0918275631098271536098271560918275630982716530918275630982715360918275360982715360918"
                                "2753609827153609182756309827156309182756310982715630982715360982715360982715360982715"
                                "3609827153609827156309827153609821765309182756091827356098271653091827356098271563091"
                                "8275630982716350918273561098271536098271536098271536098271563098271536098271536098271"
                                "536098271563098271536098271536098271536"
                                "198264513982765396485719650498261498564729856318926451982754398672495874691824659645"
                                "1092348576918246513984659103485721634589126458619584619051982671298642158641958264819"
                                "0519826492851648192519856419258612541685159172360917510925761093561879512865908275198"
                                "2651982563012895610769517352609182751093560198257610928576510481965234109182954019825"
                                "7610935761093571092387540619275610395718290513769285109237856091827569104857109358109"
                                "3857910671958109375610935865109834571986201958109246581398246396857109651089639186275"
                                "1238961023875609182763509182703618927450916837259013650296857109258607129845760918576"
                                "5109384659103865791083659127490287596102935761092375819627109382651098346598163450983"
                                "5109384750198273561907351098627531098465109384750983610984675109384750984610987456109"
                                "3847561098475260193847609187326501982735601985761904782659013487569102738957109184756"
                                "9018743691872634509287561098274510938746509827536019827536091827650918327650918265091"
                                "8237560918275961083726510983726510982650198275609182375609187236510982356109827509862"
                                "3140985671294567190264790263190756290824609182356907123056918276091837561097812365908"
                                "1726509817365109823561097235690719823560987126509812376598712635098712365098475610982"
                                "3756098135760981273965019827609182375609182756098123765098123765081273650982173650982"
                                "1735091823756109821736509182763905109286510982653109826501982653109835601928375609182"
                                "5673098217536098217560918273560982165309821753609817365098271365098217365091827651098"
                                "2735610982735610982735610982713509182756310982715630982735610982175631098275610982735"
                                "6091827561098273650981253609821753609821765310982756309821763509182756309821756309182"
                                "7563098217563109827653091827563098217653091827650918273560982716350918273561098217536"
                                "0918276350918276530982176531098275609182756309827156310982735609182753609827153609182"
                                "7563098271563908127563091827563109827156309827153609827365109827153098271536098271536"
                                "0918275631098271536098271560918275630982716530918275630982715360918275360982715360918"
                                "2753609827153609182756309827156309182756310982715630982715360982715360982715360982715"
                                "3609827153609827156309827153609821765309182756091827356098271653091827356098271563091"
                                "8275630982716350918273561098271536098271536098271536098271563098271536098271536098271"
                                "536098271563098271536098271536098271536"
                                "198264513982765396485719650498261498564729856318926451982754398672495874691824659645"
                                "1092348576918246513984659103485721634589126458619584619051982671298642158641958264819"
                                "0519826492851648192519856419258612541685159172360917510925761093561879512865908275198"
                                "2651982563012895610769517352609182751093560198257610928576510481965234109182954019825"
                                "7610935761093571092387540619275610395718290513769285109237856091827569104857109358109"
                                "3857910671958109375610935865109834571986201958109246581398246396857109651089639186275"
                                "1238961023875609182763509182703618927450916837259013650296857109258607129845760918576"
                                "5109384659103865791083659127490287596102935761092375819627109382651098346598163450983"
                                "5109384750198273561907351098627531098465109384750983610984675109384750984610987456109"
                                "3847561098475260193847609187326501982735601985761904782659013487569102738957109184756"
                                "9018743691872634509287561098274510938746509827536019827536091827650918327650918265091"
                                "8237560918275961083726510983726510982650198275609182375609187236510982356109827509862"
                                "3140985671294567190264790263190756290824609182356907123056918276091837561097812365908"
                                "1726509817365109823561097235690719823560987126509812376598712635098712365098475610982"
                                "3756098135760981273965019827609182375609182756098123765098123765081273650982173650982"
                                "1735091823756109821736509182763905109286510982653109826501982653109835601928375609182"
                                "5673098217536098217560918273560982165309821753609817365098271365098217365091827651098"
                                "2735610982735610982735610982713509182756310982715630982735610982175631098275610982735"
                                "6091827561098273650981253609821753609821765310982756309821763509182756309821756309182"
                                "7563098217563109827653091827563098217653091827650918273560982716350918273561098217536"
                                "0918276350918276530982176531098275609182756309827156310982735609182753609827153609182"
                                "7563098271563908127563091827563109827156309827153609827365109827153098271536098271536"
                                "0918275631098271536098271560918275630982716530918275630982715360918275360982715360918"
                                "2753609827153609182756309827156309182756310982715630982715360982715360982715360982715"
                                "3609827153609827156309827153609821765309182756091827356098271653091827356098271563091"
                                "8275630982716350918273561098271536098271536098271536098271563098271536098271536098271"
                                "536098271563098271536098271536098271536"
                                "198264513982765396485719650498261498564729856318926451982754398672495874691824659645"
                                "1092348576918246513984659103485721634589126458619584619051982671298642158641958264819"
                                "0519826492851648192519856419258612541685159172360917510925761093561879512865908275198"
                                "2651982563012895610769517352609182751093560198257610928576510481965234109182954019825"
                                "7610935761093571092387540619275610395718290513769285109237856091827569104857109358109"
                                "3857910671958109375610935865109834571986201958109246581398246396857109651089639186275"
                                "1238961023875609182763509182703618927450916837259013650296857109258607129845760918576"
                                "5109384659103865791083659127490287596102935761092375819627109382651098346598163450983"
                                "5109384750198273561907351098627531098465109384750983610984675109384750984610987456109"
                                "3847561098475260193847609187326501982735601985761904782659013487569102738957109184756"
                                "9018743691872634509287561098274510938746509827536019827536091827650918327650918265091"
                                "8237560918275961083726510983726510982650198275609182375609187236510982356109827509862"
                                "3140985671294567190264790263190756290824609182356907123056918276091837561097812365908"
                                "1726509817365109823561097235690719823560987126509812376598712635098712365098475610982"
                                "3756098135760981273965019827609182375609182756098123765098123765081273650982173650982"
                                "1735091823756109821736509182763905109286510982653109826501982653109835601928375609182"
                                "5673098217536098217560918273560982165309821753609817365098271365098217365091827651098"
                                "2735610982735610982735610982713509182756310982715630982735610982175631098275610982735"
                                "6091827561098273650981253609821753609821765310982756309821763509182756309821756309182"
                                "7563098217563109827653091827563098217653091827650918273560982716350918273561098217536"
                                "0918276350918276530982176531098275609182756309827156310982735609182753609827153609182"
                                "7563098271563908127563091827563109827156309827153609827365109827153098271536098271536"
                                "0918275631098271536098271560918275630982716530918275630982715360918275360982715360918"
                                "2753609827153609182756309827156309182756310982715630982715360982715360982715360982715"
                                "3609827153609827156309827153609821765309182756091827356098271653091827356098271563091"
                                "8275630982716350918273561098271536098271536098271536098271563098271536098271536098271"
                                "536098271563098271536098271536098271536"
                                "198264513982765396485719650498261498564729856318926451982754398672495874691824659645"
                                "1092348576918246513984659103485721634589126458619584619051982671298642158641958264819"
                                "0519826492851648192519856419258612541685159172360917510925761093561879512865908275198"
                                "2651982563012895610769517352609182751093560198257610928576510481965234109182954019825"
                                "7610935761093571092387540619275610395718290513769285109237856091827569104857109358109"
                                "3857910671958109375610935865109834571986201958109246581398246396857109651089639186275"
                                "1238961023875609182763509182703618927450916837259013650296857109258607129845760918576"
                                "5109384659103865791083659127490287596102935761092375819627109382651098346598163450983"
                                "5109384750198273561907351098627531098465109384750983610984675109384750984610987456109"
                                "3847561098475260193847609187326501982735601985761904782659013487569102738957109184756"
                                "9018743691872634509287561098274510938746509827536019827536091827650918327650918265091"
                                "8237560918275961083726510983726510982650198275609182375609187236510982356109827509862"
                                "3140985671294567190264790263190756290824609182356907123056918276091837561097812365908"
                                "1726509817365109823561097235690719823560987126509812376598712635098712365098475610982"
                                "3756098135760981273965019827609182375609182756098123765098123765081273650982173650982"
                                "1735091823756109821736509182763905109286510982653109826501982653109835601928375609182"
                                "5673098217536098217560918273560982165309821753609817365098271365098217365091827651098"
                                "2735610982735610982735610982713509182756310982715630982735610982175631098275610982735"
                                "6091827561098273650981253609821753609821765310982756309821763509182756309821756309182"
                                "7563098217563109827653091827563098217653091827650918273560982716350918273561098217536"
                                "0918276350918276530982176531098275609182756309827156310982735609182753609827153609182"
                                "7563098271563908127563091827563109827156309827153609827365109827153098271536098271536"
                                "0918275631098271536098271560918275630982716530918275630982715360918275360982715360918"
                                "2753609827153609182756309827156309182756310982715630982715360982715360982715360982715"
                                "3609827153609827156309827153609821765309182756091827356098271653091827356098271563091"
                                "8275630982716350918273561098271536098271536098271536098271563098271536098271536098271"
                                "536098271563098271536098271536098271536"
                                "198264513982765396485719650498261498564729856318926451982754398672495874691824659645"
                                "1092348576918246513984659103485721634589126458619584619051982671298642158641958264819"
                                "0519826492851648192519856419258612541685159172360917510925761093561879512865908275198"
                                "2651982563012895610769517352609182751093560198257610928576510481965234109182954019825"
                                "7610935761093571092387540619275610395718290513769285109237856091827569104857109358109"
                                "3857910671958109375610935865109834571986201958109246581398246396857109651089639186275"
                                "1238961023875609182763509182703618927450916837259013650296857109258607129845760918576"
                                "5109384659103865791083659127490287596102935761092375819627109382651098346598163450983"
                                "5109384750198273561907351098627531098465109384750983610984675109384750984610987456109"
                                "3847561098475260193847609187326501982735601985761904782659013487569102738957109184756"
                                "9018743691872634509287561098274510938746509827536019827536091827650918327650918265091"
                                "8237560918275961083726510983726510982650198275609182375609187236510982356109827509862"
                                "3140985671294567190264790263190756290824609182356907123056918276091837561097812365908"
                                "1726509817365109823561097235690719823560987126509812376598712635098712365098475610982"
                                "3756098135760981273965019827609182375609182756098123765098123765081273650982173650982"
                                "1735091823756109821736509182763905109286510982653109826501982653109835601928375609182"
                                "5673098217536098217560918273560982165309821753609817365098271365098217365091827651098"
                                "2735610982735610982735610982713509182756310982715630982735610982175631098275610982735"
                                "6091827561098273650981253609821753609821765310982756309821763509182756309821756309182"
                                "7563098217563109827653091827563098217653091827650918273560982716350918273561098217536"
                                "0918276350918276530982176531098275609182756309827156310982735609182753609827153609182"
                                "7563098271563908127563091827563109827156309827153609827365109827153098271536098271536"
                                "0918275631098271536098271560918275630982716530918275630982715360918275360982715360918"
                                "2753609827153609182756309827156309182756310982715630982715360982715360982715360982715"
                                "3609827153609827156309827153609821765309182756091827356098271653091827356098271563091"
                                "8275630982716350918273561098271536098271536098271536098271563098271536098271536098271"
                                "536098271563098271536098271536098271536"
                                "198264513982765396485719650498261498564729856318926451982754398672495874691824659645"
                                "1092348576918246513984659103485721634589126458619584619051982671298642158641958264819"
                                "0519826492851648192519856419258612541685159172360917510925761093561879512865908275198"
                                "2651982563012895610769517352609182751093560198257610928576510481965234109182954019825"
                                "7610935761093571092387540619275610395718290513769285109237856091827569104857109358109"
                                "3857910671958109375610935865109834571986201958109246581398246396857109651089639186275"
                                "1238961023875609182763509182703618927450916837259013650296857109258607129845760918576"
                                "5109384659103865791083659127490287596102935761092375819627109382651098346598163450983"
                                "5109384750198273561907351098627531098465109384750983610984675109384750984610987456109"
                                "3847561098475260193847609187326501982735601985761904782659013487569102738957109184756"
                                "9018743691872634509287561098274510938746509827536019827536091827650918327650918265091"
                                "8237560918275961083726510983726510982650198275609182375609187236510982356109827509862"
                                "3140985671294567190264790263190756290824609182356907123056918276091837561097812365908"
                                "1726509817365109823561097235690719823560987126509812376598712635098712365098475610982"
                                "3756098135760981273965019827609182375609182756098123765098123765081273650982173650982"
                                "1735091823756109821736509182763905109286510982653109826501982653109835601928375609182"
                                "5673098217536098217560918273560982165309821753609817365098271365098217365091827651098"
                                "2735610982735610982735610982713509182756310982715630982735610982175631098275610982735"
                                "6091827561098273650981253609821753609821765310982756309821763509182756309821756309182"
                                "7563098217563109827653091827563098217653091827650918273560982716350918273561098217536"
                                "0918276350918276530982176531098275609182756309827156310982735609182753609827153609182"
                                "7563098271563908127563091827563109827156309827153609827365109827153098271536098271536"
                                "0918275631098271536098271560918275630982716530918275630982715360918275360982715360918"
                                "2753609827153609182756309827156309182756310982715630982715360982715360982715360982715"
                                "3609827153609827156309827153609821765309182756091827356098271653091827356098271563091"
                                "8275630982716350918273561098271536098271536098271536098271563098271536098271536098271"
                                "536098271563098271536098271536098271536"
                                "198264513982765396485719650498261498564729856318926451982754398672495874691824659645"
                                "1092348576918246513984659103485721634589126458619584619051982671298642158641958264819"
                                "0519826492851648192519856419258612541685159172360917510925761093561879512865908275198"
                                "2651982563012895610769517352609182751093560198257610928576510481965234109182954019825"
                                "7610935761093571092387540619275610395718290513769285109237856091827569104857109358109"
                                "3857910671958109375610935865109834571986201958109246581398246396857109651089639186275"
                                "1238961023875609182763509182703618927450916837259013650296857109258607129845760918576"
                                "5109384659103865791083659127490287596102935761092375819627109382651098346598163450983"
                                "5109384750198273561907351098627531098465109384750983610984675109384750984610987456109"
                                "3847561098475260193847609187326501982735601985761904782659013487569102738957109184756"
                                "9018743691872634509287561098274510938746509827536019827536091827650918327650918265091"
                                "8237560918275961083726510983726510982650198275609182375609187236510982356109827509862"
                                "3140985671294567190264790263190756290824609182356907123056918276091837561097812365908"
                                "1726509817365109823561097235690719823560987126509812376598712635098712365098475610982"
                                "3756098135760981273965019827609182375609182756098123765098123765081273650982173650982"
                                "1735091823756109821736509182763905109286510982653109826501982653109835601928375609182"
                                "5673098217536098217560918273560982165309821753609817365098271365098217365091827651098"
                                "2735610982735610982735610982713509182756310982715630982735610982175631098275610982735"
                                "6091827561098273650981253609821753609821765310982756309821763509182756309821756309182"
                                "7563098217563109827653091827563098217653091827650918273560982716350918273561098217536"
                                "0918276350918276530982176531098275609182756309827156310982735609182753609827153609182"
                                "7563098271563908127563091827563109827156309827153609827365109827153098271536098271536"
                                "0918275631098271536098271560918275630982716530918275630982715360918275360982715360918"
                                "2753609827153609182756309827156309182756310982715630982715360982715360982715360982715"
                                "3609827153609827156309827153609821765309182756091827356098271653091827356098271563091"
                                "8275630982716350918273561098271536098271536098271536098271563098271536098271536098271"
                                "536098271563098271536098271536098271536"
                                "198264513982765396485719650498261498564729856318926451982754398672495874691824659645"
                                "1092348576918246513984659103485721634589126458619584619051982671298642158641958264819"
                                "0519826492851648192519856419258612541685159172360917510925761093561879512865908275198"
                                "2651982563012895610769517352609182751093560198257610928576510481965234109182954019825"
                                "7610935761093571092387540619275610395718290513769285109237856091827569104857109358109"
                                "3857910671958109375610935865109834571986201958109246581398246396857109651089639186275"
                                "1238961023875609182763509182703618927450916837259013650296857109258607129845760918576"
                                "5109384659103865791083659127490287596102935761092375819627109382651098346598163450983"
                                "5109384750198273561907351098627531098465109384750983610984675109384750984610987456109"
                                "3847561098475260193847609187326501982735601985761904782659013487569102738957109184756"
                                "9018743691872634509287561098274510938746509827536019827536091827650918327650918265091"
                                "8237560918275961083726510983726510982650198275609182375609187236510982356109827509862"
                                "3140985671294567190264790263190756290824609182356907123056918276091837561097812365908"
                                "1726509817365109823561097235690719823560987126509812376598712635098712365098475610982"
                                "3756098135760981273965019827609182375609182756098123765098123765081273650982173650982"
                                "1735091823756109821736509182763905109286510982653109826501982653109835601928375609182"
                                "5673098217536098217560918273560982165309821753609817365098271365098217365091827651098"
                                "2735610982735610982735610982713509182756310982715630982735610982175631098275610982735"
                                "6091827561098273650981253609821753609821765310982756309821763509182756309821756309182"
                                "7563098217563109827653091827563098217653091827650918273560982716350918273561098217536"
                                "0918276350918276530982176531098275609182756309827156310982735609182753609827153609182"
                                "7563098271563908127563091827563109827156309827153609827365109827153098271536098271536"
                                "0918275631098271536098271560918275630982716530918275630982715360918275360982715360918"
                                "2753609827153609182756309827156309182756310982715630982715360982715360982715360982715"
                                "3609827153609827156309827153609821765309182756091827356098271653091827356098271563091"
                                "8275630982716350918273561098271536098271536098271536098271563098271536098271536098271"
                                "536098271563098271536098271536098271536"
                                "198264513982765396485719650498261498564729856318926451982754398672495874691824659645"
                                "1092348576918246513984659103485721634589126458619584619051982671298642158641958264819"
                                "0519826492851648192519856419258612541685159172360917510925761093561879512865908275198"
                                "2651982563012895610769517352609182751093560198257610928576510481965234109182954019825"
                                "7610935761093571092387540619275610395718290513769285109237856091827569104857109358109"
                                "3857910671958109375610935865109834571986201958109246581398246396857109651089639186275"
                                "1238961023875609182763509182703618927450916837259013650296857109258607129845760918576"
                                "5109384659103865791083659127490287596102935761092375819627109382651098346598163450983"
                                "5109384750198273561907351098627531098465109384750983610984675109384750984610987456109"
                                "3847561098475260193847609187326501982735601985761904782659013487569102738957109184756"
                                "9018743691872634509287561098274510938746509827536019827536091827650918327650918265091"
                                "8237560918275961083726510983726510982650198275609182375609187236510982356109827509862"
                                "3140985671294567190264790263190756290824609182356907123056918276091837561097812365908"
                                "1726509817365109823561097235690719823560987126509812376598712635098712365098475610982"
                                "3756098135760981273965019827609182375609182756098123765098123765081273650982173650982"
                                "1735091823756109821736509182763905109286510982653109826501982653109835601928375609182"
                                "5673098217536098217560918273560982165309821753609817365098271365098217365091827651098"
                                "2735610982735610982735610982713509182756310982715630982735610982175631098275610982735"
                                "6091827561098273650981253609821753609821765310982756309821763509182756309821756309182"
                                "7563098217563109827653091827563098217653091827650918273560982716350918273561098217536"
                                "0918276350918276530982176531098275609182756309827156310982735609182753609827153609182"
                                "7563098271563908127563091827563109827156309827153609827365109827153098271536098271536"
                                "0918275631098271536098271560918275630982716530918275630982715360918275360982715360918"
                                "2753609827153609182756309827156309182756310982715630982715360982715360982715360982715"
                                "3609827153609827156309827153609821765309182756091827356098271653091827356098271563091"
                                "8275630982716350918273561098271536098271536098271536098271563098271536098271536098271"
                                "536098271563098271536098271536098271536"
                                "198264513982765396485719650498261498564729856318926451982754398672495874691824659645"
                                "1092348576918246513984659103485721634589126458619584619051982671298642158641958264819"
                                "0519826492851648192519856419258612541685159172360917510925761093561879512865908275198"
                                "2651982563012895610769517352609182751093560198257610928576510481965234109182954019825"
                                "7610935761093571092387540619275610395718290513769285109237856091827569104857109358109"
                                "3857910671958109375610935865109834571986201958109246581398246396857109651089639186275"
                                "1238961023875609182763509182703618927450916837259013650296857109258607129845760918576"
                                "5109384659103865791083659127490287596102935761092375819627109382651098346598163450983"
                                "5109384750198273561907351098627531098465109384750983610984675109384750984610987456109"
                                "3847561098475260193847609187326501982735601985761904782659013487569102738957109184756"
                                "9018743691872634509287561098274510938746509827536019827536091827650918327650918265091"
                                "8237560918275961083726510983726510982650198275609182375609187236510982356109827509862"
                                "3140985671294567190264790263190756290824609182356907123056918276091837561097812365908"
                                "1726509817365109823561097235690719823560987126509812376598712635098712365098475610982"
                                "3756098135760981273965019827609182375609182756098123765098123765081273650982173650982"
                                "1735091823756109821736509182763905109286510982653109826501982653109835601928375609182"
                                "5673098217536098217560918273560982165309821753609817365098271365098217365091827651098"
                                "2735610982735610982735610982713509182756310982715630982735610982175631098275610982735"
                                "6091827561098273650981253609821753609821765310982756309821763509182756309821756309182"
                                "7563098217563109827653091827563098217653091827650918273560982716350918273561098217536"
                                "0918276350918276530982176531098275609182756309827156310982735609182753609827153609182"
                                "7563098271563908127563091827563109827156309827153609827365109827153098271536098271536"
                                "0918275631098271536098271560918275630982716530918275630982715360918275360982715360918"
                                "2753609827153609182756309827156309182756310982715630982715360982715360982715360982715"
                                "3609827153609827156309827153609821765309182756091827356098271653091827356098271563091"
                                "8275630982716350918273561098271536098271536098271536098271563098271536098271536098271"
                                "536098271563098271536098271536098271536"
                                );

    test_strtod_routines(HUGE_VAL, "1e310");
    test_strtod_routines(-HUGE_VALF, "-1e40");
    test_strtod_routines(0.0, "1e-500");
    test_strtod_routines(-0.0F, "-1e-50");
    test_strtod_routines(1.5738291047382910487, "1.5738291047382910487");
    test_strtod_routines(-1.5738291047382910487F, "-1.5738291047382910487");

    // Every power
    spot_check(1.7e+308, "1.7e+308", boost::charconv::chars_format::scientific);
    spot_check(1.7e+307, "1.7e+307", boost::charconv::chars_format::scientific);
    spot_check(1.7e+306, "1.7e+306", boost::charconv::chars_format::scientific);
    spot_check(1.7e+305, "1.7e+305", boost::charconv::chars_format::scientific);
    spot_check(1.7e+304, "1.7e+304", boost::charconv::chars_format::scientific);
    spot_check(1.7e+303, "1.7e+303", boost::charconv::chars_format::scientific);
    spot_check(1.7e+302, "1.7e+302", boost::charconv::chars_format::scientific);
    spot_check(1.7e+301, "1.7e+301", boost::charconv::chars_format::scientific);
    spot_check(1.7e+300, "1.7e+300", boost::charconv::chars_format::scientific);
    spot_check(1.7e+299, "1.7e+299", boost::charconv::chars_format::scientific);
    spot_check(1.7e+298, "1.7e+298", boost::charconv::chars_format::scientific);
    spot_check(1.7e+297, "1.7e+297", boost::charconv::chars_format::scientific);
    spot_check(1.7e+296, "1.7e+296", boost::charconv::chars_format::scientific);
    spot_check(1.7e+295, "1.7e+295", boost::charconv::chars_format::scientific);
    spot_check(1.7e+294, "1.7e+294", boost::charconv::chars_format::scientific);
    spot_check(1.7e+293, "1.7e+293", boost::charconv::chars_format::scientific);
    spot_check(1.7e+292, "1.7e+292", boost::charconv::chars_format::scientific);
    spot_check(1.7e+291, "1.7e+291", boost::charconv::chars_format::scientific);
    spot_check(1.7e+290, "1.7e+290", boost::charconv::chars_format::scientific);
    spot_check(1.7e+289, "1.7e+289", boost::charconv::chars_format::scientific);
    spot_check(1.7e+288, "1.7e+288", boost::charconv::chars_format::scientific);
    spot_check(1.7e+287, "1.7e+287", boost::charconv::chars_format::scientific);
    spot_check(1.7e+286, "1.7e+286", boost::charconv::chars_format::scientific);
    spot_check(1.7e+285, "1.7e+285", boost::charconv::chars_format::scientific);
    spot_check(1.7e+284, "1.7e+284", boost::charconv::chars_format::scientific);
    spot_check(1.7e+283, "1.7e+283", boost::charconv::chars_format::scientific);
    spot_check(1.7e+282, "1.7e+282", boost::charconv::chars_format::scientific);
    spot_check(1.7e+281, "1.7e+281", boost::charconv::chars_format::scientific);
    spot_check(1.7e+280, "1.7e+280", boost::charconv::chars_format::scientific);
    spot_check(1.7e+279, "1.7e+279", boost::charconv::chars_format::scientific);
    spot_check(1.7e+278, "1.7e+278", boost::charconv::chars_format::scientific);
    spot_check(1.7e+277, "1.7e+277", boost::charconv::chars_format::scientific);
    spot_check(1.7e+276, "1.7e+276", boost::charconv::chars_format::scientific);
    spot_check(1.7e+275, "1.7e+275", boost::charconv::chars_format::scientific);
    spot_check(1.7e+274, "1.7e+274", boost::charconv::chars_format::scientific);
    spot_check(1.7e+273, "1.7e+273", boost::charconv::chars_format::scientific);
    spot_check(1.7e+272, "1.7e+272", boost::charconv::chars_format::scientific);
    spot_check(1.7e+271, "1.7e+271", boost::charconv::chars_format::scientific);
    spot_check(1.7e+270, "1.7e+270", boost::charconv::chars_format::scientific);
    spot_check(1.7e+269, "1.7e+269", boost::charconv::chars_format::scientific);
    spot_check(1.7e+268, "1.7e+268", boost::charconv::chars_format::scientific);
    spot_check(1.7e+267, "1.7e+267", boost::charconv::chars_format::scientific);
    spot_check(1.7e+266, "1.7e+266", boost::charconv::chars_format::scientific);
    spot_check(1.7e+265, "1.7e+265", boost::charconv::chars_format::scientific);
    spot_check(1.7e+264, "1.7e+264", boost::charconv::chars_format::scientific);
    spot_check(1.7e+263, "1.7e+263", boost::charconv::chars_format::scientific);
    spot_check(1.7e+262, "1.7e+262", boost::charconv::chars_format::scientific);
    spot_check(1.7e+261, "1.7e+261", boost::charconv::chars_format::scientific);
    spot_check(1.7e+260, "1.7e+260", boost::charconv::chars_format::scientific);
    spot_check(1.7e+259, "1.7e+259", boost::charconv::chars_format::scientific);
    spot_check(1.7e+258, "1.7e+258", boost::charconv::chars_format::scientific);
    spot_check(1.7e+257, "1.7e+257", boost::charconv::chars_format::scientific);
    spot_check(1.7e+256, "1.7e+256", boost::charconv::chars_format::scientific);
    spot_check(1.7e+255, "1.7e+255", boost::charconv::chars_format::scientific);
    spot_check(1.7e+254, "1.7e+254", boost::charconv::chars_format::scientific);
    spot_check(1.7e+253, "1.7e+253", boost::charconv::chars_format::scientific);
    spot_check(1.7e+252, "1.7e+252", boost::charconv::chars_format::scientific);
    spot_check(1.7e+251, "1.7e+251", boost::charconv::chars_format::scientific);
    spot_check(1.7e+250, "1.7e+250", boost::charconv::chars_format::scientific);
    spot_check(1.7e+249, "1.7e+249", boost::charconv::chars_format::scientific);
    spot_check(1.7e+248, "1.7e+248", boost::charconv::chars_format::scientific);
    spot_check(1.7e+247, "1.7e+247", boost::charconv::chars_format::scientific);
    spot_check(1.7e+246, "1.7e+246", boost::charconv::chars_format::scientific);
    spot_check(1.7e+245, "1.7e+245", boost::charconv::chars_format::scientific);
    spot_check(1.7e+244, "1.7e+244", boost::charconv::chars_format::scientific);
    spot_check(1.7e+243, "1.7e+243", boost::charconv::chars_format::scientific);
    spot_check(1.7e+242, "1.7e+242", boost::charconv::chars_format::scientific);
    spot_check(1.7e+241, "1.7e+241", boost::charconv::chars_format::scientific);
    spot_check(1.7e+240, "1.7e+240", boost::charconv::chars_format::scientific);
    spot_check(1.7e+239, "1.7e+239", boost::charconv::chars_format::scientific);
    spot_check(1.7e+238, "1.7e+238", boost::charconv::chars_format::scientific);
    spot_check(1.7e+237, "1.7e+237", boost::charconv::chars_format::scientific);
    spot_check(1.7e+236, "1.7e+236", boost::charconv::chars_format::scientific);
    spot_check(1.7e+235, "1.7e+235", boost::charconv::chars_format::scientific);
    spot_check(1.7e+234, "1.7e+234", boost::charconv::chars_format::scientific);
    spot_check(1.7e+233, "1.7e+233", boost::charconv::chars_format::scientific);
    spot_check(1.7e+232, "1.7e+232", boost::charconv::chars_format::scientific);
    spot_check(1.7e+231, "1.7e+231", boost::charconv::chars_format::scientific);
    spot_check(1.7e+230, "1.7e+230", boost::charconv::chars_format::scientific);
    spot_check(1.7e+229, "1.7e+229", boost::charconv::chars_format::scientific);
    spot_check(1.7e+228, "1.7e+228", boost::charconv::chars_format::scientific);
    spot_check(1.7e+227, "1.7e+227", boost::charconv::chars_format::scientific);
    spot_check(1.7e+226, "1.7e+226", boost::charconv::chars_format::scientific);
    spot_check(1.7e+225, "1.7e+225", boost::charconv::chars_format::scientific);
    spot_check(1.7e+224, "1.7e+224", boost::charconv::chars_format::scientific);
    spot_check(1.7e+223, "1.7e+223", boost::charconv::chars_format::scientific);
    spot_check(1.7e+222, "1.7e+222", boost::charconv::chars_format::scientific);
    spot_check(1.7e+221, "1.7e+221", boost::charconv::chars_format::scientific);
    spot_check(1.7e+220, "1.7e+220", boost::charconv::chars_format::scientific);
    spot_check(1.7e+219, "1.7e+219", boost::charconv::chars_format::scientific);
    spot_check(1.7e+218, "1.7e+218", boost::charconv::chars_format::scientific);
    spot_check(1.7e+217, "1.7e+217", boost::charconv::chars_format::scientific);
    spot_check(1.7e+216, "1.7e+216", boost::charconv::chars_format::scientific);
    spot_check(1.7e+215, "1.7e+215", boost::charconv::chars_format::scientific);
    spot_check(1.7e+214, "1.7e+214", boost::charconv::chars_format::scientific);
    spot_check(1.7e+213, "1.7e+213", boost::charconv::chars_format::scientific);
    spot_check(1.7e+212, "1.7e+212", boost::charconv::chars_format::scientific);
    spot_check(1.7e+211, "1.7e+211", boost::charconv::chars_format::scientific);
    spot_check(1.7e+210, "1.7e+210", boost::charconv::chars_format::scientific);
    spot_check(1.7e+209, "1.7e+209", boost::charconv::chars_format::scientific);
    spot_check(1.7e+208, "1.7e+208", boost::charconv::chars_format::scientific);
    spot_check(1.7e+207, "1.7e+207", boost::charconv::chars_format::scientific);
    spot_check(1.7e+206, "1.7e+206", boost::charconv::chars_format::scientific);
    spot_check(1.7e+205, "1.7e+205", boost::charconv::chars_format::scientific);
    spot_check(1.7e+204, "1.7e+204", boost::charconv::chars_format::scientific);
    spot_check(1.7e+203, "1.7e+203", boost::charconv::chars_format::scientific);
    spot_check(1.7e+202, "1.7e+202", boost::charconv::chars_format::scientific);
    spot_check(1.7e+201, "1.7e+201", boost::charconv::chars_format::scientific);
    spot_check(1.7e+200, "1.7e+200", boost::charconv::chars_format::scientific);

    spot_check(1.7e+199, "1.7e+199", boost::charconv::chars_format::scientific);
    spot_check(1.7e+198, "1.7e+198", boost::charconv::chars_format::scientific);
    spot_check(1.7e+197, "1.7e+197", boost::charconv::chars_format::scientific);
    spot_check(1.7e+196, "1.7e+196", boost::charconv::chars_format::scientific);
    spot_check(1.7e+195, "1.7e+195", boost::charconv::chars_format::scientific);
    spot_check(1.7e+194, "1.7e+194", boost::charconv::chars_format::scientific);
    spot_check(1.7e+193, "1.7e+193", boost::charconv::chars_format::scientific);
    spot_check(1.7e+192, "1.7e+192", boost::charconv::chars_format::scientific);
    spot_check(1.7e+191, "1.7e+191", boost::charconv::chars_format::scientific);
    spot_check(1.7e+190, "1.7e+190", boost::charconv::chars_format::scientific);
    spot_check(1.7e+189, "1.7e+189", boost::charconv::chars_format::scientific);
    spot_check(1.7e+188, "1.7e+188", boost::charconv::chars_format::scientific);
    spot_check(1.7e+187, "1.7e+187", boost::charconv::chars_format::scientific);
    spot_check(1.7e+186, "1.7e+186", boost::charconv::chars_format::scientific);
    spot_check(1.7e+185, "1.7e+185", boost::charconv::chars_format::scientific);
    spot_check(1.7e+184, "1.7e+184", boost::charconv::chars_format::scientific);
    spot_check(1.7e+183, "1.7e+183", boost::charconv::chars_format::scientific);
    spot_check(1.7e+182, "1.7e+182", boost::charconv::chars_format::scientific);
    spot_check(1.7e+181, "1.7e+181", boost::charconv::chars_format::scientific);
    spot_check(1.7e+180, "1.7e+180", boost::charconv::chars_format::scientific);
    spot_check(1.7e+179, "1.7e+179", boost::charconv::chars_format::scientific);
    spot_check(1.7e+178, "1.7e+178", boost::charconv::chars_format::scientific);
    spot_check(1.7e+177, "1.7e+177", boost::charconv::chars_format::scientific);
    spot_check(1.7e+176, "1.7e+176", boost::charconv::chars_format::scientific);
    spot_check(1.7e+175, "1.7e+175", boost::charconv::chars_format::scientific);
    spot_check(1.7e+174, "1.7e+174", boost::charconv::chars_format::scientific);
    spot_check(1.7e+173, "1.7e+173", boost::charconv::chars_format::scientific);
    spot_check(1.7e+172, "1.7e+172", boost::charconv::chars_format::scientific);
    spot_check(1.7e+171, "1.7e+171", boost::charconv::chars_format::scientific);
    spot_check(1.7e+170, "1.7e+170", boost::charconv::chars_format::scientific);
    spot_check(1.7e+169, "1.7e+169", boost::charconv::chars_format::scientific);
    spot_check(1.7e+168, "1.7e+168", boost::charconv::chars_format::scientific);
    spot_check(1.7e+167, "1.7e+167", boost::charconv::chars_format::scientific);
    spot_check(1.7e+166, "1.7e+166", boost::charconv::chars_format::scientific);
    spot_check(1.7e+165, "1.7e+165", boost::charconv::chars_format::scientific);
    spot_check(1.7e+164, "1.7e+164", boost::charconv::chars_format::scientific);
    spot_check(1.7e+163, "1.7e+163", boost::charconv::chars_format::scientific);
    spot_check(1.7e+162, "1.7e+162", boost::charconv::chars_format::scientific);
    spot_check(1.7e+161, "1.7e+161", boost::charconv::chars_format::scientific);
    spot_check(1.7e+160, "1.7e+160", boost::charconv::chars_format::scientific);
    spot_check(1.7e+159, "1.7e+159", boost::charconv::chars_format::scientific);
    spot_check(1.7e+158, "1.7e+158", boost::charconv::chars_format::scientific);
    spot_check(1.7e+157, "1.7e+157", boost::charconv::chars_format::scientific);
    spot_check(1.7e+156, "1.7e+156", boost::charconv::chars_format::scientific);
    spot_check(1.7e+155, "1.7e+155", boost::charconv::chars_format::scientific);
    spot_check(1.7e+154, "1.7e+154", boost::charconv::chars_format::scientific);
    spot_check(1.7e+153, "1.7e+153", boost::charconv::chars_format::scientific);
    spot_check(1.7e+152, "1.7e+152", boost::charconv::chars_format::scientific);
    spot_check(1.7e+151, "1.7e+151", boost::charconv::chars_format::scientific);
    spot_check(1.7e+150, "1.7e+150", boost::charconv::chars_format::scientific);
    spot_check(1.7e+149, "1.7e+149", boost::charconv::chars_format::scientific);
    spot_check(1.7e+148, "1.7e+148", boost::charconv::chars_format::scientific);
    spot_check(1.7e+147, "1.7e+147", boost::charconv::chars_format::scientific);
    spot_check(1.7e+146, "1.7e+146", boost::charconv::chars_format::scientific);
    spot_check(1.7e+145, "1.7e+145", boost::charconv::chars_format::scientific);
    spot_check(1.7e+144, "1.7e+144", boost::charconv::chars_format::scientific);
    spot_check(1.7e+143, "1.7e+143", boost::charconv::chars_format::scientific);
    spot_check(1.7e+142, "1.7e+142", boost::charconv::chars_format::scientific);
    spot_check(1.7e+141, "1.7e+141", boost::charconv::chars_format::scientific);
    spot_check(1.7e+140, "1.7e+140", boost::charconv::chars_format::scientific);
    spot_check(1.7e+139, "1.7e+139", boost::charconv::chars_format::scientific);
    spot_check(1.7e+138, "1.7e+138", boost::charconv::chars_format::scientific);
    spot_check(1.7e+137, "1.7e+137", boost::charconv::chars_format::scientific);
    spot_check(1.7e+136, "1.7e+136", boost::charconv::chars_format::scientific);
    spot_check(1.7e+135, "1.7e+135", boost::charconv::chars_format::scientific);
    spot_check(1.7e+134, "1.7e+134", boost::charconv::chars_format::scientific);
    spot_check(1.7e+133, "1.7e+133", boost::charconv::chars_format::scientific);
    spot_check(1.7e+132, "1.7e+132", boost::charconv::chars_format::scientific);
    spot_check(1.7e+131, "1.7e+131", boost::charconv::chars_format::scientific);
    spot_check(1.7e+130, "1.7e+130", boost::charconv::chars_format::scientific);
    spot_check(1.7e+129, "1.7e+129", boost::charconv::chars_format::scientific);
    spot_check(1.7e+128, "1.7e+128", boost::charconv::chars_format::scientific);
    spot_check(1.7e+127, "1.7e+127", boost::charconv::chars_format::scientific);
    spot_check(1.7e+126, "1.7e+126", boost::charconv::chars_format::scientific);
    spot_check(1.7e+125, "1.7e+125", boost::charconv::chars_format::scientific);
    spot_check(1.7e+124, "1.7e+124", boost::charconv::chars_format::scientific);
    spot_check(1.7e+123, "1.7e+123", boost::charconv::chars_format::scientific);
    spot_check(1.7e+122, "1.7e+122", boost::charconv::chars_format::scientific);
    spot_check(1.7e+121, "1.7e+121", boost::charconv::chars_format::scientific);
    spot_check(1.7e+120, "1.7e+120", boost::charconv::chars_format::scientific);
    spot_check(1.7e+119, "1.7e+119", boost::charconv::chars_format::scientific);
    spot_check(1.7e+118, "1.7e+118", boost::charconv::chars_format::scientific);
    spot_check(1.7e+117, "1.7e+117", boost::charconv::chars_format::scientific);
    spot_check(1.7e+116, "1.7e+116", boost::charconv::chars_format::scientific);
    spot_check(1.7e+115, "1.7e+115", boost::charconv::chars_format::scientific);
    spot_check(1.7e+114, "1.7e+114", boost::charconv::chars_format::scientific);
    spot_check(1.7e+113, "1.7e+113", boost::charconv::chars_format::scientific);
    spot_check(1.7e+112, "1.7e+112", boost::charconv::chars_format::scientific);
    spot_check(1.7e+111, "1.7e+111", boost::charconv::chars_format::scientific);
    spot_check(1.7e+110, "1.7e+110", boost::charconv::chars_format::scientific);
    spot_check(1.7e+109, "1.7e+109", boost::charconv::chars_format::scientific);
    spot_check(1.7e+108, "1.7e+108", boost::charconv::chars_format::scientific);
    spot_check(1.7e+107, "1.7e+107", boost::charconv::chars_format::scientific);
    spot_check(1.7e+106, "1.7e+106", boost::charconv::chars_format::scientific);
    spot_check(1.7e+105, "1.7e+105", boost::charconv::chars_format::scientific);
    spot_check(1.7e+104, "1.7e+104", boost::charconv::chars_format::scientific);
    spot_check(1.7e+103, "1.7e+103", boost::charconv::chars_format::scientific);
    spot_check(1.7e+102, "1.7e+102", boost::charconv::chars_format::scientific);
    spot_check(1.7e+101, "1.7e+101", boost::charconv::chars_format::scientific);
    spot_check(1.7e+100, "1.7e+100", boost::charconv::chars_format::scientific);

    spot_check(1.7e+99, "1.7e+99", boost::charconv::chars_format::scientific);
    spot_check(1.7e+98, "1.7e+98", boost::charconv::chars_format::scientific);
    spot_check(1.7e+97, "1.7e+97", boost::charconv::chars_format::scientific);
    spot_check(1.7e+96, "1.7e+96", boost::charconv::chars_format::scientific);
    spot_check(1.7e+95, "1.7e+95", boost::charconv::chars_format::scientific);
    spot_check(1.7e+94, "1.7e+94", boost::charconv::chars_format::scientific);
    spot_check(1.7e+93, "1.7e+93", boost::charconv::chars_format::scientific);
    spot_check(1.7e+92, "1.7e+92", boost::charconv::chars_format::scientific);
    spot_check(1.7e+91, "1.7e+91", boost::charconv::chars_format::scientific);
    spot_check(1.7e+90, "1.7e+90", boost::charconv::chars_format::scientific);
    spot_check(1.7e+89, "1.7e+89", boost::charconv::chars_format::scientific);
    spot_check(1.7e+88, "1.7e+88", boost::charconv::chars_format::scientific);
    spot_check(1.7e+87, "1.7e+87", boost::charconv::chars_format::scientific);
    spot_check(1.7e+86, "1.7e+86", boost::charconv::chars_format::scientific);
    spot_check(1.7e+85, "1.7e+85", boost::charconv::chars_format::scientific);
    spot_check(1.7e+84, "1.7e+84", boost::charconv::chars_format::scientific);
    spot_check(1.7e+83, "1.7e+83", boost::charconv::chars_format::scientific);
    spot_check(1.7e+82, "1.7e+82", boost::charconv::chars_format::scientific);
    spot_check(1.7e+81, "1.7e+81", boost::charconv::chars_format::scientific);
    spot_check(1.7e+80, "1.7e+80", boost::charconv::chars_format::scientific);
    spot_check(1.7e+79, "1.7e+79", boost::charconv::chars_format::scientific);
    spot_check(1.7e+78, "1.7e+78", boost::charconv::chars_format::scientific);
    spot_check(1.7e+77, "1.7e+77", boost::charconv::chars_format::scientific);
    spot_check(1.7e+76, "1.7e+76", boost::charconv::chars_format::scientific);
    spot_check(1.7e+75, "1.7e+75", boost::charconv::chars_format::scientific);
    spot_check(1.7e+74, "1.7e+74", boost::charconv::chars_format::scientific);
    spot_check(1.7e+73, "1.7e+73", boost::charconv::chars_format::scientific);
    spot_check(1.7e+72, "1.7e+72", boost::charconv::chars_format::scientific);
    spot_check(1.7e+71, "1.7e+71", boost::charconv::chars_format::scientific);
    spot_check(1.7e+70, "1.7e+70", boost::charconv::chars_format::scientific);
    spot_check(1.7e+69, "1.7e+69", boost::charconv::chars_format::scientific);
    spot_check(1.7e+68, "1.7e+68", boost::charconv::chars_format::scientific);
    spot_check(1.7e+67, "1.7e+67", boost::charconv::chars_format::scientific);
    spot_check(1.7e+66, "1.7e+66", boost::charconv::chars_format::scientific);
    spot_check(1.7e+65, "1.7e+65", boost::charconv::chars_format::scientific);
    spot_check(1.7e+64, "1.7e+64", boost::charconv::chars_format::scientific);
    spot_check(1.7e+63, "1.7e+63", boost::charconv::chars_format::scientific);
    spot_check(1.7e+62, "1.7e+62", boost::charconv::chars_format::scientific);
    spot_check(1.7e+61, "1.7e+61", boost::charconv::chars_format::scientific);
    spot_check(1.7e+60, "1.7e+60", boost::charconv::chars_format::scientific);
    spot_check(1.7e+59, "1.7e+59", boost::charconv::chars_format::scientific);
    spot_check(1.7e+58, "1.7e+58", boost::charconv::chars_format::scientific);
    spot_check(1.7e+57, "1.7e+57", boost::charconv::chars_format::scientific);
    spot_check(1.7e+56, "1.7e+56", boost::charconv::chars_format::scientific);
    spot_check(1.7e+55, "1.7e+55", boost::charconv::chars_format::scientific);
    spot_check(1.7e+54, "1.7e+54", boost::charconv::chars_format::scientific);
    spot_check(1.7e+53, "1.7e+53", boost::charconv::chars_format::scientific);
    spot_check(1.7e+52, "1.7e+52", boost::charconv::chars_format::scientific);
    spot_check(1.7e+51, "1.7e+51", boost::charconv::chars_format::scientific);
    spot_check(1.7e+50, "1.7e+50", boost::charconv::chars_format::scientific);
    spot_check(1.7e+49, "1.7e+49", boost::charconv::chars_format::scientific);
    spot_check(1.7e+48, "1.7e+48", boost::charconv::chars_format::scientific);
    spot_check(1.7e+47, "1.7e+47", boost::charconv::chars_format::scientific);
    spot_check(1.7e+46, "1.7e+46", boost::charconv::chars_format::scientific);
    spot_check(1.7e+45, "1.7e+45", boost::charconv::chars_format::scientific);
    spot_check(1.7e+44, "1.7e+44", boost::charconv::chars_format::scientific);
    spot_check(1.7e+43, "1.7e+43", boost::charconv::chars_format::scientific);
    spot_check(1.7e+42, "1.7e+42", boost::charconv::chars_format::scientific);
    spot_check(1.7e+41, "1.7e+41", boost::charconv::chars_format::scientific);
    spot_check(1.7e+40, "1.7e+40", boost::charconv::chars_format::scientific);
    spot_check(1.7e+39, "1.7e+39", boost::charconv::chars_format::scientific);
    spot_check(1.7e+38, "1.7e+38", boost::charconv::chars_format::scientific);
    spot_check(1.7e+37, "1.7e+37", boost::charconv::chars_format::scientific);
    spot_check(1.7e+36, "1.7e+36", boost::charconv::chars_format::scientific);
    spot_check(1.7e+35, "1.7e+35", boost::charconv::chars_format::scientific);
    spot_check(1.7e+34, "1.7e+34", boost::charconv::chars_format::scientific);
    spot_check(1.7e+33, "1.7e+33", boost::charconv::chars_format::scientific);
    spot_check(1.7e+32, "1.7e+32", boost::charconv::chars_format::scientific);
    spot_check(1.7e+31, "1.7e+31", boost::charconv::chars_format::scientific);
    spot_check(1.7e+30, "1.7e+30", boost::charconv::chars_format::scientific);
    spot_check(1.7e+29, "1.7e+29", boost::charconv::chars_format::scientific);
    spot_check(1.7e+28, "1.7e+28", boost::charconv::chars_format::scientific);
    spot_check(1.7e+27, "1.7e+27", boost::charconv::chars_format::scientific);
    spot_check(1.7e+26, "1.7e+26", boost::charconv::chars_format::scientific);
    spot_check(1.7e+25, "1.7e+25", boost::charconv::chars_format::scientific);
    spot_check(1.7e+24, "1.7e+24", boost::charconv::chars_format::scientific);
    spot_check(1.7e+23, "1.7e+23", boost::charconv::chars_format::scientific);
    spot_check(1.7e+22, "1.7e+22", boost::charconv::chars_format::scientific);
    spot_check(1.7e+21, "1.7e+21", boost::charconv::chars_format::scientific);
    spot_check(1.7e+20, "1.7e+20", boost::charconv::chars_format::scientific);
    spot_check(1.7e+19, "1.7e+19", boost::charconv::chars_format::scientific);
    spot_check(1.7e+18, "1.7e+18", boost::charconv::chars_format::scientific);
    spot_check(1.7e+17, "1.7e+17", boost::charconv::chars_format::scientific);
    spot_check(1.7e+16, "1.7e+16", boost::charconv::chars_format::scientific);
    spot_check(1.7e+15, "1.7e+15", boost::charconv::chars_format::scientific);
    spot_check(1.7e+14, "1.7e+14", boost::charconv::chars_format::scientific);
    spot_check(1.7e+13, "1.7e+13", boost::charconv::chars_format::scientific);
    spot_check(1.7e+12, "1.7e+12", boost::charconv::chars_format::scientific);
    spot_check(1.7e+11, "1.7e+11", boost::charconv::chars_format::scientific);
    spot_check(1.7e+10, "1.7e+10", boost::charconv::chars_format::scientific);
    spot_check(1.7e+09, "1.7e+09", boost::charconv::chars_format::scientific);
    spot_check(1.7e+08, "1.7e+08", boost::charconv::chars_format::scientific);
    spot_check(1.7e+07, "1.7e+07", boost::charconv::chars_format::scientific);
    spot_check(1.7e+06, "1.7e+06", boost::charconv::chars_format::scientific);
    spot_check(1.7e+05, "1.7e+05", boost::charconv::chars_format::scientific);
    spot_check(1.7e+04, "1.7e+04", boost::charconv::chars_format::scientific);
    spot_check(1.7e+03, "1.7e+03", boost::charconv::chars_format::scientific);
    spot_check(1.7e+02, "1.7e+02", boost::charconv::chars_format::scientific);
    spot_check(1.7e+01, "1.7e+01", boost::charconv::chars_format::scientific);
    spot_check(1.7e+00, "1.7e+00", boost::charconv::chars_format::scientific);

    spot_check(1.7e-308, "1.7e-308", boost::charconv::chars_format::scientific);
    spot_check(1.7e-307, "1.7e-307", boost::charconv::chars_format::scientific);
    spot_check(1.7e-306, "1.7e-306", boost::charconv::chars_format::scientific);
    spot_check(1.7e-305, "1.7e-305", boost::charconv::chars_format::scientific);
    spot_check(1.7e-304, "1.7e-304", boost::charconv::chars_format::scientific);
    spot_check(1.7e-303, "1.7e-303", boost::charconv::chars_format::scientific);
    spot_check(1.7e-302, "1.7e-302", boost::charconv::chars_format::scientific);
    spot_check(1.7e-301, "1.7e-301", boost::charconv::chars_format::scientific);
    spot_check(1.7e-300, "1.7e-300", boost::charconv::chars_format::scientific);
    spot_check(1.7e-299, "1.7e-299", boost::charconv::chars_format::scientific);
    spot_check(1.7e-298, "1.7e-298", boost::charconv::chars_format::scientific);
    spot_check(1.7e-297, "1.7e-297", boost::charconv::chars_format::scientific);
    spot_check(1.7e-296, "1.7e-296", boost::charconv::chars_format::scientific);
    spot_check(1.7e-295, "1.7e-295", boost::charconv::chars_format::scientific);
    spot_check(1.7e-294, "1.7e-294", boost::charconv::chars_format::scientific);
    spot_check(1.7e-293, "1.7e-293", boost::charconv::chars_format::scientific);
    spot_check(1.7e-292, "1.7e-292", boost::charconv::chars_format::scientific);
    spot_check(1.7e-291, "1.7e-291", boost::charconv::chars_format::scientific);
    spot_check(1.7e-290, "1.7e-290", boost::charconv::chars_format::scientific);
    spot_check(1.7e-289, "1.7e-289", boost::charconv::chars_format::scientific);
    spot_check(1.7e-288, "1.7e-288", boost::charconv::chars_format::scientific);
    spot_check(1.7e-287, "1.7e-287", boost::charconv::chars_format::scientific);
    spot_check(1.7e-286, "1.7e-286", boost::charconv::chars_format::scientific);
    spot_check(1.7e-285, "1.7e-285", boost::charconv::chars_format::scientific);
    spot_check(1.7e-284, "1.7e-284", boost::charconv::chars_format::scientific);
    spot_check(1.7e-283, "1.7e-283", boost::charconv::chars_format::scientific);
    spot_check(1.7e-282, "1.7e-282", boost::charconv::chars_format::scientific);
    spot_check(1.7e-281, "1.7e-281", boost::charconv::chars_format::scientific);
    spot_check(1.7e-280, "1.7e-280", boost::charconv::chars_format::scientific);
    spot_check(1.7e-279, "1.7e-279", boost::charconv::chars_format::scientific);
    spot_check(1.7e-278, "1.7e-278", boost::charconv::chars_format::scientific);
    spot_check(1.7e-277, "1.7e-277", boost::charconv::chars_format::scientific);
    spot_check(1.7e-276, "1.7e-276", boost::charconv::chars_format::scientific);
    spot_check(1.7e-275, "1.7e-275", boost::charconv::chars_format::scientific);
    spot_check(1.7e-274, "1.7e-274", boost::charconv::chars_format::scientific);
    spot_check(1.7e-273, "1.7e-273", boost::charconv::chars_format::scientific);
    spot_check(1.7e-272, "1.7e-272", boost::charconv::chars_format::scientific);
    spot_check(1.7e-271, "1.7e-271", boost::charconv::chars_format::scientific);
    spot_check(1.7e-270, "1.7e-270", boost::charconv::chars_format::scientific);
    spot_check(1.7e-269, "1.7e-269", boost::charconv::chars_format::scientific);
    spot_check(1.7e-268, "1.7e-268", boost::charconv::chars_format::scientific);
    spot_check(1.7e-267, "1.7e-267", boost::charconv::chars_format::scientific);
    spot_check(1.7e-266, "1.7e-266", boost::charconv::chars_format::scientific);
    spot_check(1.7e-265, "1.7e-265", boost::charconv::chars_format::scientific);
    spot_check(1.7e-264, "1.7e-264", boost::charconv::chars_format::scientific);
    spot_check(1.7e-263, "1.7e-263", boost::charconv::chars_format::scientific);
    spot_check(1.7e-262, "1.7e-262", boost::charconv::chars_format::scientific);
    spot_check(1.7e-261, "1.7e-261", boost::charconv::chars_format::scientific);
    spot_check(1.7e-260, "1.7e-260", boost::charconv::chars_format::scientific);
    spot_check(1.7e-259, "1.7e-259", boost::charconv::chars_format::scientific);
    spot_check(1.7e-258, "1.7e-258", boost::charconv::chars_format::scientific);
    spot_check(1.7e-257, "1.7e-257", boost::charconv::chars_format::scientific);
    spot_check(1.7e-256, "1.7e-256", boost::charconv::chars_format::scientific);
    spot_check(1.7e-255, "1.7e-255", boost::charconv::chars_format::scientific);
    spot_check(1.7e-254, "1.7e-254", boost::charconv::chars_format::scientific);
    spot_check(1.7e-253, "1.7e-253", boost::charconv::chars_format::scientific);
    spot_check(1.7e-252, "1.7e-252", boost::charconv::chars_format::scientific);
    spot_check(1.7e-251, "1.7e-251", boost::charconv::chars_format::scientific);
    spot_check(1.7e-250, "1.7e-250", boost::charconv::chars_format::scientific);
    spot_check(1.7e-249, "1.7e-249", boost::charconv::chars_format::scientific);
    spot_check(1.7e-248, "1.7e-248", boost::charconv::chars_format::scientific);
    spot_check(1.7e-247, "1.7e-247", boost::charconv::chars_format::scientific);
    spot_check(1.7e-246, "1.7e-246", boost::charconv::chars_format::scientific);
    spot_check(1.7e-245, "1.7e-245", boost::charconv::chars_format::scientific);
    spot_check(1.7e-244, "1.7e-244", boost::charconv::chars_format::scientific);
    spot_check(1.7e-243, "1.7e-243", boost::charconv::chars_format::scientific);
    spot_check(1.7e-242, "1.7e-242", boost::charconv::chars_format::scientific);
    spot_check(1.7e-241, "1.7e-241", boost::charconv::chars_format::scientific);
    spot_check(1.7e-240, "1.7e-240", boost::charconv::chars_format::scientific);
    spot_check(1.7e-239, "1.7e-239", boost::charconv::chars_format::scientific);
    spot_check(1.7e-238, "1.7e-238", boost::charconv::chars_format::scientific);
    spot_check(1.7e-237, "1.7e-237", boost::charconv::chars_format::scientific);
    spot_check(1.7e-236, "1.7e-236", boost::charconv::chars_format::scientific);
    spot_check(1.7e-235, "1.7e-235", boost::charconv::chars_format::scientific);
    spot_check(1.7e-234, "1.7e-234", boost::charconv::chars_format::scientific);
    spot_check(1.7e-233, "1.7e-233", boost::charconv::chars_format::scientific);
    spot_check(1.7e-232, "1.7e-232", boost::charconv::chars_format::scientific);
    spot_check(1.7e-231, "1.7e-231", boost::charconv::chars_format::scientific);
    spot_check(1.7e-230, "1.7e-230", boost::charconv::chars_format::scientific);
    spot_check(1.7e-229, "1.7e-229", boost::charconv::chars_format::scientific);
    spot_check(1.7e-228, "1.7e-228", boost::charconv::chars_format::scientific);
    spot_check(1.7e-227, "1.7e-227", boost::charconv::chars_format::scientific);
    spot_check(1.7e-226, "1.7e-226", boost::charconv::chars_format::scientific);
    spot_check(1.7e-225, "1.7e-225", boost::charconv::chars_format::scientific);
    spot_check(1.7e-224, "1.7e-224", boost::charconv::chars_format::scientific);
    spot_check(1.7e-223, "1.7e-223", boost::charconv::chars_format::scientific);
    spot_check(1.7e-222, "1.7e-222", boost::charconv::chars_format::scientific);
    spot_check(1.7e-221, "1.7e-221", boost::charconv::chars_format::scientific);
    spot_check(1.7e-220, "1.7e-220", boost::charconv::chars_format::scientific);
    spot_check(1.7e-219, "1.7e-219", boost::charconv::chars_format::scientific);
    spot_check(1.7e-218, "1.7e-218", boost::charconv::chars_format::scientific);
    spot_check(1.7e-217, "1.7e-217", boost::charconv::chars_format::scientific);
    spot_check(1.7e-216, "1.7e-216", boost::charconv::chars_format::scientific);
    spot_check(1.7e-215, "1.7e-215", boost::charconv::chars_format::scientific);
    spot_check(1.7e-214, "1.7e-214", boost::charconv::chars_format::scientific);
    spot_check(1.7e-213, "1.7e-213", boost::charconv::chars_format::scientific);
    spot_check(1.7e-212, "1.7e-212", boost::charconv::chars_format::scientific);
    spot_check(1.7e-211, "1.7e-211", boost::charconv::chars_format::scientific);
    spot_check(1.7e-210, "1.7e-210", boost::charconv::chars_format::scientific);
    spot_check(1.7e-209, "1.7e-209", boost::charconv::chars_format::scientific);
    spot_check(1.7e-208, "1.7e-208", boost::charconv::chars_format::scientific);
    spot_check(1.7e-207, "1.7e-207", boost::charconv::chars_format::scientific);
    spot_check(1.7e-206, "1.7e-206", boost::charconv::chars_format::scientific);
    spot_check(1.7e-205, "1.7e-205", boost::charconv::chars_format::scientific);
    spot_check(1.7e-204, "1.7e-204", boost::charconv::chars_format::scientific);
    spot_check(1.7e-203, "1.7e-203", boost::charconv::chars_format::scientific);
    spot_check(1.7e-202, "1.7e-202", boost::charconv::chars_format::scientific);
    spot_check(1.7e-201, "1.7e-201", boost::charconv::chars_format::scientific);
    spot_check(1.7e-200, "1.7e-200", boost::charconv::chars_format::scientific);

    spot_check(1.7e-199, "1.7e-199", boost::charconv::chars_format::scientific);
    spot_check(1.7e-198, "1.7e-198", boost::charconv::chars_format::scientific);
    spot_check(1.7e-197, "1.7e-197", boost::charconv::chars_format::scientific);
    spot_check(1.7e-196, "1.7e-196", boost::charconv::chars_format::scientific);
    spot_check(1.7e-195, "1.7e-195", boost::charconv::chars_format::scientific);
    spot_check(1.7e-194, "1.7e-194", boost::charconv::chars_format::scientific);
    spot_check(1.7e-193, "1.7e-193", boost::charconv::chars_format::scientific);
    spot_check(1.7e-192, "1.7e-192", boost::charconv::chars_format::scientific);
    spot_check(1.7e-191, "1.7e-191", boost::charconv::chars_format::scientific);
    spot_check(1.7e-190, "1.7e-190", boost::charconv::chars_format::scientific);
    spot_check(1.7e-189, "1.7e-189", boost::charconv::chars_format::scientific);
    spot_check(1.7e-188, "1.7e-188", boost::charconv::chars_format::scientific);
    spot_check(1.7e-187, "1.7e-187", boost::charconv::chars_format::scientific);
    spot_check(1.7e-186, "1.7e-186", boost::charconv::chars_format::scientific);
    spot_check(1.7e-185, "1.7e-185", boost::charconv::chars_format::scientific);
    spot_check(1.7e-184, "1.7e-184", boost::charconv::chars_format::scientific);
    spot_check(1.7e-183, "1.7e-183", boost::charconv::chars_format::scientific);
    spot_check(1.7e-182, "1.7e-182", boost::charconv::chars_format::scientific);
    spot_check(1.7e-181, "1.7e-181", boost::charconv::chars_format::scientific);
    spot_check(1.7e-180, "1.7e-180", boost::charconv::chars_format::scientific);
    spot_check(1.7e-179, "1.7e-179", boost::charconv::chars_format::scientific);
    spot_check(1.7e-178, "1.7e-178", boost::charconv::chars_format::scientific);
    spot_check(1.7e-177, "1.7e-177", boost::charconv::chars_format::scientific);
    spot_check(1.7e-176, "1.7e-176", boost::charconv::chars_format::scientific);
    spot_check(1.7e-175, "1.7e-175", boost::charconv::chars_format::scientific);
    spot_check(1.7e-174, "1.7e-174", boost::charconv::chars_format::scientific);
    spot_check(1.7e-173, "1.7e-173", boost::charconv::chars_format::scientific);
    spot_check(1.7e-172, "1.7e-172", boost::charconv::chars_format::scientific);
    spot_check(1.7e-171, "1.7e-171", boost::charconv::chars_format::scientific);
    spot_check(1.7e-170, "1.7e-170", boost::charconv::chars_format::scientific);
    spot_check(1.7e-169, "1.7e-169", boost::charconv::chars_format::scientific);
    spot_check(1.7e-168, "1.7e-168", boost::charconv::chars_format::scientific);
    spot_check(1.7e-167, "1.7e-167", boost::charconv::chars_format::scientific);
    spot_check(1.7e-166, "1.7e-166", boost::charconv::chars_format::scientific);
    spot_check(1.7e-165, "1.7e-165", boost::charconv::chars_format::scientific);
    spot_check(1.7e-164, "1.7e-164", boost::charconv::chars_format::scientific);
    spot_check(1.7e-163, "1.7e-163", boost::charconv::chars_format::scientific);
    spot_check(1.7e-162, "1.7e-162", boost::charconv::chars_format::scientific);
    spot_check(1.7e-161, "1.7e-161", boost::charconv::chars_format::scientific);
    spot_check(1.7e-160, "1.7e-160", boost::charconv::chars_format::scientific);
    spot_check(1.7e-159, "1.7e-159", boost::charconv::chars_format::scientific);
    spot_check(1.7e-158, "1.7e-158", boost::charconv::chars_format::scientific);
    spot_check(1.7e-157, "1.7e-157", boost::charconv::chars_format::scientific);
    spot_check(1.7e-156, "1.7e-156", boost::charconv::chars_format::scientific);
    spot_check(1.7e-155, "1.7e-155", boost::charconv::chars_format::scientific);
    spot_check(1.7e-154, "1.7e-154", boost::charconv::chars_format::scientific);
    spot_check(1.7e-153, "1.7e-153", boost::charconv::chars_format::scientific);
    spot_check(1.7e-152, "1.7e-152", boost::charconv::chars_format::scientific);
    spot_check(1.7e-151, "1.7e-151", boost::charconv::chars_format::scientific);
    spot_check(1.7e-150, "1.7e-150", boost::charconv::chars_format::scientific);
    spot_check(1.7e-149, "1.7e-149", boost::charconv::chars_format::scientific);
    spot_check(1.7e-148, "1.7e-148", boost::charconv::chars_format::scientific);
    spot_check(1.7e-147, "1.7e-147", boost::charconv::chars_format::scientific);
    spot_check(1.7e-146, "1.7e-146", boost::charconv::chars_format::scientific);
    spot_check(1.7e-145, "1.7e-145", boost::charconv::chars_format::scientific);
    spot_check(1.7e-144, "1.7e-144", boost::charconv::chars_format::scientific);
    spot_check(1.7e-143, "1.7e-143", boost::charconv::chars_format::scientific);
    spot_check(1.7e-142, "1.7e-142", boost::charconv::chars_format::scientific);
    spot_check(1.7e-141, "1.7e-141", boost::charconv::chars_format::scientific);
    spot_check(1.7e-140, "1.7e-140", boost::charconv::chars_format::scientific);
    spot_check(1.7e-139, "1.7e-139", boost::charconv::chars_format::scientific);
    spot_check(1.7e-138, "1.7e-138", boost::charconv::chars_format::scientific);
    spot_check(1.7e-137, "1.7e-137", boost::charconv::chars_format::scientific);
    spot_check(1.7e-136, "1.7e-136", boost::charconv::chars_format::scientific);
    spot_check(1.7e-135, "1.7e-135", boost::charconv::chars_format::scientific);
    spot_check(1.7e-134, "1.7e-134", boost::charconv::chars_format::scientific);
    spot_check(1.7e-133, "1.7e-133", boost::charconv::chars_format::scientific);
    spot_check(1.7e-132, "1.7e-132", boost::charconv::chars_format::scientific);
    spot_check(1.7e-131, "1.7e-131", boost::charconv::chars_format::scientific);
    spot_check(1.7e-130, "1.7e-130", boost::charconv::chars_format::scientific);
    spot_check(1.7e-129, "1.7e-129", boost::charconv::chars_format::scientific);
    spot_check(1.7e-128, "1.7e-128", boost::charconv::chars_format::scientific);
    spot_check(1.7e-127, "1.7e-127", boost::charconv::chars_format::scientific);
    spot_check(1.7e-126, "1.7e-126", boost::charconv::chars_format::scientific);
    spot_check(1.7e-125, "1.7e-125", boost::charconv::chars_format::scientific);
    spot_check(1.7e-124, "1.7e-124", boost::charconv::chars_format::scientific);
    spot_check(1.7e-123, "1.7e-123", boost::charconv::chars_format::scientific);
    spot_check(1.7e-122, "1.7e-122", boost::charconv::chars_format::scientific);
    spot_check(1.7e-121, "1.7e-121", boost::charconv::chars_format::scientific);
    spot_check(1.7e-120, "1.7e-120", boost::charconv::chars_format::scientific);
    spot_check(1.7e-119, "1.7e-119", boost::charconv::chars_format::scientific);
    spot_check(1.7e-118, "1.7e-118", boost::charconv::chars_format::scientific);
    spot_check(1.7e-117, "1.7e-117", boost::charconv::chars_format::scientific);
    spot_check(1.7e-116, "1.7e-116", boost::charconv::chars_format::scientific);
    spot_check(1.7e-115, "1.7e-115", boost::charconv::chars_format::scientific);
    spot_check(1.7e-114, "1.7e-114", boost::charconv::chars_format::scientific);
    spot_check(1.7e-113, "1.7e-113", boost::charconv::chars_format::scientific);
    spot_check(1.7e-112, "1.7e-112", boost::charconv::chars_format::scientific);
    spot_check(1.7e-111, "1.7e-111", boost::charconv::chars_format::scientific);
    spot_check(1.7e-110, "1.7e-110", boost::charconv::chars_format::scientific);
    spot_check(1.7e-109, "1.7e-109", boost::charconv::chars_format::scientific);
    spot_check(1.7e-108, "1.7e-108", boost::charconv::chars_format::scientific);
    spot_check(1.7e-107, "1.7e-107", boost::charconv::chars_format::scientific);
    spot_check(1.7e-106, "1.7e-106", boost::charconv::chars_format::scientific);
    spot_check(1.7e-105, "1.7e-105", boost::charconv::chars_format::scientific);
    spot_check(1.7e-104, "1.7e-104", boost::charconv::chars_format::scientific);
    spot_check(1.7e-103, "1.7e-103", boost::charconv::chars_format::scientific);
    spot_check(1.7e-102, "1.7e-102", boost::charconv::chars_format::scientific);
    spot_check(1.7e-101, "1.7e-101", boost::charconv::chars_format::scientific);
    spot_check(1.7e-100, "1.7e-100", boost::charconv::chars_format::scientific);

    spot_check(1.7e-99, "1.7e-99", boost::charconv::chars_format::scientific);
    spot_check(1.7e-98, "1.7e-98", boost::charconv::chars_format::scientific);
    spot_check(1.7e-97, "1.7e-97", boost::charconv::chars_format::scientific);
    spot_check(1.7e-96, "1.7e-96", boost::charconv::chars_format::scientific);
    spot_check(1.7e-95, "1.7e-95", boost::charconv::chars_format::scientific);
    spot_check(1.7e-94, "1.7e-94", boost::charconv::chars_format::scientific);
    spot_check(1.7e-93, "1.7e-93", boost::charconv::chars_format::scientific);
    spot_check(1.7e-92, "1.7e-92", boost::charconv::chars_format::scientific);
    spot_check(1.7e-91, "1.7e-91", boost::charconv::chars_format::scientific);
    spot_check(1.7e-90, "1.7e-90", boost::charconv::chars_format::scientific);
    spot_check(1.7e-89, "1.7e-89", boost::charconv::chars_format::scientific);
    spot_check(1.7e-88, "1.7e-88", boost::charconv::chars_format::scientific);
    spot_check(1.7e-87, "1.7e-87", boost::charconv::chars_format::scientific);
    spot_check(1.7e-86, "1.7e-86", boost::charconv::chars_format::scientific);
    spot_check(1.7e-85, "1.7e-85", boost::charconv::chars_format::scientific);
    spot_check(1.7e-84, "1.7e-84", boost::charconv::chars_format::scientific);
    spot_check(1.7e-83, "1.7e-83", boost::charconv::chars_format::scientific);
    spot_check(1.7e-82, "1.7e-82", boost::charconv::chars_format::scientific);
    spot_check(1.7e-81, "1.7e-81", boost::charconv::chars_format::scientific);
    spot_check(1.7e-80, "1.7e-80", boost::charconv::chars_format::scientific);
    spot_check(1.7e-79, "1.7e-79", boost::charconv::chars_format::scientific);
    spot_check(1.7e-78, "1.7e-78", boost::charconv::chars_format::scientific);
    spot_check(1.7e-77, "1.7e-77", boost::charconv::chars_format::scientific);
    spot_check(1.7e-76, "1.7e-76", boost::charconv::chars_format::scientific);
    spot_check(1.7e-75, "1.7e-75", boost::charconv::chars_format::scientific);
    spot_check(1.7e-74, "1.7e-74", boost::charconv::chars_format::scientific);
    spot_check(1.7e-73, "1.7e-73", boost::charconv::chars_format::scientific);
    spot_check(1.7e-72, "1.7e-72", boost::charconv::chars_format::scientific);
    spot_check(1.7e-71, "1.7e-71", boost::charconv::chars_format::scientific);
    spot_check(1.7e-70, "1.7e-70", boost::charconv::chars_format::scientific);
    spot_check(1.7e-69, "1.7e-69", boost::charconv::chars_format::scientific);
    spot_check(1.7e-68, "1.7e-68", boost::charconv::chars_format::scientific);
    spot_check(1.7e-67, "1.7e-67", boost::charconv::chars_format::scientific);
    spot_check(1.7e-66, "1.7e-66", boost::charconv::chars_format::scientific);
    spot_check(1.7e-65, "1.7e-65", boost::charconv::chars_format::scientific);
    spot_check(1.7e-64, "1.7e-64", boost::charconv::chars_format::scientific);
    spot_check(1.7e-63, "1.7e-63", boost::charconv::chars_format::scientific);
    spot_check(1.7e-62, "1.7e-62", boost::charconv::chars_format::scientific);
    spot_check(1.7e-61, "1.7e-61", boost::charconv::chars_format::scientific);
    spot_check(1.7e-60, "1.7e-60", boost::charconv::chars_format::scientific);
    spot_check(1.7e-59, "1.7e-59", boost::charconv::chars_format::scientific);
    spot_check(1.7e-58, "1.7e-58", boost::charconv::chars_format::scientific);
    spot_check(1.7e-57, "1.7e-57", boost::charconv::chars_format::scientific);
    spot_check(1.7e-56, "1.7e-56", boost::charconv::chars_format::scientific);
    spot_check(1.7e-55, "1.7e-55", boost::charconv::chars_format::scientific);
    spot_check(1.7e-54, "1.7e-54", boost::charconv::chars_format::scientific);
    spot_check(1.7e-53, "1.7e-53", boost::charconv::chars_format::scientific);
    spot_check(1.7e-52, "1.7e-52", boost::charconv::chars_format::scientific);
    spot_check(1.7e-51, "1.7e-51", boost::charconv::chars_format::scientific);
    spot_check(1.7e-50, "1.7e-50", boost::charconv::chars_format::scientific);
    spot_check(1.7e-49, "1.7e-49", boost::charconv::chars_format::scientific);
    spot_check(1.7e-48, "1.7e-48", boost::charconv::chars_format::scientific);
    spot_check(1.7e-47, "1.7e-47", boost::charconv::chars_format::scientific);
    spot_check(1.7e-46, "1.7e-46", boost::charconv::chars_format::scientific);
    spot_check(1.7e-45, "1.7e-45", boost::charconv::chars_format::scientific);
    spot_check(1.7e-44, "1.7e-44", boost::charconv::chars_format::scientific);
    spot_check(1.7e-43, "1.7e-43", boost::charconv::chars_format::scientific);
    spot_check(1.7e-42, "1.7e-42", boost::charconv::chars_format::scientific);
    spot_check(1.7e-41, "1.7e-41", boost::charconv::chars_format::scientific);
    spot_check(1.7e-40, "1.7e-40", boost::charconv::chars_format::scientific);
    spot_check(1.7e-39, "1.7e-39", boost::charconv::chars_format::scientific);
    spot_check(1.7e-38, "1.7e-38", boost::charconv::chars_format::scientific);
    spot_check(1.7e-37, "1.7e-37", boost::charconv::chars_format::scientific);
    spot_check(1.7e-36, "1.7e-36", boost::charconv::chars_format::scientific);
    spot_check(1.7e-35, "1.7e-35", boost::charconv::chars_format::scientific);
    spot_check(1.7e-34, "1.7e-34", boost::charconv::chars_format::scientific);
    spot_check(1.7e-33, "1.7e-33", boost::charconv::chars_format::scientific);
    spot_check(1.7e-32, "1.7e-32", boost::charconv::chars_format::scientific);
    spot_check(1.7e-31, "1.7e-31", boost::charconv::chars_format::scientific);
    spot_check(1.7e-30, "1.7e-30", boost::charconv::chars_format::scientific);
    spot_check(1.7e-29, "1.7e-29", boost::charconv::chars_format::scientific);
    spot_check(1.7e-28, "1.7e-28", boost::charconv::chars_format::scientific);
    spot_check(1.7e-27, "1.7e-27", boost::charconv::chars_format::scientific);
    spot_check(1.7e-26, "1.7e-26", boost::charconv::chars_format::scientific);
    spot_check(1.7e-25, "1.7e-25", boost::charconv::chars_format::scientific);
    spot_check(1.7e-24, "1.7e-24", boost::charconv::chars_format::scientific);
    spot_check(1.7e-23, "1.7e-23", boost::charconv::chars_format::scientific);
    spot_check(1.7e-22, "1.7e-22", boost::charconv::chars_format::scientific);
    spot_check(1.7e-21, "1.7e-21", boost::charconv::chars_format::scientific);
    spot_check(1.7e-20, "1.7e-20", boost::charconv::chars_format::scientific);
    spot_check(1.7e-19, "1.7e-19", boost::charconv::chars_format::scientific);
    spot_check(1.7e-18, "1.7e-18", boost::charconv::chars_format::scientific);
    spot_check(1.7e-17, "1.7e-17", boost::charconv::chars_format::scientific);
    spot_check(1.7e-16, "1.7e-16", boost::charconv::chars_format::scientific);
    spot_check(1.7e-15, "1.7e-15", boost::charconv::chars_format::scientific);
    spot_check(1.7e-14, "1.7e-14", boost::charconv::chars_format::scientific);
    spot_check(1.7e-13, "1.7e-13", boost::charconv::chars_format::scientific);
    spot_check(1.7e-12, "1.7e-12", boost::charconv::chars_format::scientific);
    spot_check(1.7e-11, "1.7e-11", boost::charconv::chars_format::scientific);
    spot_check(1.7e-10, "1.7e-10", boost::charconv::chars_format::scientific);
    spot_check(1.7e-09, "1.7e-09", boost::charconv::chars_format::scientific);
    spot_check(1.7e-08, "1.7e-08", boost::charconv::chars_format::scientific);
    spot_check(1.7e-07, "1.7e-07", boost::charconv::chars_format::scientific);
    spot_check(1.7e-06, "1.7e-06", boost::charconv::chars_format::scientific);
    spot_check(1.7e-05, "1.7e-05", boost::charconv::chars_format::scientific);
    spot_check(1.7e-04, "1.7e-04", boost::charconv::chars_format::scientific);
    spot_check(1.7e-03, "1.7e-03", boost::charconv::chars_format::scientific);
    spot_check(1.7e-02, "1.7e-02", boost::charconv::chars_format::scientific);
    spot_check(1.7e-01, "1.7e-01", boost::charconv::chars_format::scientific);
    spot_check(1.7e-00, "1.7e-00", boost::charconv::chars_format::scientific);

    // 0 exponent in general format
    spot_check(1.7e-00, "1.7e-00", boost::charconv::chars_format::general);
    spot_check(1.7e-00, "1.7e+00", boost::charconv::chars_format::general);
    spot_check(17e-00, "17e+00", boost::charconv::chars_format::general);
    spot_check(17.0e-00, "17.0e+00", boost::charconv::chars_format::general);
    spot_check(170e-00, "170e+00", boost::charconv::chars_format::general);
    spot_check(170.0e-00, "170.0e+00", boost::charconv::chars_format::general);
    spot_check(170.0000e-00, "170.0000e+00", boost::charconv::chars_format::general);

    // https://github.com/cppalliance/charconv/issues/114
    auto fmts = {boost::charconv::chars_format::general, boost::charconv::chars_format::scientific,
                 boost::charconv::chars_format::fixed ,boost::charconv::chars_format::hex};
    for (const auto fmt : fmts)
    {
        spot_check_nan<float>("nan", fmt);
        spot_check_nan<float>("-nan", fmt);
        spot_check_nan<double>("nan", fmt);
        spot_check_nan<double>("-nan", fmt);

        spot_check_inf<float>("inf", fmt);
        spot_check_inf<float>("-inf", fmt);
        spot_check_inf<double>("inf", fmt);
        spot_check_inf<double>("-inf", fmt);

        spot_check_nan<float>("NAN", fmt);
        spot_check_nan<float>("-NAN", fmt);
        spot_check_nan<double>("NAN", fmt);
        spot_check_nan<double>("-NAN", fmt);

        spot_check_inf<float>("INF", fmt);
        spot_check_inf<float>("-INF", fmt);
        spot_check_inf<double>("INF", fmt);
        spot_check_inf<double>("-INF", fmt);

        spot_check_nan<float>("nan(snan)", fmt);
        spot_check_nan<float>("-nan(snan)", fmt);
        spot_check_nan<double>("nan(snan)", fmt);
        spot_check_nan<double>("-nan(snan)", fmt);

        spot_check_nan<float>("-nan(ind)", fmt);
        spot_check_nan<double>("-nan(ind)", fmt);

        spot_check_invalid_argument<float>("na7", fmt);
        spot_check_invalid_argument<float>("na", fmt);
        spot_check_invalid_argument<float>("in", fmt);

        spot_check_invalid_argument<float>(" 1.23", fmt);
        spot_check_invalid_argument<float>("  1.23", fmt);
        spot_check_invalid_argument<double>(" 1.23", fmt);
        spot_check_invalid_argument<double>("  1.23", fmt);

        #ifndef BOOST_CHARCONV_UNSUPPORTED_LONG_DOUBLE
        spot_check_nan<long double>("nan", fmt);
        spot_check_nan<long double>("-nan", fmt);
        spot_check_inf<long double>("inf", fmt);
        spot_check_inf<long double>("-inf", fmt);
        spot_check_nan<long double>("NAN", fmt);
        spot_check_nan<long double>("-NAN", fmt);
        spot_check_inf<long double>("INF", fmt);
        spot_check_inf<long double>("-INF", fmt);
        spot_check_nan<long double>("nan(snan)", fmt);
        spot_check_nan<long double>("-nan(snan)", fmt);
        spot_check_nan<long double>("-nan(ind)", fmt);
        spot_check_invalid_argument<long double>(" 1.23", fmt);
        spot_check_invalid_argument<long double>("  1.23", fmt);
        #endif
    }

    #ifdef BOOST_CHARCONV_HAS_FLOAT16
    test_16bit_overflow<std::float16_t>("3.40282e+38");  // float max
    test_16bit_overflow<std::float16_t>("-3.40282e+38"); // float lowest
    spot_check_nan<std::float16_t>("nan");
    spot_check_inf<std::float16_t>("INF");
    #endif
    #ifdef BOOST_CHARCONV_HAS_BRAINFLOAT16
    test_16bit_overflow<std::bfloat16_t>("3.40282e+38");  // float max
    test_16bit_overflow<std::bfloat16_t>("-3.40282e+38"); // float lowest
    spot_check_nan<std::bfloat16_t>("nan");
    spot_check_inf<std::bfloat16_t>("INF");
    #endif

    return boost::report_errors();
}