xref: /aosp_15_r20/external/llvm-libc/test/src/stdlib/strtod_test.cpp (revision 71db0c75aadcf003ffe3238005f61d7618a3fead)
1 //===-- Unittests for strtod ----------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "src/__support/FPUtil/FPBits.h"
10 #include "src/errno/libc_errno.h"
11 #include "src/stdlib/strtod.h"
12 
13 #include "test/UnitTest/ErrnoSetterMatcher.h"
14 #include "test/UnitTest/RoundingModeUtils.h"
15 #include "test/UnitTest/Test.h"
16 
17 #include <stddef.h>
18 
19 using LIBC_NAMESPACE::fputil::testing::ForceRoundingModeTest;
20 using LIBC_NAMESPACE::fputil::testing::RoundingMode;
21 
22 using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails;
23 using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds;
24 
25 class LlvmLibcStrToDTest : public LIBC_NAMESPACE::testing::Test,
26                            ForceRoundingModeTest<RoundingMode::Nearest> {
27 public:
run_test(const char * inputString,const ptrdiff_t expectedStrLen,const uint64_t expectedRawData,const int expectedErrno=0)28   void run_test(const char *inputString, const ptrdiff_t expectedStrLen,
29                 const uint64_t expectedRawData, const int expectedErrno = 0) {
30     // expectedRawData is the expected double result as a uint64_t, organized
31     // according to IEEE754:
32     //
33     // +-- 1 Sign Bit                        +-- 52 Mantissa bits
34     // |                                     |
35     // |           +-------------------------+------------------------+
36     // |           |                                                  |
37     // SEEEEEEEEEEEMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
38     //  |         |
39     //  +----+----+
40     //       |
41     //       +-- 11 Exponent Bits
42     //
43     //  This is so that the result can be compared in parts.
44     char *str_end = nullptr;
45 
46     LIBC_NAMESPACE::fputil::FPBits<double> expected_fp =
47         LIBC_NAMESPACE::fputil::FPBits<double>(expectedRawData);
48 
49     LIBC_NAMESPACE::libc_errno = 0;
50     double result = LIBC_NAMESPACE::strtod(inputString, &str_end);
51     if (expectedErrno == 0)
52       EXPECT_THAT(result, Succeeds<double>(expected_fp.get_val()));
53     else
54       EXPECT_THAT(result, Fails<double>(expectedErrno, expected_fp.get_val()));
55     EXPECT_EQ(str_end - inputString, expectedStrLen);
56   }
57 };
58 
TEST_F(LlvmLibcStrToDTest,SimpleTest)59 TEST_F(LlvmLibcStrToDTest, SimpleTest) {
60   run_test("123", 3, uint64_t(0x405ec00000000000));
61 
62   // This should fail on Eisel-Lemire, forcing a fallback to simple decimal
63   // conversion.
64   run_test("12345678901234549760", 20, uint64_t(0x43e56a95319d63d8));
65 
66   // Found while looking for difficult test cases here:
67   // https://github.com/nigeltao/parse-number-fxx-test-data/blob/main/more-test-cases/golang-org-issue-36657.txt
68   run_test("1090544144181609348835077142190", 31, uint64_t(0x462b8779f2474dfb));
69 
70   run_test("0x123", 5, uint64_t(0x4072300000000000));
71 }
72 
73 // These are tests that have caused problems in the past.
TEST_F(LlvmLibcStrToDTest,SpecificFailures)74 TEST_F(LlvmLibcStrToDTest, SpecificFailures) {
75   run_test("3E70000000000000", 16, uint64_t(0x7FF0000000000000), ERANGE);
76   run_test("358416272e-33", 13, uint64_t(0x3adbbb2a68c9d0b9));
77   run_test("2.16656806400000023841857910156251e9", 36,
78            uint64_t(0x41e0246690000001));
79   run_test("27949676547093071875", 20, uint64_t(0x43f83e132bc608c9));
80   run_test(
81       "100000000000000000000000000000000000000000000000000000000000000000000000"
82       "000000000000000000000000000000000000000000000000000000000000000000000000"
83       "000000000000000000000000000000000000000000000000000000000000000000000000"
84       "000000000000000000000000000000000000000000000000000000000000000000000000"
85       "000000000000000000000000000000000000000000000000000000000000000000000000"
86       "000000000000000000000000000000000000000000000000000000000000000000000000"
87       "000000000000000000000000000000000000000000000000000000000000000000000000"
88       "000000000000000000000000000000000000000000000000000000000000000000000000"
89       "000000000000000000000000000000000000000000000000000000000000000000000000"
90       "000000000000000000000000000000000000000000000000000000000000000000000000"
91       "000000000000000000000000000000000000000000000000000000000000000000000000"
92       "000000000e-800",
93       806, 0x3ff0000000000000);
94   run_test(
95       "100000000000000000000000000000000000000000000000000000000000000000000000"
96       "000000000000000000000000000000000000000000000000000000000000000000000000"
97       "000000000000000000000000000000000000000000000000000000000000000000000000"
98       "000000000000000000000000000000000000000000000000000000000000000000000000"
99       "000000000000000000000000000000000000000000000000000000000000000000000000"
100       "000000000000000000000000000000000000000000000000000000000000000000000000"
101       "000000000000000000000000000000000000000000000000000000000000000000000000"
102       "000000000000000000000000000000000000000000000000000000000000000000000000"
103       "000000000000000000000000000000000000000000000000000000000000000000000000"
104       "000000000000000000000000000000000000000000000000000000000000000000000000"
105       "000000000000000000000000000000000000000000000000000000000000000000000000"
106       "000000000e-799",
107       806, 0x4024000000000000);
108   run_test(
109       "100000000000000000000000000000000000000000000000000000000000000000000000"
110       "000000000000000000000000000000000000000000000000000000000000000000000000"
111       "000000000000000000000000000000000000000000000000000000000000000000000000"
112       "000000000000000000000000000000000000000000000000000000000000000000000000"
113       "000000000000000000000000000000000000000000000000000000000000000000000000"
114       "000000000000000000000000000000000000000000000000000000000000000000000000"
115       "000000000000000000000000000000000000000000000000000000000000000000000000"
116       "000000000000000000000000000000000000000000000000000000000000000000000000"
117       "000000000000000000000000000000000000000000000000000000000000000000000000"
118       "000000000000000000000000000000000000000000000000000000000000000000000000"
119       "000000000000000000000000000000000000000000000000000000000000000000000000"
120       "0000000000e-800",
121       807, 0x4024000000000000);
122   run_test(
123       "10000000000000000000000000000000000000000000000000000000000000000e-64",
124       69, 0x3ff0000000000000);
125   run_test(
126       "100000000000000000000000000000000000000000000000000000000000000000000000"
127       "000000000000000000000000000000000000000000000000000000000e-128",
128       134, 0x3ff0000000000000);
129   run_test("1000000000000000000000000000000000000000000000000000000000000000000"
130            "0000000000000000000000000000000000000000000000000000000000000000000"
131            "0000000000000000000000000000000000000000000000000000000000000000000"
132            "00000000000000000000000000000000000000000000000000000000e-256",
133            262, 0x3ff0000000000000);
134   run_test("1000000000000000000000000000000000000000000000000000000000000000000"
135            "0000000000000000000000000000000000000000000000000000000000000000000"
136            "0000000000000000000000000000000000000000000000000000000000000000000"
137            "0000000000000000000000000000000000000000000000000000000000000000000"
138            "0000000000000000000000000000000000000000000000000000000000000000000"
139            "0000000000000000000000000000000000000000000000000000000000000000000"
140            "0000000000000000000000000000000000000000000000000000000000000000000"
141            "00000000000000000000000000000000000000000000e-512",
142            518, 0x3ff0000000000000);
143   run_test(
144       "100000000000000000000000000000000000000000000000000000000000000000000000"
145       "000000000000000000000000000000000000000000000000000000000000000000000000"
146       "000000000000000000000000000000000000000000000000000000000000000000000000"
147       "000000000000000000000000000000000000000000000000000000000000000000000000"
148       "000000000000000000000000000000000000000000000000000000000000000000000000"
149       "000000000000000000000000000000000000000000000000000000000000000000000000"
150       "000000000000000000000000000000000000000000000000000000000000000000000000"
151       "000000000000000000000000000000000000000000000000000000000000000000000000"
152       "000000000000000000000000000000000000000000000000000000000000000000000000"
153       "000000000000000000000000000000000000000000000000000000000000000000000000"
154       "000000000000000000000000000000000000000000000000000000000000000000000000"
155       "000000000000000000000000000000000000000000000000000000000000000000000000"
156       "000000000000000000000000000000000000000000000000000000000000000000000000"
157       "000000000000000000000000000000000000000000000000000000000000000000000000"
158       "00000000000000000e-1024",
159       1031, 0x3ff0000000000000);
160   run_test(
161       "0"
162       "100000000000000000000000000000000000000000000000000000000000000000000000"
163       "000000000000000000000000000000000000000000000000000000000000000000000000"
164       "000000000000000000000000000000000000000000000000000000000000000000000000"
165       "000000000000000000000000000000000000000000000000000000000000000000000000"
166       "000000000000000000000000000000000000000000000000000000000000000000000000"
167       "000000000000000000000000000000000000000000000000000000000000000000000000"
168       "000000000000000000000000000000000000000000000000000000000000000000000000"
169       "000000000000000000000000000000000000000000000000000000000000000000000000"
170       "000000000000000000000000000000000000000000000000000000000000000000000000"
171       "000000000000000000000000000000000000000000000000000000000000000000000000"
172       "000000000000000000000000000000000000000000000000000000000000000000000000"
173       "000000000000000000000000000000000000000000000000000000000000000000000000"
174       "000000000000000000000000000000000000000000000000000000000000000000000000"
175       "000000000000000000000000000000000000000000000000000000000000000000000000"
176       "00000000000000000e-1024",
177       1032, 0x3ff0000000000000);
178 }
179 
TEST_F(LlvmLibcStrToDTest,FuzzFailures)180 TEST_F(LlvmLibcStrToDTest, FuzzFailures) {
181   run_test("-\xff\xff\xff\xff\xff\xff\xff\x01", 0, uint64_t(0));
182   run_test("-.????", 0, uint64_t(0));
183   run_test(
184       "44444444444444444444444444444444444444444444444444A44444444444444444"
185       "44444444444*\x99\xff\xff\xff\xff",
186       50, uint64_t(0x4a3e68fdd0e0b2d8));
187   run_test("-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKNNNNNNNNNNNNNNNNNN?"
188            "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN?",
189            0, uint64_t(0));
190   run_test("0x.666E40", 9, uint64_t(0x3fd99b9000000000));
191 
192   // glibc version 2.36 and higher (not tested with lower versions) disagrees
193   // with this result, but ours is correct for the nearest rounding mode. See
194   // this bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30220
195   run_test("0x30000002222225p-1077", 22, uint64_t(0x0006000000444445), ERANGE);
196 
197   // This value triggered a bug by having an exponent exactly equal to the
198   // maximum. The overflow checks would accept a value less than the max value
199   // as valid and greater than the max value as invalid (and set it to the max),
200   // but an exponent of exactly max value hit the else condition which is
201   // intended for underflow and set the exponent to the min exponent.
202   run_test(
203       "184774460000000000000000000000000000052300000000000000000000000000000000"
204       "000000000000000000000000000000000000000000000000000000000000000000000000"
205       "000000000000000000000000000000000000009351662015430037656316837118788423"
206       "887774460000000000004300376000000000000000000000000000000000000000000000"
207       "000000000000000000000000000000000000000000000000000000000000000000000000"
208       "000000000000000000000000000000000000000000000000000000000000000000000000"
209       "000000000000000000000000000000000000000000000052385811247017194600000000"
210       "000000000171946000000000000000000700460000000000000000000000001000000000"
211       "000000000000000000000000000000000000000000000000000000000000000000000000"
212       "000000000000000000000000000000000000000000000000000000000000000000000000"
213       "000000000000000000000000000000000000000000000000000000020000000000000000"
214       "000000000000563168371187884238877744600000000000000000000000000000523858"
215       "112470171946000000000000000001719460000000000000000007004600000000000000"
216       "000000000000000000000000000000000000000000000000000000000000000000000000"
217       "000000000000000000020000000000000000000000000000000000000000000000000000"
218       "000000000000000000000000000000000000000000000000000000000000000000000000"
219       "000000000000000000000000000000000000000000000000000000000000000000000000"
220       "000000000000000000000000000000000000000000000005238581124701719460000000"
221       "000000000017194600000000000000000070046000000000000000000000000000000000"
222       "000000000000000000000000000000000000000000000000000000000000000000000000"
223       "200000000000000000E608",
224       1462, uint64_t(0x7ff0000000000000), ERANGE);
225 
226   // Same as above but for hex.
227   run_test("0x0164810157p2047", 17, uint64_t(0x7ff0000000000000), ERANGE);
228 
229   // This test ensures that only the correct number of characters is accepted.
230   // An exponent symbol followed by a sign isn't a valid exponent.
231   run_test("2e+", 1, uint64_t(0x4000000000000000));
232   run_test("0x2p+", 3, uint64_t(0x4000000000000000));
233 
234   // This bug was in the handling of very large exponents in the exponent
235   // marker. Previously anything greater than 10,000 would be set to 10,000.
236   // This caused incorrect behavior if there were more than 10,000 '0's in the
237   // input number, and then a correspondingly large exponent. This test case has
238   // 24,744 zeroes.
239   run_test(
240       "0x."
241       "000000000000000000000000000000000000000000000000000000000000000000000000"
242       "000000000000000000000000000000000000000000000000000000000000000000000000"
243       "000000000000000000000000000000000000000000000000000000000000000000000000"
244       "000000000000000000000000000000000000000000000000000000000000000000000000"
245       "000000000000000000000000000000000000000000000000000000000000000000000000"
246       "000000000000000000000000000000000000000000000000000000000000000000000000"
247       "000000000000000000000000000000000000000000000000000000000000000000000000"
248       "000000000000000000000000000000000000000000000000000000000000000000000000"
249       "000000000000000000000000000000000000000000000000000000000000000000000000"
250       "000000000000000000000000000000000000000000000000000000000000000000000000"
251       "000000000000000000000000000000000000000000000000000000000000000000000000"
252       "000000000000000000000000000000000000000000000000000000000000000000000000"
253       "000000000000000000000000000000000000000000000000000000000000000000000000"
254       "000000000000000000000000000000000000000000000000000000000000000000000000"
255       "000000000000000000000000000000000000000000000000000000000000000000000000"
256       "000000000000000000000000000000000000000000000000000000000000000000000000"
257       "000000000000000000000000000000000000000000000000000000000000000000000000"
258       "000000000000000000000000000000000000000000000000000000000000000000000000"
259       "000000000000000000000000000000000000000000000000000000000000000000000000"
260       "000000000000000000000000000000000000000000000000000000000000000000000000"
261       "000000000000000000000000000000000000000000000000000000000000000000000000"
262       "000000000000000000000000000000000000000000000000000000000000000000000000"
263       "000000000000000000000000000000000000000000000000000000000000000000000000"
264       "000000000000000000000000000000000000000000000000000000000000000000000000"
265       "000000000000000000000000000000000000000000000000000000000000000000000000"
266       "000000000000000000000000000000000000000000000000000000000000000000000000"
267       "000000000000000000000000000000000000000000000000000000000000000000000000"
268       "000000000000000000000000000000000000000000000000000000000000000000000000"
269       "000000000000000000000000000000000000000000000000000000000000000000000000"
270       "000000000000000000000000000000000000000000000000000000000000000000000000"
271       "000000000000000000000000000000000000000000000000000000000000000000000000"
272       "000000000000000000000000000000000000000000000000000000000000000000000000"
273       "000000000000000000000000000000000000000000000000000000000000000000000000"
274       "000000000000000000000000000000000000000000000000000000000000000000000000"
275       "000000000000000000000000000000000000000000000000000000000000000000000000"
276       "000000000000000000000000000000000000000000000000000000000000000000000000"
277       "000000000000000000000000000000000000000000000000000000000000000000000000"
278       "000000000000000000000000000000000000000000000000000000000000000000000000"
279       "000000000000000000000000000000000000000000000000000000000000000000000000"
280       "000000000000000000000000000000000000000000000000000000000000000000000000"
281       "000000000000000000000000000000000000000000000000000000000000000000000000"
282       "000000000000000000000000000000000000000000000000000000000000000000000000"
283       "000000000000000000000000000000000000000000000000000000000000000000000000"
284       "000000000000000000000000000000000000000000000000000000000000000000000000"
285       "000000000000000000000000000000000000000000000000000000000000000000000000"
286       "000000000000000000000000000000000000000000000000000000000000000000000000"
287       "000000000000000000000000000000000000000000000000000000000000000000000000"
288       "000000000000000000000000000000000000000000000000000000000000000000000000"
289       "000000000000000000000000000000000000000000000000000000000000000000000000"
290       "000000000000000000000000000000000000000000000000000000000000000000000000"
291       "000000000000000000000000000000000000000000000000000000000000000000000000"
292       "000000000000000000000000000000000000000000000000000000000000000000000000"
293       "000000000000000000000000000000000000000000000000000000000000000000000000"
294       "000000000000000000000000000000000000000000000000000000000000000000000000"
295       "000000000000000000000000000000000000000000000000000000000000000000000000"
296       "000000000000000000000000000000000000000000000000000000000000000000000000"
297       "000000000000000000000000000000000000000000000000000000000000000000000000"
298       "000000000000000000000000000000000000000000000000000000000000000000000000"
299       "000000000000000000000000000000000000000000000000000000000000000000000000"
300       "000000000000000000000000000000000000000000000000000000000000000000000000"
301       "000000000000000000000000000000000000000000000000000000000000000000000000"
302       "000000000000000000000000000000000000000000000000000000000000000000000000"
303       "000000000000000000000000000000000000000000000000000000000000000000000000"
304       "000000000000000000000000000000000000000000000000000000000000000000000000"
305       "000000000000000000000000000000000000000000000000000000000000000000000000"
306       "000000000000000000000000000000000000000000000000000000000000000000000000"
307       "000000000000000000000000000000000000000000000000000000000000000000000000"
308       "000000000000000000000000000000000000000000000000000000000000000000000000"
309       "000000000000000000000000000000000000000000000000000000000000000000000000"
310       "000000000000000000000000000000000000000000000000000000000000000000000000"
311       "000000000000000000000000000000000000000000000000000000000000000000000000"
312       "000000000000000000000000000000000000000000000000000000000000000000000000"
313       "000000000000000000000000000000000000000000000000000000000000000000000000"
314       "000000000000000000000000000000000000000000000000000000000000000000000000"
315       "000000000000000000000000000000000000000000000000000000000000000000000000"
316       "000000000000000000000000000000000000000000000000000000000000000000000000"
317       "000000000000000000000000000000000000000000000000000000000000000000000000"
318       "000000000000000000000000000000000000000000000000000000000000000000000000"
319       "000000000000000000000000000000000000000000000000000000000000000000000000"
320       "000000000000000000000000000000000000000000000000000000000000000000000000"
321       "000000000000000000000000000000000000000000000000000000000000000000000000"
322       "000000000000000000000000000000000000000000000000000000000000000000000000"
323       "000000000000000000000000000000000000000000000000000000000000000000000000"
324       "000000000000000000000000000000000000000000000000000000000000000000000000"
325       "000000000000000000000000000000000000000000000000000000000000000000000000"
326       "000000000000000000000000000000000000000000000000000000000000000000000000"
327       "000000000000000000000000000000000000000000000000000000000000000000000000"
328       "000000000000000000000000000000000000000000000000000000000000000000000000"
329       "000000000000000000000000000000000000000000000000000000000000000000000000"
330       "000000000000000000000000000000000000000000000000000000000000000000000000"
331       "000000000000000000000000000000000000000000000000000000000000000000000000"
332       "000000000000000000000000000000000000000000000000000000000000000000000000"
333       "000000000000000000000000000000000000000000000000000000000000000000000000"
334       "000000000000000000000000000000000000000000000000000000000000000000000000"
335       "000000000000000000000000000000000000000000000000000000000000000000000000"
336       "000000000000000000000000000000000000000000000000000000000000000000000000"
337       "000000000000000000000000000000000000000000000000000000000000000000000000"
338       "000000000000000000000000000000000000000000000000000000000000000000000000"
339       "000000000000000000000000000000000000000000000000000000000000000000000000"
340       "000000000000000000000000000000000000000000000000000000000000000000000000"
341       "000000000000000000000000000000000000000000000000000000000000000000000000"
342       "000000000000000000000000000000000000000000000000000000000000000000000000"
343       "000000000000000000000000000000000000000000000000000000000000000000000000"
344       "000000000000000000000000000000000000000000000000000000000000000000000000"
345       "000000000000000000000000000000000000000000000000000000000000000000000000"
346       "000000000000000000000000000000000000000000000000000000000000000000000000"
347       "000000000000000000000000000000000000000000000000000000000000000000000000"
348       "000000000000000000000000000000000000000000000000000000000000000000000000"
349       "000000000000000000000000000000000000000000000000000000000000000000000000"
350       "000000000000000000000000000000000000000000000000000000000000000000000000"
351       "000000000000000000000000000000000000000000000000000000000000000000000000"
352       "000000000000000000000000000000000000000000000000000000000000000000000000"
353       "000000000000000000000000000000000000000000000000000000000000000000000000"
354       "000000000000000000000000000000000000000000000000000000000000000000000000"
355       "000000000000000000000000000000000000000000000000000000000000000000000000"
356       "000000000000000000000000000000000000000000000000000000000000000000000000"
357       "000000000000000000000000000000000000000000000000000000000000000000000000"
358       "000000000000000000000000000000000000000000000000000000000000000000000000"
359       "000000000000000000000000000000000000000000000000000000000000000000000000"
360       "000000000000000000000000000000000000000000000000000000000000000000000000"
361       "000000000000000000000000000000000000000000000000000000000000000000000000"
362       "000000000000000000000000000000000000000000000000000000000000000000000000"
363       "000000000000000000000000000000000000000000000000000000000000000000000000"
364       "000000000000000000000000000000000000000000000000000000000000000000000000"
365       "000000000000000000000000000000000000000000000000000000000000000000000000"
366       "000000000000000000000000000000000000000000000000000000000000000000000000"
367       "000000000000000000000000000000000000000000000000000000000000000000000000"
368       "000000000000000000000000000000000000000000000000000000000000000000000000"
369       "000000000000000000000000000000000000000000000000000000000000000000000000"
370       "000000000000000000000000000000000000000000000000000000000000000000000000"
371       "000000000000000000000000000000000000000000000000000000000000000000000000"
372       "000000000000000000000000000000000000000000000000000000000000000000000000"
373       "000000000000000000000000000000000000000000000000000000000000000000000000"
374       "000000000000000000000000000000000000000000000000000000000000000000000000"
375       "000000000000000000000000000000000000000000000000000000000000000000000000"
376       "000000000000000000000000000000000000000000000000000000000000000000000000"
377       "000000000000000000000000000000000000000000000000000000000000000000000000"
378       "000000000000000000000000000000000000000000000000000000000000000000000000"
379       "000000000000000000000000000000000000000000000000000000000000000000000000"
380       "000000000000000000000000000000000000000000000000000000000000000000000000"
381       "000000000000000000000000000000000000000000000000000000000000000000000000"
382       "000000000000000000000000000000000000000000000000000000000000000000000000"
383       "000000000000000000000000000000000000000000000000000000000000000000000000"
384       "000000000000000000000000000000000000000000000000000000000000000000000000"
385       "000000000000000000000000000000000000000000000000000000000000000000000000"
386       "000000000000000000000000000000000000000000000000000000000000000000000000"
387       "000000000000000000000000000000000000000000000000000000000000000000000000"
388       "000000000000000000000000000000000000000000000000000000000000000000000000"
389       "000000000000000000000000000000000000000000000000000000000000000000000000"
390       "000000000000000000000000000000000000000000000000000000000000000000000000"
391       "000000000000000000000000000000000000000000000000000000000000000000000000"
392       "000000000000000000000000000000000000000000000000000000000000000000000000"
393       "000000000000000000000000000000000000000000000000000000000000000000000000"
394       "000000000000000000000000000000000000000000000000000000000000000000000000"
395       "000000000000000000000000000000000000000000000000000000000000000000000000"
396       "000000000000000000000000000000000000000000000000000000000000000000000000"
397       "000000000000000000000000000000000000000000000000000000000000000000000000"
398       "000000000000000000000000000000000000000000000000000000000000000000000000"
399       "000000000000000000000000000000000000000000000000000000000000000000000000"
400       "000000000000000000000000000000000000000000000000000000000000000000000000"
401       "000000000000000000000000000000000000000000000000000000000000000000000000"
402       "000000000000000000000000000000000000000000000000000000000000000000000000"
403       "000000000000000000000000000000000000000000000000000000000000000000000000"
404       "000000000000000000000000000000000000000000000000000000000000000000000000"
405       "000000000000000000000000000000000000000000000000000000000000000000000000"
406       "000000000000000000000000000000000000000000000000000000000000000000000000"
407       "000000000000000000000000000000000000000000000000000000000000000000000000"
408       "000000000000000000000000000000000000000000000000000000000000000000000000"
409       "000000000000000000000000000000000000000000000000000000000000000000000000"
410       "000000000000000000000000000000000000000000000000000000000000000000000000"
411       "000000000000000000000000000000000000000000000000000000000000000000000000"
412       "000000000000000000000000000000000000000000000000000000000000000000000000"
413       "000000000000000000000000000000000000000000000000000000000000000000000000"
414       "000000000000000000000000000000000000000000000000000000000000000000000000"
415       "000000000000000000000000000000000000000000000000000000000000000000000000"
416       "000000000000000000000000000000000000000000000000000000000000000000000000"
417       "000000000000000000000000000000000000000000000000000000000000000000000000"
418       "000000000000000000000000000000000000000000000000000000000000000000000000"
419       "000000000000000000000000000000000000000000000000000000000000000000000000"
420       "000000000000000000000000000000000000000000000000000000000000000000000000"
421       "000000000000000000000000000000000000000000000000000000000000000000000000"
422       "000000000000000000000000000000000000000000000000000000000000000000000000"
423       "000000000000000000000000000000000000000000000000000000000000000000000000"
424       "000000000000000000000000000000000000000000000000000000000000000000000000"
425       "000000000000000000000000000000000000000000000000000000000000000000000000"
426       "000000000000000000000000000000000000000000000000000000000000000000000000"
427       "000000000000000000000000000000000000000000000000000000000000000000000000"
428       "000000000000000000000000000000000000000000000000000000000000000000000000"
429       "000000000000000000000000000000000000000000000000000000000000000000000000"
430       "000000000000000000000000000000000000000000000000000000000000000000000000"
431       "000000000000000000000000000000000000000000000000000000000000000000000000"
432       "000000000000000000000000000000000000000000000000000000000000000000000000"
433       "000000000000000000000000000000000000000000000000000000000000000000000000"
434       "000000000000000000000000000000000000000000000000000000000000000000000000"
435       "000000000000000000000000000000000000000000000000000000000000000000000000"
436       "000000000000000000000000000000000000000000000000000000000000000000000000"
437       "000000000000000000000000000000000000000000000000000000000000000000000000"
438       "000000000000000000000000000000000000000000000000000000000000000000000000"
439       "000000000000000000000000000000000000000000000000000000000000000000000000"
440       "000000000000000000000000000000000000000000000000000000000000000000000000"
441       "000000000000000000000000000000000000000000000000000000000000000000000000"
442       "000000000000000000000000000000000000000000000000000000000000000000000000"
443       "000000000000000000000000000000000000000000000000000000000000000000000000"
444       "000000000000000000000000000000000000000000000000000000000000000000000000"
445       "000000000000000000000000000000000000000000000000000000000000000000000000"
446       "000000000000000000000000000000000000000000000000000000000000000000000000"
447       "000000000000000000000000000000000000000000000000000000000000000000000000"
448       "000000000000000000000000000000000000000000000000000000000000000000000000"
449       "000000000000000000000000000000000000000000000000000000000000000000000000"
450       "000000000000000000000000000000000000000000000000000000000000000000000000"
451       "000000000000000000000000000000000000000000000000000000000000000000000000"
452       "000000000000000000000000000000000000000000000000000000000000000000000000"
453       "000000000000000000000000000000000000000000000000000000000000000000000000"
454       "000000000000000000000000000000000000000000000000000000000000000000000000"
455       "000000000000000000000000000000000000000000000000000000000000000000000000"
456       "000000000000000000000000000000000000000000000000000000000000000000000000"
457       "000000000000000000000000000000000000000000000000000000000000000000000000"
458       "000000000000000000000000000000000000000000000000000000000000000000000000"
459       "000000000000000000000000000000000000000000000000000000000000000000000000"
460       "000000000000000000000000000000000000000000000000000000000000000000000000"
461       "000000000000000000000000000000000000000000000000000000000000000000000000"
462       "000000000000000000000000000000000000000000000000000000000000000000000000"
463       "000000000000000000000000000000000000000000000000000000000000000000000000"
464       "000000000000000000000000000000000000000000000000000000000000000000000000"
465       "000000000000000000000000000000000000000000000000000000000000000000000000"
466       "000000000000000000000000000000000000000000000000000000000000000000000000"
467       "000000000000000000000000000000000000000000000000000000000000000000000000"
468       "000000000000000000000000000000000000000000000000000000000000000000000000"
469       "000000000000000000000000000000000000000000000000000000000000000000000000"
470       "000000000000000000000000000000000000000000000000000000000000000000000000"
471       "000000000000000000000000000000000000000000000000000000000000000000000000"
472       "000000000000000000000000000000000000000000000000000000000000000000000000"
473       "000000000000000000000000000000000000000000000000000000000000000000000000"
474       "000000000000000000000000000000000000000000000000000000000000000000000000"
475       "000000000000000000000000000000000000000000000000000000000000000000000000"
476       "000000000000000000000000000000000000000000000000000000000000000000000000"
477       "000000000000000000000000000000000000000000000000000000000000000000000000"
478       "000000000000000000000000000000000000000000000000000000000000000000000000"
479       "000000000000000000000000000000000000000000000000000000000000000000000000"
480       "000000000000000000000000000000000000000000000000000000000000000000000000"
481       "000000000000000000000000000000000000000000000000000000000000000000000000"
482       "000000000000000000000000000000000000000000000000000000000000000000000000"
483       "000000000000000000000000000000000000000000000000000000000000000000000000"
484       "000000000000000000000000000000000000000000000000000000000000000000000000"
485       "000000000000000000000000000000000000000000000000000000000000000000000000"
486       "000000000000000000000000000000000000000000000000000000000000000000000000"
487       "000000000000000000000000000000000000000000000000000000000000000000000000"
488       "000000000000000000000000000000000000000000000000000000000000000000000000"
489       "000000000000000000000000000000000000000000000000000000000000000000000000"
490       "000000000000000000000000000000000000000000000000000000000000000000000000"
491       "000000000000000000000000000000000000000000000000000000000000000000000000"
492       "000000000000000000000000000000000000000000000000000000000000000000000000"
493       "000000000000000000000000000000000000000000000000000000000000000000000000"
494       "000000000000000000000000000000000000000000000000000000000000000000000000"
495       "000000000000000000000000000000000000000000000000000000000000000000000000"
496       "000000000000000000000000000000000000000000000000000000000000000000000000"
497       "000000000000000000000000000000000000000000000000000000000000000000000000"
498       "000000000000000000000000000000000000000000000000000000000000000000000000"
499       "000000000000000000000000000000000000000000000000000000000000000000000000"
500       "000000000000000000000000000000000000000000000000000000000000000000000000"
501       "000000000000000000000000000000000000000000000000000000000000000000000000"
502       "000000000000000000000000000000000000000000000000000000000000000000000000"
503       "000000000000000000000000000000000000000000000000000000000000000000000000"
504       "000000000000000000000000000000000000000000000000000000000000000000000000"
505       "000000000000000000000000000000000000000000000000000000000000000000000000"
506       "000000000000000000000000000000000000000000000000000000000000000000000000"
507       "000000000000000000000000000000000000000000000000000000000000000000000000"
508       "000000000000000000000000000000000000000000000000000000000000000000000000"
509       "000000000000000000000000000000000000000000000000000000000000000000000000"
510       "000000000000000000000000000000000000000000000000000000000000000000000000"
511       "000000000000000000000000000000000000000000000000000000000000000000000000"
512       "000000000000000000000000000000000000000000000000000000000000000000000000"
513       "000000000000000000000000000000000000000000000000000000000000000000000000"
514       "000000000000000000000000000000000000000000000000000000000000000000000000"
515       "000000000000000000000000000000000000000000000000000000000000000000000000"
516       "000000000000000000000000000000000000000000000000000000000000000000000000"
517       "000000000000000000000000000000000000000000000000000000000000000000000000"
518       "000000000000000000000000000000000000000000000000000000000000000000000000"
519       "000000000000000000000000000000000000000000000000000000000000000000000000"
520       "000000000000000000000000000000000000000000000000000000000000000000000000"
521       "000000000000000000000000000000000000000000000000000000000000000000000000"
522       "000000000000000000000000000000000000000000000000000000000000000000000000"
523       "000000000000000000000000000000000000000000000000000000000000000000000000"
524       "000000000000000000000000000000000000000000000000000000000000000000000000"
525       "000000000000000000000000000000000000000000000000000000000000000000000000"
526       "000000000000000000000000000000000000000000000000000000000000000000000000"
527       "000000000000000000000000000000000000000000000000000000000000000000000000"
528       "000000000000000000000000000000000000000000000000000000000000000000000000"
529       "000000000000000000000000000000000000000000000000000000000000000000000000"
530       "000000000000000000000000000000000000000000000000000000000000000000000000"
531       "000000000000000000000000000000000000000000000000000000000000000000000000"
532       "000000000000000000000000000000000000000000000000000000000000000000000000"
533       "000000000000000000000000000000000000000000000000000000000000000000000000"
534       "000000000000000000000000000000000000000000000000000000000000000000000000"
535       "000000000000000000000000000000000000000000000000000000000000000000000000"
536       "000000000000000000000000000000000000000000000000000000000000000000000000"
537       "000000000000000000000000000000000000000000000000000000000000000000000000"
538       "000000000000000000000000000000000000000000000000000000000000000000000000"
539       "000000000000000000000000000000000000000000000000000000000000000000000000"
540       "000000000000000000000000000000000000000000000000000000000000000000000000"
541       "000000000000000000000000000000000000000000000000000000000000000000000000"
542       "000000000000000000000000000000000000000000000000000000000000000000000000"
543       "000000000000000000000000000000000000000000000000000000000000000000000000"
544       "000000000000000000000000000000000000000000000000000000000000000000000000"
545       "000000000000000000000000000000000000000000000000000000000000000000000000"
546       "000000000000000000000000000000000000000000000000000000000000000000000000"
547       "000000000000000000000000000000000000000000000000000000000000000000000000"
548       "000000000000000000000000000000000000000000000000000000000000000000000000"
549       "000000000000000000000000000000000000000000000000000000000000000000000000"
550       "000000000000000000000000000000000000000000000000000000000000000000000000"
551       "000000000000000000000000000000000000000000000000000000000000000000000000"
552       "000000000000000000000000000000000000000000000000000000000000000000000000"
553       "000000000000000000000000000000000000000000000000000000000000000000000000"
554       "000000000000000000000000000000000000000000000000000000000000000000000000"
555       "000000000000000000000000000000000000000000000000000000000000000000000000"
556       "000000000000000000000000000000000000000000000000000000000000000000000000"
557       "000000000000000000000000000000000000000000000000000000000000000000000000"
558       "000000000000000000000000000000000000000000000000000000000000000000000000"
559       "000000000000000000000000000000000000000000000000000000000000000000000000"
560       "000000000000000000000000000000000000000000000000000000000000000000000000"
561       "000000000000000000000000000000000000000000000000000000000000000000000000"
562       "000000000000000000000000000000000000000000000000000000000000000000000000"
563       "000000000000000000000000000000000000000000000000000000000000000000000000"
564       "000000000000000000000000000000000000000000000000000000000000000000000000"
565       "000000000000000000000000000000000000000000000000000000000000000000000000"
566       "000000000000000000000000000000000000000000000000000000000000000000000000"
567       "000000000000000000000000000000000000000000000000000000000000000000000000"
568       "000000000000000000000000000000000000000000000000000000000000000000000000"
569       "000000000000000000000000000000000000000000000000000000000000000000000000"
570       "000000000000000000000000000000000000000000000000000000000000000000000000"
571       "000000000000000000000000000000000000000000000000000000000000000000000000"
572       "000000000000000000000000000000000000000000000000000000000000000000000000"
573       "000000000000000000000000000000000000000000000000000000000000000000000000"
574       "000000000000000000000000000000000000000000000000000000000000000000000000"
575       "000000000000000000000000000000000000000000000000000000000000000000000000"
576       "000000000000000000000000000000000000000000000000000000000000000000000000"
577       "000000000000000000000000000000000000000000000000000000000000000000000000"
578       "000000000000000000000000000000000000000000000000000000000000000000000000"
579       "000000000000000000000000000000000000000000000000000000000000000000000000"
580       "000000000000000000000000000000000000000000000000000000000000000000000000"
581       "000000000000000000000000000000000000000000000000000000000000000000000000"
582       "000000000000000000000000000000000000000000000000000000000000000000000000"
583       "000000000000000000000000000000000000000000000000000000000000000000000000"
584       "000000000000000000000000000000000000000000000000fp551615",
585       24755, uint64_t(0x7ff0000000000000), ERANGE);
586 }
587