Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / libcxx / test / std / utilities / charconv / charconv.msvc / float_from_chars_test_cases.hpp
blobc0fbfcb132f7ef6f77d92524b52990ab93a124b1
1 // Copyright (c) Microsoft Corporation.
2 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
4 #ifndef FLOAT_FROM_CHARS_TEST_CASES_HPP
5 #define FLOAT_FROM_CHARS_TEST_CASES_HPP
7 #include <charconv>
8 #include <stddef.h>
9 #include <system_error>
10 using namespace std;
12 inline constexpr FloatFromCharsTestCase float_from_chars_test_cases[] = {
13 {"1.a0000400", chars_format::hex, 10, errc{}, 0x1.a00004p0f}, // exact
14 {"1.a0000401", chars_format::hex, 10, errc{}, 0x1.a00004p0f}, // below midpoint, round down
15 {"1.a0000500", chars_format::hex, 10, errc{}, 0x1.a00004p0f}, // midpoint, round down to even
16 {"1.a0000501", chars_format::hex, 10, errc{}, 0x1.a00006p0f}, // above midpoint, round up
17 {"1.a0000600", chars_format::hex, 10, errc{}, 0x1.a00006p0f}, // exact
18 {"1.a0000601", chars_format::hex, 10, errc{}, 0x1.a00006p0f}, // below midpoint, round down
19 {"1.a0000700", chars_format::hex, 10, errc{}, 0x1.a00008p0f}, // midpoint, round up to even
20 {"1.a0000701", chars_format::hex, 10, errc{}, 0x1.a00008p0f}, // above midpoint, round up
22 {"1.0000040", chars_format::hex, 9, errc{}, 0x1.000004p0f}, // exact
23 {"1.0000041", chars_format::hex, 9, errc{}, 0x1.000004p0f}, // below midpoint, round down
24 {"1.0000050", chars_format::hex, 9, errc{}, 0x1.000004p0f}, // midpoint, round down to even
25 {"1.0000051", chars_format::hex, 9, errc{}, 0x1.000006p0f}, // above midpoint, round up
26 {"1.0000060", chars_format::hex, 9, errc{}, 0x1.000006p0f}, // exact
27 {"1.0000061", chars_format::hex, 9, errc{}, 0x1.000006p0f}, // below midpoint, round down
28 {"1.0000070", chars_format::hex, 9, errc{}, 0x1.000008p0f}, // midpoint, round up to even
29 {"1.0000071", chars_format::hex, 9, errc{}, 0x1.000008p0f}, // above midpoint, round up
31 {"1.0000002384185791015625000000", chars_format::general, 30, errc{}, 0x1.000004p0f}, // exact
32 {"1.0000002421438694000244140625", chars_format::general, 30, errc{}, 0x1.000004p0f}, // below midpoint, round down
33 {"1.0000002980232238769531249999", chars_format::general, 30, errc{}, 0x1.000004p0f}, // below midpoint, round down
34 {"1.0000002980232238769531250000", chars_format::general, 30, errc{},
35 0x1.000004p0f}, // midpoint, round down to even
36 {"1.0000002980232238769531250001", chars_format::general, 30, errc{}, 0x1.000006p0f}, // above midpoint, round up
37 {"1.0000003017485141754150390625", chars_format::general, 30, errc{}, 0x1.000006p0f}, // above midpoint, round up
38 {"1.0000003576278686523437500000", chars_format::general, 30, errc{}, 0x1.000006p0f}, // exact
39 {"1.0000003613531589508056640625", chars_format::general, 30, errc{}, 0x1.000006p0f}, // below midpoint, round down
40 {"1.0000004172325134277343749999", chars_format::general, 30, errc{}, 0x1.000006p0f}, // below midpoint, round down
41 {"1.0000004172325134277343750000", chars_format::general, 30, errc{}, 0x1.000008p0f}, // midpoint, round up to even
42 {"1.0000004172325134277343750001", chars_format::general, 30, errc{}, 0x1.000008p0f}, // above midpoint, round up
43 {"1.0000004209578037261962890625", chars_format::general, 30, errc{}, 0x1.000008p0f}, // above midpoint, round up
45 // VSO-838635 "<charconv>: from_chars() mishandles certain subnormals"
46 // This bug didn't actually affect float, but we should have similar test cases.
47 // These values change on half-ulp boundaries:
48 // 1 * 2^-150 ~= 7.01e-46 (half-ulp between zero and min subnormal)
49 // 2 * 2^-150 ~= 1.40e-45 (min subnormal)
50 // 3 * 2^-150 ~= 2.10e-45 (half-ulp between min subnormal and next subnormal)
51 // 4 * 2^-150 ~= 2.80e-45 (next subnormal)
52 {"6."
53 "6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666"
54 "6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666"
55 "6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666"
56 "6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666"
57 "6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666"
58 "6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666"
59 "6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666"
60 "6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666"
61 "6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666"
62 "6666666666666666666e-46",
63 chars_format::scientific, 1006, errc::result_out_of_range, 0x0.000000p+0f},
64 {"7."
65 "7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777"
66 "7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777"
67 "7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777"
68 "7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777"
69 "7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777"
70 "7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777"
71 "7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777"
72 "7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777"
73 "7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777"
74 "7777777777777777777e-46",
75 chars_format::scientific, 1006, errc{}, 0x0.000002p-126f},
76 {"8."
77 "8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888"
78 "8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888"
79 "8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888"
80 "8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888"
81 "8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888"
82 "8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888"
83 "8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888"
84 "8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888"
85 "8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888"
86 "8888888888888888888e-46",
87 chars_format::scientific, 1006, errc{}, 0x0.000002p-126f},
88 {"9."
89 "9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
90 "9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
91 "9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
92 "9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
93 "9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
94 "9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
95 "9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
96 "9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
97 "9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
98 "9999999999999999999e-46",
99 chars_format::scientific, 1006, errc{}, 0x0.000002p-126f},
100 {"1."
101 "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
102 "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
103 "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
104 "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
105 "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
106 "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
107 "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
108 "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
109 "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
110 "1111111111111111111e-45",
111 chars_format::scientific, 1006, errc{}, 0x0.000002p-126f},
112 {"2."
113 "2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222"
114 "2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222"
115 "2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222"
116 "2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222"
117 "2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222"
118 "2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222"
119 "2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222"
120 "2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222"
121 "2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222"
122 "2222222222222222222e-45",
123 chars_format::scientific, 1006, errc{}, 0x0.000004p-126f},
125 // VSO-733765 "<charconv>: [Feedback] double std::from_chars behavior on exponent out of range"
126 // LWG-3081 "Floating point from_chars API does not distinguish between overflow and underflow"
127 // These test cases exercise every overflow/underflow codepath.
128 {"1e+1000", chars_format::scientific, 7, errc::result_out_of_range, float_inf},
129 {"1e-1000", chars_format::scientific, 7, errc::result_out_of_range, 0.0f},
130 {"1.ffffffp+127", chars_format::hex, 13, errc::result_out_of_range, float_inf},
131 {"1e+2000", chars_format::scientific, 7, errc::result_out_of_range, float_inf},
132 {"1e-2000", chars_format::scientific, 7, errc::result_out_of_range, 0.0f},
133 {"1e+9999", chars_format::scientific, 7, errc::result_out_of_range, float_inf},
134 {"1e-9999", chars_format::scientific, 7, errc::result_out_of_range, 0.0f},
135 {"10e+5199", chars_format::scientific, 8, errc::result_out_of_range, float_inf},
136 {"0.001e-5199", chars_format::scientific, 11, errc::result_out_of_range, 0.0f},
139 #endif // FLOAT_FROM_CHARS_TEST_CASES_HPP