1 //===----------------------------------------------------------------------===//
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
7 //===----------------------------------------------------------------------===//
9 // UNSUPPORTED: c++03, c++11, c++14, c++17
10 // UNSUPPORTED: no-localization
11 // UNSUPPORTED: GCC-ALWAYS_INLINE-FIXME
13 // XFAIL: availability-fp_to_chars-missing
15 // Bionic has minimal locale support, investigate this later.
16 // XFAIL: LIBCXX-ANDROID-FIXME
18 // REQUIRES: locale.en_US.UTF-8
22 // This test the locale-specific form for these formatting functions:
24 // // [format.functions], formatting functions
25 // template<class... Args>
26 // string format(string_view fmt, const Args&... args);
27 // template<class... Args>
28 // wstring format(wstring_view fmt, const Args&... args);
29 // template<class... Args>
30 // string format(const locale& loc, string_view fmt, const Args&... args);
31 // template<class... Args>
32 // wstring format(const locale& loc, wstring_view fmt, const Args&... args);
34 // string vformat(string_view fmt, format_args args);
35 // wstring vformat(wstring_view fmt, wformat_args args);
36 // string vformat(const locale& loc, string_view fmt, format_args args);
37 // wstring vformat(const locale& loc, wstring_view fmt, wformat_args args);
39 // template<class Out, class... Args>
40 // Out format_to(Out out, string_view fmt, const Args&... args);
41 // template<class Out, class... Args>
42 // Out format_to(Out out, wstring_view fmt, const Args&... args);
43 // template<class Out, class... Args>
44 // Out format_to(Out out, const locale& loc, string_view fmt, const Args&... args);
45 // template<class Out, class... Args>
46 // Out format_to(Out out, const locale& loc, wstring_view fmt, const Args&... args);
48 // template<class Out>
49 // Out vformat_to(Out out, string_view fmt, format_args args);
50 // template<class Out>
51 // Out vformat_to(Out out, wstring_view fmt, wformat_args args);
52 // template<class Out>
53 // Out vformat_to(Out out, const locale& loc, string_view fmt,
55 // template<class Out>
56 // Out vformat_to(Out out, const locale& loc, wstring_view fmt,
59 // template<class Out> struct format_to_n_result {
61 // iter_difference_t<Out> size;
64 // template<class Out, class... Args>
65 // format_to_n_result<Out> format_to_n(Out out, iter_difference_t<Out> n,
66 // string_view fmt, const Args&... args);
67 // template<class Out, class... Args>
68 // format_to_n_result<Out> format_to_n(Out out, iter_difference_t<Out> n,
69 // wstring_view fmt, const Args&... args);
70 // template<class Out, class... Args>
71 // format_to_n_result<Out> format_to_n(Out out, iter_difference_t<Out> n,
72 // const locale& loc, string_view fmt,
73 // const Args&... args);
74 // template<class Out, class... Args>
75 // format_to_n_result<Out> format_to_n(Out out, iter_difference_t<Out> n,
76 // const locale& loc, wstring_view fmt,
77 // const Args&... args);
79 // template<class... Args>
80 // size_t formatted_size(string_view fmt, const Args&... args);
81 // template<class... Args>
82 // size_t formatted_size(wstring_view fmt, const Args&... args);
83 // template<class... Args>
84 // size_t formatted_size(const locale& loc, string_view fmt, const Args&... args);
85 // template<class... Args>
86 // size_t formatted_size(const locale& loc, wstring_view fmt, const Args&... args);
93 #include "test_macros.h"
94 #include "make_string.h"
95 #include "platform_support.h" // locale name macros
96 #include "format_tests.h"
97 #include "string_literal.h"
98 #include "test_format_string.h"
99 #include "assert_macros.h"
100 #include "concat_macros.h"
102 #define STR(S) MAKE_STRING(CharT, S)
103 #define SV(S) MAKE_STRING_VIEW(CharT, S)
105 template <class CharT
>
109 struct numpunct
<char> : std::numpunct
<char> {
110 string_type
do_truename() const override
{ return "yes"; }
111 string_type
do_falsename() const override
{ return "no"; }
113 std::string
do_grouping() const override
{ return "\1\2\3\2\1"; };
114 char do_thousands_sep() const override
{ return '_'; }
115 char do_decimal_point() const override
{ return '#'; }
118 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
120 struct numpunct
<wchar_t> : std::numpunct
<wchar_t> {
121 string_type
do_truename() const override
{ return L
"yes"; }
122 string_type
do_falsename() const override
{ return L
"no"; }
124 std::string
do_grouping() const override
{ return "\1\2\3\2\1"; };
125 wchar_t do_thousands_sep() const override
{ return L
'_'; }
126 wchar_t do_decimal_point() const override
{ return L
'#'; }
130 template <class CharT
, class... Args
>
131 void test(std::basic_string_view
<CharT
> expected
, test_format_string
<CharT
, Args
...> fmt
, Args
&&... args
) {
134 std::basic_string
<CharT
> out
= std::format(fmt
, std::forward
<Args
>(args
)...);
135 TEST_REQUIRE(out
== expected
,
136 TEST_WRITE_CONCATENATED(
137 "\nFormat string ", fmt
.get(), "\nExpected output ", expected
, "\nActual output ", out
, '\n'));
141 std::basic_string
<CharT
> out
= std::vformat(fmt
.get(), std::make_format_args
<context_t
<CharT
>>(args
...));
142 assert(out
== expected
);
146 std::basic_string
<CharT
> out(expected
.size(), CharT(' '));
147 auto it
= std::format_to(out
.begin(), fmt
, std::forward
<Args
>(args
)...);
148 assert(it
== out
.end());
149 assert(out
== expected
);
151 // *** vformat_to ***
153 std::basic_string
<CharT
> out(expected
.size(), CharT(' '));
154 auto it
= std::vformat_to(out
.begin(), fmt
.get(), std::make_format_args
<context_t
<CharT
>>(args
...));
155 assert(it
== out
.end());
156 assert(out
== expected
);
158 // *** format_to_n ***
160 std::basic_string
<CharT
> out
;
161 std::format_to_n_result result
= std::format_to_n(std::back_inserter(out
), 1000, fmt
, std::forward
<Args
>(args
)...);
162 using diff_type
= decltype(result
.size
);
163 diff_type formatted_size
= std::formatted_size(fmt
, std::forward
<Args
>(args
)...);
164 diff_type size
= std::min
<diff_type
>(1000, formatted_size
);
166 assert(result
.size
== formatted_size
);
167 assert(out
== expected
.substr(0, size
));
169 // *** formatted_size ***
171 std::size_t size
= std::formatted_size(fmt
, std::forward
<Args
>(args
)...);
172 assert(size
== expected
.size());
176 template <class CharT
, class... Args
>
178 std::basic_string_view
<CharT
> expected
, std::locale loc
, test_format_string
<CharT
, Args
...> fmt
, Args
&&... args
) {
181 std::basic_string
<CharT
> out
= std::format(loc
, fmt
, std::forward
<Args
>(args
)...);
182 if constexpr (std::same_as
<CharT
, char>)
184 std::cerr
<< "\nFormat string " << fmt
.get() << "\nExpected output " << expected
<< "\nActual output "
186 assert(out
== expected
);
190 std::basic_string
<CharT
> out
= std::vformat(loc
, fmt
.get(), std::make_format_args
<context_t
<CharT
>>(args
...));
191 assert(out
== expected
);
195 std::basic_string
<CharT
> out(expected
.size(), CharT(' '));
196 auto it
= std::format_to(out
.begin(), loc
, fmt
, std::forward
<Args
>(args
)...);
197 assert(it
== out
.end());
198 assert(out
== expected
);
200 // *** vformat_to ***
202 std::basic_string
<CharT
> out(expected
.size(), CharT(' '));
203 auto it
= std::vformat_to(out
.begin(), loc
, fmt
.get(), std::make_format_args
<context_t
<CharT
>>(args
...));
204 assert(it
== out
.end());
205 assert(out
== expected
);
207 // *** format_to_n ***
209 std::basic_string
<CharT
> out
;
210 std::format_to_n_result result
=
211 std::format_to_n(std::back_inserter(out
), 1000, loc
, fmt
, std::forward
<Args
>(args
)...);
212 using diff_type
= decltype(result
.size
);
213 diff_type formatted_size
= std::formatted_size(loc
, fmt
, std::forward
<Args
>(args
)...);
214 diff_type size
= std::min
<diff_type
>(1000, formatted_size
);
216 assert(result
.size
== formatted_size
);
217 assert(out
== expected
.substr(0, size
));
219 // *** formatted_size ***
221 std::size_t size
= std::formatted_size(loc
, fmt
, std::forward
<Args
>(args
)...);
222 assert(size
== expected
.size());
226 #ifndef TEST_HAS_NO_UNICODE
227 template <class CharT
>
228 struct numpunct_unicode
;
231 struct numpunct_unicode
<char> : std::numpunct
<char> {
232 string_type
do_truename() const override
{ return "gültig"; }
233 string_type
do_falsename() const override
{ return "ungültig"; }
236 # ifndef TEST_HAS_NO_WIDE_CHARACTERS
238 struct numpunct_unicode
<wchar_t> : std::numpunct
<wchar_t> {
239 string_type
do_truename() const override
{ return L
"gültig"; }
240 string_type
do_falsename() const override
{ return L
"ungültig"; }
243 #endif // TEST_HAS_NO_UNICODE
245 template <class CharT
>
247 std::locale loc
= std::locale(std::locale(), new numpunct
<CharT
>());
249 std::locale::global(std::locale(LOCALE_en_US_UTF_8
));
250 assert(std::locale().name() == LOCALE_en_US_UTF_8
);
251 test(SV("true"), SV("{:L}"), true);
252 test(SV("false"), SV("{:L}"), false);
254 test(SV("yes"), loc
, SV("{:L}"), true);
255 test(SV("no"), loc
, SV("{:L}"), false);
257 std::locale::global(loc
);
258 test(SV("yes"), SV("{:L}"), true);
259 test(SV("no"), SV("{:L}"), false);
261 test(SV("true"), std::locale(LOCALE_en_US_UTF_8
), SV("{:L}"), true);
262 test(SV("false"), std::locale(LOCALE_en_US_UTF_8
), SV("{:L}"), false);
264 #ifndef TEST_HAS_NO_UNICODE
265 std::locale loc_unicode
= std::locale(std::locale(), new numpunct_unicode
<CharT
>());
267 test(SV("gültig"), loc_unicode
, SV("{:L}"), true);
268 test(SV("ungültig"), loc_unicode
, SV("{:L}"), false);
270 test(SV("gültig "), loc_unicode
, SV("{:9L}"), true);
271 test(SV("gültig!!!"), loc_unicode
, SV("{:!<9L}"), true);
272 test(SV("_gültig__"), loc_unicode
, SV("{:_^9L}"), true);
273 test(SV(" gültig"), loc_unicode
, SV("{:>9L}"), true);
274 #endif // TEST_HAS_NO_UNICODE
277 template <class CharT
>
278 void test_integer() {
279 std::locale loc
= std::locale(std::locale(), new numpunct
<CharT
>());
280 std::locale en_US
= std::locale(LOCALE_en_US_UTF_8
);
283 std::locale::global(en_US
);
284 test(SV("0"), SV("{:L}"), 0);
285 test(SV("1"), SV("{:L}"), 1);
286 test(SV("10"), SV("{:L}"), 10);
287 test(SV("100"), SV("{:L}"), 100);
288 test(SV("1,000"), SV("{:L}"), 1'000);
289 test(SV("10,000"), SV("{:L}"), 10'000);
290 test(SV("100,000"), SV("{:L}"), 100'000);
291 test(SV("1,000,000"), SV("{:L}"), 1'000'000);
292 test(SV("10,000,000"), SV("{:L}"), 10'000'000);
293 test(SV("100,000,000"), SV("{:L}"), 100'000'000);
294 test(SV("1,000,000,000"), SV("{:L}"), 1'000'000'000);
296 test(SV("-1"), SV("{:L}"), -1);
297 test(SV("-10"), SV("{:L}"), -10);
298 test(SV("-100"), SV("{:L}"), -100);
299 test(SV("-1,000"), SV("{:L}"), -1'000);
300 test(SV("-10,000"), SV("{:L}"), -10'000);
301 test(SV("-100,000"), SV("{:L}"), -100'000);
302 test(SV("-1,000,000"), SV("{:L}"), -1'000'000);
303 test(SV("-10,000,000"), SV("{:L}"), -10'000'000);
304 test(SV("-100,000,000"), SV("{:L}"), -100'000'000);
305 test(SV("-1,000,000,000"), SV("{:L}"), -1'000'000'000);
307 std::locale::global(loc
);
308 test(SV("0"), SV("{:L}"), 0);
309 test(SV("1"), SV("{:L}"), 1);
310 test(SV("1_0"), SV("{:L}"), 10);
311 test(SV("10_0"), SV("{:L}"), 100);
312 test(SV("1_00_0"), SV("{:L}"), 1'000);
313 test(SV("10_00_0"), SV("{:L}"), 10'000);
314 test(SV("100_00_0"), SV("{:L}"), 100'000);
315 test(SV("1_000_00_0"), SV("{:L}"), 1'000'000);
316 test(SV("10_000_00_0"), SV("{:L}"), 10'000'000);
317 test(SV("1_00_000_00_0"), SV("{:L}"), 100'000'000);
318 test(SV("1_0_00_000_00_0"), SV("{:L}"), 1'000'000'000);
320 test(SV("-1"), SV("{:L}"), -1);
321 test(SV("-1_0"), SV("{:L}"), -10);
322 test(SV("-10_0"), SV("{:L}"), -100);
323 test(SV("-1_00_0"), SV("{:L}"), -1'000);
324 test(SV("-10_00_0"), SV("{:L}"), -10'000);
325 test(SV("-100_00_0"), SV("{:L}"), -100'000);
326 test(SV("-1_000_00_0"), SV("{:L}"), -1'000'000);
327 test(SV("-10_000_00_0"), SV("{:L}"), -10'000'000);
328 test(SV("-1_00_000_00_0"), SV("{:L}"), -100'000'000);
329 test(SV("-1_0_00_000_00_0"), SV("{:L}"), -1'000'000'000);
331 test(SV("0"), en_US
, SV("{:L}"), 0);
332 test(SV("1"), en_US
, SV("{:L}"), 1);
333 test(SV("10"), en_US
, SV("{:L}"), 10);
334 test(SV("100"), en_US
, SV("{:L}"), 100);
335 test(SV("1,000"), en_US
, SV("{:L}"), 1'000);
336 test(SV("10,000"), en_US
, SV("{:L}"), 10'000);
337 test(SV("100,000"), en_US
, SV("{:L}"), 100'000);
338 test(SV("1,000,000"), en_US
, SV("{:L}"), 1'000'000);
339 test(SV("10,000,000"), en_US
, SV("{:L}"), 10'000'000);
340 test(SV("100,000,000"), en_US
, SV("{:L}"), 100'000'000);
341 test(SV("1,000,000,000"), en_US
, SV("{:L}"), 1'000'000'000);
343 test(SV("-1"), en_US
, SV("{:L}"), -1);
344 test(SV("-10"), en_US
, SV("{:L}"), -10);
345 test(SV("-100"), en_US
, SV("{:L}"), -100);
346 test(SV("-1,000"), en_US
, SV("{:L}"), -1'000);
347 test(SV("-10,000"), en_US
, SV("{:L}"), -10'000);
348 test(SV("-100,000"), en_US
, SV("{:L}"), -100'000);
349 test(SV("-1,000,000"), en_US
, SV("{:L}"), -1'000'000);
350 test(SV("-10,000,000"), en_US
, SV("{:L}"), -10'000'000);
351 test(SV("-100,000,000"), en_US
, SV("{:L}"), -100'000'000);
352 test(SV("-1,000,000,000"), en_US
, SV("{:L}"), -1'000'000'000);
354 std::locale::global(en_US
);
355 test(SV("0"), loc
, SV("{:L}"), 0);
356 test(SV("1"), loc
, SV("{:L}"), 1);
357 test(SV("1_0"), loc
, SV("{:L}"), 10);
358 test(SV("10_0"), loc
, SV("{:L}"), 100);
359 test(SV("1_00_0"), loc
, SV("{:L}"), 1'000);
360 test(SV("10_00_0"), loc
, SV("{:L}"), 10'000);
361 test(SV("100_00_0"), loc
, SV("{:L}"), 100'000);
362 test(SV("1_000_00_0"), loc
, SV("{:L}"), 1'000'000);
363 test(SV("10_000_00_0"), loc
, SV("{:L}"), 10'000'000);
364 test(SV("1_00_000_00_0"), loc
, SV("{:L}"), 100'000'000);
365 test(SV("1_0_00_000_00_0"), loc
, SV("{:L}"), 1'000'000'000);
367 test(SV("-1"), loc
, SV("{:L}"), -1);
368 test(SV("-1_0"), loc
, SV("{:L}"), -10);
369 test(SV("-10_0"), loc
, SV("{:L}"), -100);
370 test(SV("-1_00_0"), loc
, SV("{:L}"), -1'000);
371 test(SV("-10_00_0"), loc
, SV("{:L}"), -10'000);
372 test(SV("-100_00_0"), loc
, SV("{:L}"), -100'000);
373 test(SV("-1_000_00_0"), loc
, SV("{:L}"), -1'000'000);
374 test(SV("-10_000_00_0"), loc
, SV("{:L}"), -10'000'000);
375 test(SV("-1_00_000_00_0"), loc
, SV("{:L}"), -100'000'000);
376 test(SV("-1_0_00_000_00_0"), loc
, SV("{:L}"), -1'000'000'000);
379 std::locale::global(en_US
);
380 test(SV("0"), SV("{:Lb}"), 0b0);
381 test(SV("1"), SV("{:Lb}"), 0b1);
382 test(SV("1,000,000,000"), SV("{:Lb}"), 0b1'000'000'000);
384 test(SV("0b0"), SV("{:#Lb}"), 0b0);
385 test(SV("0b1"), SV("{:#Lb}"), 0b1);
386 test(SV("0b1,000,000,000"), SV("{:#Lb}"), 0b1'000'000'000);
388 test(SV("-1"), SV("{:LB}"), -0b1);
389 test(SV("-1,000,000,000"), SV("{:LB}"), -0b1'000'000'000);
391 test(SV("-0B1"), SV("{:#LB}"), -0b1);
392 test(SV("-0B1,000,000,000"), SV("{:#LB}"), -0b1'000'000'000);
394 std::locale::global(loc
);
395 test(SV("0"), SV("{:Lb}"), 0b0);
396 test(SV("1"), SV("{:Lb}"), 0b1);
397 test(SV("1_0_00_000_00_0"), SV("{:Lb}"), 0b1'000'000'000);
399 test(SV("0b0"), SV("{:#Lb}"), 0b0);
400 test(SV("0b1"), SV("{:#Lb}"), 0b1);
401 test(SV("0b1_0_00_000_00_0"), SV("{:#Lb}"), 0b1'000'000'000);
403 test(SV("-1"), SV("{:LB}"), -0b1);
404 test(SV("-1_0_00_000_00_0"), SV("{:LB}"), -0b1'000'000'000);
406 test(SV("-0B1"), SV("{:#LB}"), -0b1);
407 test(SV("-0B1_0_00_000_00_0"), SV("{:#LB}"), -0b1'000'000'000);
409 test(SV("0"), en_US
, SV("{:Lb}"), 0b0);
410 test(SV("1"), en_US
, SV("{:Lb}"), 0b1);
411 test(SV("1,000,000,000"), en_US
, SV("{:Lb}"), 0b1'000'000'000);
413 test(SV("0b0"), en_US
, SV("{:#Lb}"), 0b0);
414 test(SV("0b1"), en_US
, SV("{:#Lb}"), 0b1);
415 test(SV("0b1,000,000,000"), en_US
, SV("{:#Lb}"), 0b1'000'000'000);
417 test(SV("-1"), en_US
, SV("{:LB}"), -0b1);
418 test(SV("-1,000,000,000"), en_US
, SV("{:LB}"), -0b1'000'000'000);
420 test(SV("-0B1"), en_US
, SV("{:#LB}"), -0b1);
421 test(SV("-0B1,000,000,000"), en_US
, SV("{:#LB}"), -0b1'000'000'000);
423 std::locale::global(en_US
);
424 test(SV("0"), loc
, SV("{:Lb}"), 0b0);
425 test(SV("1"), loc
, SV("{:Lb}"), 0b1);
426 test(SV("1_0_00_000_00_0"), loc
, SV("{:Lb}"), 0b1'000'000'000);
428 test(SV("0b0"), loc
, SV("{:#Lb}"), 0b0);
429 test(SV("0b1"), loc
, SV("{:#Lb}"), 0b1);
430 test(SV("0b1_0_00_000_00_0"), loc
, SV("{:#Lb}"), 0b1'000'000'000);
432 test(SV("-1"), loc
, SV("{:LB}"), -0b1);
433 test(SV("-1_0_00_000_00_0"), loc
, SV("{:LB}"), -0b1'000'000'000);
435 test(SV("-0B1"), loc
, SV("{:#LB}"), -0b1);
436 test(SV("-0B1_0_00_000_00_0"), loc
, SV("{:#LB}"), -0b1'000'000'000);
439 std::locale::global(en_US
);
440 test(SV("0"), SV("{:Lo}"), 00);
441 test(SV("1"), SV("{:Lo}"), 01);
442 test(SV("1,000,000,000"), SV("{:Lo}"), 01'000'000'000);
444 test(SV("0"), SV("{:#Lo}"), 00);
445 test(SV("01"), SV("{:#Lo}"), 01);
446 test(SV("01,000,000,000"), SV("{:#Lo}"), 01'000'000'000);
448 test(SV("-1"), SV("{:Lo}"), -01);
449 test(SV("-1,000,000,000"), SV("{:Lo}"), -01'000'000'000);
451 test(SV("-01"), SV("{:#Lo}"), -01);
452 test(SV("-01,000,000,000"), SV("{:#Lo}"), -01'000'000'000);
454 std::locale::global(loc
);
455 test(SV("0"), SV("{:Lo}"), 00);
456 test(SV("1"), SV("{:Lo}"), 01);
457 test(SV("1_0_00_000_00_0"), SV("{:Lo}"), 01'000'000'000);
459 test(SV("0"), SV("{:#Lo}"), 00);
460 test(SV("01"), SV("{:#Lo}"), 01);
461 test(SV("01_0_00_000_00_0"), SV("{:#Lo}"), 01'000'000'000);
463 test(SV("-1"), SV("{:Lo}"), -01);
464 test(SV("-1_0_00_000_00_0"), SV("{:Lo}"), -01'000'000'000);
466 test(SV("-01"), SV("{:#Lo}"), -01);
467 test(SV("-01_0_00_000_00_0"), SV("{:#Lo}"), -01'000'000'000);
469 test(SV("0"), en_US
, SV("{:Lo}"), 00);
470 test(SV("1"), en_US
, SV("{:Lo}"), 01);
471 test(SV("1,000,000,000"), en_US
, SV("{:Lo}"), 01'000'000'000);
473 test(SV("0"), en_US
, SV("{:#Lo}"), 00);
474 test(SV("01"), en_US
, SV("{:#Lo}"), 01);
475 test(SV("01,000,000,000"), en_US
, SV("{:#Lo}"), 01'000'000'000);
477 test(SV("-1"), en_US
, SV("{:Lo}"), -01);
478 test(SV("-1,000,000,000"), en_US
, SV("{:Lo}"), -01'000'000'000);
480 test(SV("-01"), en_US
, SV("{:#Lo}"), -01);
481 test(SV("-01,000,000,000"), en_US
, SV("{:#Lo}"), -01'000'000'000);
483 std::locale::global(en_US
);
484 test(SV("0"), loc
, SV("{:Lo}"), 00);
485 test(SV("1"), loc
, SV("{:Lo}"), 01);
486 test(SV("1_0_00_000_00_0"), loc
, SV("{:Lo}"), 01'000'000'000);
488 test(SV("0"), loc
, SV("{:#Lo}"), 00);
489 test(SV("01"), loc
, SV("{:#Lo}"), 01);
490 test(SV("01_0_00_000_00_0"), loc
, SV("{:#Lo}"), 01'000'000'000);
492 test(SV("-1"), loc
, SV("{:Lo}"), -01);
493 test(SV("-1_0_00_000_00_0"), loc
, SV("{:Lo}"), -01'000'000'000);
495 test(SV("-01"), loc
, SV("{:#Lo}"), -01);
496 test(SV("-01_0_00_000_00_0"), loc
, SV("{:#Lo}"), -01'000'000'000);
498 // *** Hexadecimal ***
499 std::locale::global(en_US
);
500 test(SV("0"), SV("{:Lx}"), 0x0);
501 test(SV("1"), SV("{:Lx}"), 0x1);
502 test(SV("1,000,000,000"), SV("{:Lx}"), 0x1'000'000'000);
504 test(SV("0x0"), SV("{:#Lx}"), 0x0);
505 test(SV("0x1"), SV("{:#Lx}"), 0x1);
506 test(SV("0x1,000,000,000"), SV("{:#Lx}"), 0x1'000'000'000);
508 test(SV("-1"), SV("{:LX}"), -0x1);
509 test(SV("-1,000,000,000"), SV("{:LX}"), -0x1'000'000'000);
511 test(SV("-0X1"), SV("{:#LX}"), -0x1);
512 test(SV("-0X1,000,000,000"), SV("{:#LX}"), -0x1'000'000'000);
514 std::locale::global(loc
);
515 test(SV("0"), SV("{:Lx}"), 0x0);
516 test(SV("1"), SV("{:Lx}"), 0x1);
517 test(SV("1_0_00_000_00_0"), SV("{:Lx}"), 0x1'000'000'000);
519 test(SV("0x0"), SV("{:#Lx}"), 0x0);
520 test(SV("0x1"), SV("{:#Lx}"), 0x1);
521 test(SV("0x1_0_00_000_00_0"), SV("{:#Lx}"), 0x1'000'000'000);
523 test(SV("-1"), SV("{:LX}"), -0x1);
524 test(SV("-1_0_00_000_00_0"), SV("{:LX}"), -0x1'000'000'000);
526 test(SV("-0X1"), SV("{:#LX}"), -0x1);
527 test(SV("-0X1_0_00_000_00_0"), SV("{:#LX}"), -0x1'000'000'000);
529 test(SV("0"), en_US
, SV("{:Lx}"), 0x0);
530 test(SV("1"), en_US
, SV("{:Lx}"), 0x1);
531 test(SV("1,000,000,000"), en_US
, SV("{:Lx}"), 0x1'000'000'000);
533 test(SV("0x0"), en_US
, SV("{:#Lx}"), 0x0);
534 test(SV("0x1"), en_US
, SV("{:#Lx}"), 0x1);
535 test(SV("0x1,000,000,000"), en_US
, SV("{:#Lx}"), 0x1'000'000'000);
537 test(SV("-1"), en_US
, SV("{:LX}"), -0x1);
538 test(SV("-1,000,000,000"), en_US
, SV("{:LX}"), -0x1'000'000'000);
540 test(SV("-0X1"), en_US
, SV("{:#LX}"), -0x1);
541 test(SV("-0X1,000,000,000"), en_US
, SV("{:#LX}"), -0x1'000'000'000);
543 std::locale::global(en_US
);
544 test(SV("0"), loc
, SV("{:Lx}"), 0x0);
545 test(SV("1"), loc
, SV("{:Lx}"), 0x1);
546 test(SV("1_0_00_000_00_0"), loc
, SV("{:Lx}"), 0x1'000'000'000);
548 test(SV("0x0"), loc
, SV("{:#Lx}"), 0x0);
549 test(SV("0x1"), loc
, SV("{:#Lx}"), 0x1);
550 test(SV("0x1_0_00_000_00_0"), loc
, SV("{:#Lx}"), 0x1'000'000'000);
552 test(SV("-1"), loc
, SV("{:LX}"), -0x1);
553 test(SV("-1_0_00_000_00_0"), loc
, SV("{:LX}"), -0x1'000'000'000);
555 test(SV("-0X1"), loc
, SV("{:#LX}"), -0x1);
556 test(SV("-0X1_0_00_000_00_0"), loc
, SV("{:#LX}"), -0x1'000'000'000);
558 // *** align-fill & width ***
559 test(SV("4_2"), loc
, SV("{:L}"), 42);
561 test(SV(" 4_2"), loc
, SV("{:6L}"), 42);
562 test(SV("4_2 "), loc
, SV("{:<6L}"), 42);
563 test(SV(" 4_2 "), loc
, SV("{:^6L}"), 42);
564 test(SV(" 4_2"), loc
, SV("{:>6L}"), 42);
566 test(SV("4_2***"), loc
, SV("{:*<6L}"), 42);
567 test(SV("*4_2**"), loc
, SV("{:*^6L}"), 42);
568 test(SV("***4_2"), loc
, SV("{:*>6L}"), 42);
570 test(SV("4_a*****"), loc
, SV("{:*<8Lx}"), 0x4a);
571 test(SV("**4_a***"), loc
, SV("{:*^8Lx}"), 0x4a);
572 test(SV("*****4_a"), loc
, SV("{:*>8Lx}"), 0x4a);
574 test(SV("0x4_a***"), loc
, SV("{:*<#8Lx}"), 0x4a);
575 test(SV("*0x4_a**"), loc
, SV("{:*^#8Lx}"), 0x4a);
576 test(SV("***0x4_a"), loc
, SV("{:*>#8Lx}"), 0x4a);
578 test(SV("4_A*****"), loc
, SV("{:*<8LX}"), 0x4a);
579 test(SV("**4_A***"), loc
, SV("{:*^8LX}"), 0x4a);
580 test(SV("*****4_A"), loc
, SV("{:*>8LX}"), 0x4a);
582 test(SV("0X4_A***"), loc
, SV("{:*<#8LX}"), 0x4a);
583 test(SV("*0X4_A**"), loc
, SV("{:*^#8LX}"), 0x4a);
584 test(SV("***0X4_A"), loc
, SV("{:*>#8LX}"), 0x4a);
586 // Test whether zero padding is ignored
587 test(SV("4_2 "), loc
, SV("{:<06L}"), 42);
588 test(SV(" 4_2 "), loc
, SV("{:^06L}"), 42);
589 test(SV(" 4_2"), loc
, SV("{:>06L}"), 42);
591 // *** zero-padding & width ***
592 test(SV(" 4_2"), loc
, SV("{:6L}"), 42);
593 test(SV("0004_2"), loc
, SV("{:06L}"), 42);
594 test(SV("-004_2"), loc
, SV("{:06L}"), -42);
596 test(SV("000004_a"), loc
, SV("{:08Lx}"), 0x4a);
597 test(SV("0x0004_a"), loc
, SV("{:#08Lx}"), 0x4a);
598 test(SV("0X0004_A"), loc
, SV("{:#08LX}"), 0x4a);
600 test(SV("-00004_a"), loc
, SV("{:08Lx}"), -0x4a);
601 test(SV("-0x004_a"), loc
, SV("{:#08Lx}"), -0x4a);
602 test(SV("-0X004_A"), loc
, SV("{:#08LX}"), -0x4a);
605 template <class F
, class CharT
>
606 void test_floating_point_hex_lower_case() {
607 std::locale loc
= std::locale(std::locale(), new numpunct
<CharT
>());
608 std::locale en_US
= std::locale(LOCALE_en_US_UTF_8
);
611 std::locale::global(en_US
);
612 test(SV("1.23456p-3"), SV("{:La}"), F(0x1.23456p
-3));
613 test(SV("1.23456p-2"), SV("{:La}"), F(0x1.23456p
-2));
614 test(SV("1.23456p-1"), SV("{:La}"), F(0x1.23456p
-1));
615 test(SV("1.23456p+0"), SV("{:La}"), F(0x1.23456p0
));
616 test(SV("1.23456p+1"), SV("{:La}"), F(0x1.23456p
+1));
617 test(SV("1.23456p+2"), SV("{:La}"), F(0x1.23456p
+2));
618 test(SV("1.23456p+3"), SV("{:La}"), F(0x1.23456p
+3));
619 test(SV("1.23456p+20"), SV("{:La}"), F(0x1.23456p
+20));
621 std::locale::global(loc
);
622 test(SV("1#23456p-3"), SV("{:La}"), F(0x1.23456p
-3));
623 test(SV("1#23456p-2"), SV("{:La}"), F(0x1.23456p
-2));
624 test(SV("1#23456p-1"), SV("{:La}"), F(0x1.23456p
-1));
625 test(SV("1#23456p+0"), SV("{:La}"), F(0x1.23456p0
));
626 test(SV("1#23456p+1"), SV("{:La}"), F(0x1.23456p
+1));
627 test(SV("1#23456p+2"), SV("{:La}"), F(0x1.23456p
+2));
628 test(SV("1#23456p+3"), SV("{:La}"), F(0x1.23456p
+3));
629 test(SV("1#23456p+20"), SV("{:La}"), F(0x1.23456p
+20));
631 test(SV("1.23456p-3"), en_US
, SV("{:La}"), F(0x1.23456p
-3));
632 test(SV("1.23456p-2"), en_US
, SV("{:La}"), F(0x1.23456p
-2));
633 test(SV("1.23456p-1"), en_US
, SV("{:La}"), F(0x1.23456p
-1));
634 test(SV("1.23456p+0"), en_US
, SV("{:La}"), F(0x1.23456p0
));
635 test(SV("1.23456p+1"), en_US
, SV("{:La}"), F(0x1.23456p
+1));
636 test(SV("1.23456p+2"), en_US
, SV("{:La}"), F(0x1.23456p
+2));
637 test(SV("1.23456p+3"), en_US
, SV("{:La}"), F(0x1.23456p
+3));
638 test(SV("1.23456p+20"), en_US
, SV("{:La}"), F(0x1.23456p
+20));
640 std::locale::global(en_US
);
641 test(SV("1#23456p-3"), loc
, SV("{:La}"), F(0x1.23456p
-3));
642 test(SV("1#23456p-2"), loc
, SV("{:La}"), F(0x1.23456p
-2));
643 test(SV("1#23456p-1"), loc
, SV("{:La}"), F(0x1.23456p
-1));
644 test(SV("1#23456p+0"), loc
, SV("{:La}"), F(0x1.23456p0
));
645 test(SV("1#23456p+1"), loc
, SV("{:La}"), F(0x1.23456p
+1));
646 test(SV("1#23456p+2"), loc
, SV("{:La}"), F(0x1.23456p
+2));
647 test(SV("1#23456p+3"), loc
, SV("{:La}"), F(0x1.23456p
+3));
648 test(SV("1#23456p+20"), loc
, SV("{:La}"), F(0x1.23456p
+20));
650 // *** Fill, align, zero padding ***
651 std::locale::global(en_US
);
652 test(SV("1.23456p+3$$$"), SV("{:$<13La}"), F(0x1.23456p3
));
653 test(SV("$$$1.23456p+3"), SV("{:$>13La}"), F(0x1.23456p3
));
654 test(SV("$1.23456p+3$$"), SV("{:$^13La}"), F(0x1.23456p3
));
655 test(SV("0001.23456p+3"), SV("{:013La}"), F(0x1.23456p3
));
656 test(SV("-1.23456p+3$$$"), SV("{:$<14La}"), F(-0x1.23456p3
));
657 test(SV("$$$-1.23456p+3"), SV("{:$>14La}"), F(-0x1.23456p3
));
658 test(SV("$-1.23456p+3$$"), SV("{:$^14La}"), F(-0x1.23456p3
));
659 test(SV("-0001.23456p+3"), SV("{:014La}"), F(-0x1.23456p3
));
661 std::locale::global(loc
);
662 test(SV("1#23456p+3$$$"), SV("{:$<13La}"), F(0x1.23456p3
));
663 test(SV("$$$1#23456p+3"), SV("{:$>13La}"), F(0x1.23456p3
));
664 test(SV("$1#23456p+3$$"), SV("{:$^13La}"), F(0x1.23456p3
));
665 test(SV("0001#23456p+3"), SV("{:013La}"), F(0x1.23456p3
));
666 test(SV("-1#23456p+3$$$"), SV("{:$<14La}"), F(-0x1.23456p3
));
667 test(SV("$$$-1#23456p+3"), SV("{:$>14La}"), F(-0x1.23456p3
));
668 test(SV("$-1#23456p+3$$"), SV("{:$^14La}"), F(-0x1.23456p3
));
669 test(SV("-0001#23456p+3"), SV("{:014La}"), F(-0x1.23456p3
));
671 test(SV("1.23456p+3$$$"), en_US
, SV("{:$<13La}"), F(0x1.23456p3
));
672 test(SV("$$$1.23456p+3"), en_US
, SV("{:$>13La}"), F(0x1.23456p3
));
673 test(SV("$1.23456p+3$$"), en_US
, SV("{:$^13La}"), F(0x1.23456p3
));
674 test(SV("0001.23456p+3"), en_US
, SV("{:013La}"), F(0x1.23456p3
));
675 test(SV("-1.23456p+3$$$"), en_US
, SV("{:$<14La}"), F(-0x1.23456p3
));
676 test(SV("$$$-1.23456p+3"), en_US
, SV("{:$>14La}"), F(-0x1.23456p3
));
677 test(SV("$-1.23456p+3$$"), en_US
, SV("{:$^14La}"), F(-0x1.23456p3
));
678 test(SV("-0001.23456p+3"), en_US
, SV("{:014La}"), F(-0x1.23456p3
));
680 std::locale::global(en_US
);
681 test(SV("1#23456p+3$$$"), loc
, SV("{:$<13La}"), F(0x1.23456p3
));
682 test(SV("$$$1#23456p+3"), loc
, SV("{:$>13La}"), F(0x1.23456p3
));
683 test(SV("$1#23456p+3$$"), loc
, SV("{:$^13La}"), F(0x1.23456p3
));
684 test(SV("0001#23456p+3"), loc
, SV("{:013La}"), F(0x1.23456p3
));
685 test(SV("-1#23456p+3$$$"), loc
, SV("{:$<14La}"), F(-0x1.23456p3
));
686 test(SV("$$$-1#23456p+3"), loc
, SV("{:$>14La}"), F(-0x1.23456p3
));
687 test(SV("$-1#23456p+3$$"), loc
, SV("{:$^14La}"), F(-0x1.23456p3
));
688 test(SV("-0001#23456p+3"), loc
, SV("{:014La}"), F(-0x1.23456p3
));
691 template <class F
, class CharT
>
692 void test_floating_point_hex_upper_case() {
693 std::locale loc
= std::locale(std::locale(), new numpunct
<CharT
>());
694 std::locale en_US
= std::locale(LOCALE_en_US_UTF_8
);
697 std::locale::global(en_US
);
698 test(SV("1.23456P-3"), SV("{:LA}"), F(0x1.23456p
-3));
699 test(SV("1.23456P-2"), SV("{:LA}"), F(0x1.23456p
-2));
700 test(SV("1.23456P-1"), SV("{:LA}"), F(0x1.23456p
-1));
701 test(SV("1.23456P+0"), SV("{:LA}"), F(0x1.23456p0
));
702 test(SV("1.23456P+1"), SV("{:LA}"), F(0x1.23456p
+1));
703 test(SV("1.23456P+2"), SV("{:LA}"), F(0x1.23456p
+2));
704 test(SV("1.23456P+3"), SV("{:LA}"), F(0x1.23456p
+3));
705 test(SV("1.23456P+20"), SV("{:LA}"), F(0x1.23456p
+20));
707 std::locale::global(loc
);
708 test(SV("1#23456P-3"), SV("{:LA}"), F(0x1.23456p
-3));
709 test(SV("1#23456P-2"), SV("{:LA}"), F(0x1.23456p
-2));
710 test(SV("1#23456P-1"), SV("{:LA}"), F(0x1.23456p
-1));
711 test(SV("1#23456P+0"), SV("{:LA}"), F(0x1.23456p0
));
712 test(SV("1#23456P+1"), SV("{:LA}"), F(0x1.23456p
+1));
713 test(SV("1#23456P+2"), SV("{:LA}"), F(0x1.23456p
+2));
714 test(SV("1#23456P+3"), SV("{:LA}"), F(0x1.23456p
+3));
715 test(SV("1#23456P+20"), SV("{:LA}"), F(0x1.23456p
+20));
717 test(SV("1.23456P-3"), en_US
, SV("{:LA}"), F(0x1.23456p
-3));
718 test(SV("1.23456P-2"), en_US
, SV("{:LA}"), F(0x1.23456p
-2));
719 test(SV("1.23456P-1"), en_US
, SV("{:LA}"), F(0x1.23456p
-1));
720 test(SV("1.23456P+0"), en_US
, SV("{:LA}"), F(0x1.23456p0
));
721 test(SV("1.23456P+1"), en_US
, SV("{:LA}"), F(0x1.23456p
+1));
722 test(SV("1.23456P+2"), en_US
, SV("{:LA}"), F(0x1.23456p
+2));
723 test(SV("1.23456P+3"), en_US
, SV("{:LA}"), F(0x1.23456p
+3));
724 test(SV("1.23456P+20"), en_US
, SV("{:LA}"), F(0x1.23456p
+20));
726 std::locale::global(en_US
);
727 test(SV("1#23456P-3"), loc
, SV("{:LA}"), F(0x1.23456p
-3));
728 test(SV("1#23456P-2"), loc
, SV("{:LA}"), F(0x1.23456p
-2));
729 test(SV("1#23456P-1"), loc
, SV("{:LA}"), F(0x1.23456p
-1));
730 test(SV("1#23456P+0"), loc
, SV("{:LA}"), F(0x1.23456p0
));
731 test(SV("1#23456P+1"), loc
, SV("{:LA}"), F(0x1.23456p
+1));
732 test(SV("1#23456P+2"), loc
, SV("{:LA}"), F(0x1.23456p
+2));
733 test(SV("1#23456P+3"), loc
, SV("{:LA}"), F(0x1.23456p
+3));
734 test(SV("1#23456P+20"), loc
, SV("{:LA}"), F(0x1.23456p
+20));
736 // *** Fill, align, zero Padding ***
737 std::locale::global(en_US
);
738 test(SV("1.23456P+3$$$"), SV("{:$<13LA}"), F(0x1.23456p3
));
739 test(SV("$$$1.23456P+3"), SV("{:$>13LA}"), F(0x1.23456p3
));
740 test(SV("$1.23456P+3$$"), SV("{:$^13LA}"), F(0x1.23456p3
));
741 test(SV("0001.23456P+3"), SV("{:013LA}"), F(0x1.23456p3
));
742 test(SV("-1.23456P+3$$$"), SV("{:$<14LA}"), F(-0x1.23456p3
));
743 test(SV("$$$-1.23456P+3"), SV("{:$>14LA}"), F(-0x1.23456p3
));
744 test(SV("$-1.23456P+3$$"), SV("{:$^14LA}"), F(-0x1.23456p3
));
745 test(SV("-0001.23456P+3"), SV("{:014LA}"), F(-0x1.23456p3
));
747 std::locale::global(loc
);
748 test(SV("1#23456P+3$$$"), SV("{:$<13LA}"), F(0x1.23456p3
));
749 test(SV("$$$1#23456P+3"), SV("{:$>13LA}"), F(0x1.23456p3
));
750 test(SV("$1#23456P+3$$"), SV("{:$^13LA}"), F(0x1.23456p3
));
751 test(SV("0001#23456P+3"), SV("{:013LA}"), F(0x1.23456p3
));
752 test(SV("-1#23456P+3$$$"), SV("{:$<14LA}"), F(-0x1.23456p3
));
753 test(SV("$$$-1#23456P+3"), SV("{:$>14LA}"), F(-0x1.23456p3
));
754 test(SV("$-1#23456P+3$$"), SV("{:$^14LA}"), F(-0x1.23456p3
));
755 test(SV("-0001#23456P+3"), SV("{:014LA}"), F(-0x1.23456p3
));
757 test(SV("1.23456P+3$$$"), en_US
, SV("{:$<13LA}"), F(0x1.23456p3
));
758 test(SV("$$$1.23456P+3"), en_US
, SV("{:$>13LA}"), F(0x1.23456p3
));
759 test(SV("$1.23456P+3$$"), en_US
, SV("{:$^13LA}"), F(0x1.23456p3
));
760 test(SV("0001.23456P+3"), en_US
, SV("{:013LA}"), F(0x1.23456p3
));
761 test(SV("-1.23456P+3$$$"), en_US
, SV("{:$<14LA}"), F(-0x1.23456p3
));
762 test(SV("$$$-1.23456P+3"), en_US
, SV("{:$>14LA}"), F(-0x1.23456p3
));
763 test(SV("$-1.23456P+3$$"), en_US
, SV("{:$^14LA}"), F(-0x1.23456p3
));
764 test(SV("-0001.23456P+3"), en_US
, SV("{:014LA}"), F(-0x1.23456p3
));
766 std::locale::global(en_US
);
767 test(SV("1#23456P+3$$$"), loc
, SV("{:$<13LA}"), F(0x1.23456p3
));
768 test(SV("$$$1#23456P+3"), loc
, SV("{:$>13LA}"), F(0x1.23456p3
));
769 test(SV("$1#23456P+3$$"), loc
, SV("{:$^13LA}"), F(0x1.23456p3
));
770 test(SV("0001#23456P+3"), loc
, SV("{:013LA}"), F(0x1.23456p3
));
771 test(SV("-1#23456P+3$$$"), loc
, SV("{:$<14LA}"), F(-0x1.23456p3
));
772 test(SV("$$$-1#23456P+3"), loc
, SV("{:$>14LA}"), F(-0x1.23456p3
));
773 test(SV("$-1#23456P+3$$"), loc
, SV("{:$^14LA}"), F(-0x1.23456p3
));
774 test(SV("-0001#23456P+3"), loc
, SV("{:014LA}"), F(-0x1.23456p3
));
777 template <class F
, class CharT
>
778 void test_floating_point_hex_lower_case_precision() {
779 std::locale loc
= std::locale(std::locale(), new numpunct
<CharT
>());
780 std::locale en_US
= std::locale(LOCALE_en_US_UTF_8
);
783 std::locale::global(en_US
);
784 test(SV("1.234560p-3"), SV("{:.6La}"), F(0x1.23456p
-3));
785 test(SV("1.234560p-2"), SV("{:.6La}"), F(0x1.23456p
-2));
786 test(SV("1.234560p-1"), SV("{:.6La}"), F(0x1.23456p
-1));
787 test(SV("1.234560p+0"), SV("{:.6La}"), F(0x1.23456p0
));
788 test(SV("1.234560p+1"), SV("{:.6La}"), F(0x1.23456p
+1));
789 test(SV("1.234560p+2"), SV("{:.6La}"), F(0x1.23456p
+2));
790 test(SV("1.234560p+3"), SV("{:.6La}"), F(0x1.23456p
+3));
791 test(SV("1.234560p+20"), SV("{:.6La}"), F(0x1.23456p
+20));
793 std::locale::global(loc
);
794 test(SV("1#234560p-3"), SV("{:.6La}"), F(0x1.23456p
-3));
795 test(SV("1#234560p-2"), SV("{:.6La}"), F(0x1.23456p
-2));
796 test(SV("1#234560p-1"), SV("{:.6La}"), F(0x1.23456p
-1));
797 test(SV("1#234560p+0"), SV("{:.6La}"), F(0x1.23456p0
));
798 test(SV("1#234560p+1"), SV("{:.6La}"), F(0x1.23456p
+1));
799 test(SV("1#234560p+2"), SV("{:.6La}"), F(0x1.23456p
+2));
800 test(SV("1#234560p+3"), SV("{:.6La}"), F(0x1.23456p
+3));
801 test(SV("1#234560p+20"), SV("{:.6La}"), F(0x1.23456p
+20));
803 test(SV("1.234560p-3"), en_US
, SV("{:.6La}"), F(0x1.23456p
-3));
804 test(SV("1.234560p-2"), en_US
, SV("{:.6La}"), F(0x1.23456p
-2));
805 test(SV("1.234560p-1"), en_US
, SV("{:.6La}"), F(0x1.23456p
-1));
806 test(SV("1.234560p+0"), en_US
, SV("{:.6La}"), F(0x1.23456p0
));
807 test(SV("1.234560p+1"), en_US
, SV("{:.6La}"), F(0x1.23456p
+1));
808 test(SV("1.234560p+2"), en_US
, SV("{:.6La}"), F(0x1.23456p
+2));
809 test(SV("1.234560p+3"), en_US
, SV("{:.6La}"), F(0x1.23456p
+3));
810 test(SV("1.234560p+20"), en_US
, SV("{:.6La}"), F(0x1.23456p
+20));
812 std::locale::global(en_US
);
813 test(SV("1#234560p-3"), loc
, SV("{:.6La}"), F(0x1.23456p
-3));
814 test(SV("1#234560p-2"), loc
, SV("{:.6La}"), F(0x1.23456p
-2));
815 test(SV("1#234560p-1"), loc
, SV("{:.6La}"), F(0x1.23456p
-1));
816 test(SV("1#234560p+0"), loc
, SV("{:.6La}"), F(0x1.23456p0
));
817 test(SV("1#234560p+1"), loc
, SV("{:.6La}"), F(0x1.23456p
+1));
818 test(SV("1#234560p+2"), loc
, SV("{:.6La}"), F(0x1.23456p
+2));
819 test(SV("1#234560p+3"), loc
, SV("{:.6La}"), F(0x1.23456p
+3));
820 test(SV("1#234560p+20"), loc
, SV("{:.6La}"), F(0x1.23456p
+20));
822 // *** Fill, align, zero padding ***
823 std::locale::global(en_US
);
824 test(SV("1.234560p+3$$$"), SV("{:$<14.6La}"), F(0x1.23456p3
));
825 test(SV("$$$1.234560p+3"), SV("{:$>14.6La}"), F(0x1.23456p3
));
826 test(SV("$1.234560p+3$$"), SV("{:$^14.6La}"), F(0x1.23456p3
));
827 test(SV("0001.234560p+3"), SV("{:014.6La}"), F(0x1.23456p3
));
828 test(SV("-1.234560p+3$$$"), SV("{:$<15.6La}"), F(-0x1.23456p3
));
829 test(SV("$$$-1.234560p+3"), SV("{:$>15.6La}"), F(-0x1.23456p3
));
830 test(SV("$-1.234560p+3$$"), SV("{:$^15.6La}"), F(-0x1.23456p3
));
831 test(SV("-0001.234560p+3"), SV("{:015.6La}"), F(-0x1.23456p3
));
833 std::locale::global(loc
);
834 test(SV("1#234560p+3$$$"), SV("{:$<14.6La}"), F(0x1.23456p3
));
835 test(SV("$$$1#234560p+3"), SV("{:$>14.6La}"), F(0x1.23456p3
));
836 test(SV("$1#234560p+3$$"), SV("{:$^14.6La}"), F(0x1.23456p3
));
837 test(SV("0001#234560p+3"), SV("{:014.6La}"), F(0x1.23456p3
));
838 test(SV("-1#234560p+3$$$"), SV("{:$<15.6La}"), F(-0x1.23456p3
));
839 test(SV("$$$-1#234560p+3"), SV("{:$>15.6La}"), F(-0x1.23456p3
));
840 test(SV("$-1#234560p+3$$"), SV("{:$^15.6La}"), F(-0x1.23456p3
));
841 test(SV("-0001#234560p+3"), SV("{:015.6La}"), F(-0x1.23456p3
));
843 test(SV("1.234560p+3$$$"), en_US
, SV("{:$<14.6La}"), F(0x1.23456p3
));
844 test(SV("$$$1.234560p+3"), en_US
, SV("{:$>14.6La}"), F(0x1.23456p3
));
845 test(SV("$1.234560p+3$$"), en_US
, SV("{:$^14.6La}"), F(0x1.23456p3
));
846 test(SV("0001.234560p+3"), en_US
, SV("{:014.6La}"), F(0x1.23456p3
));
847 test(SV("-1.234560p+3$$$"), en_US
, SV("{:$<15.6La}"), F(-0x1.23456p3
));
848 test(SV("$$$-1.234560p+3"), en_US
, SV("{:$>15.6La}"), F(-0x1.23456p3
));
849 test(SV("$-1.234560p+3$$"), en_US
, SV("{:$^15.6La}"), F(-0x1.23456p3
));
850 test(SV("-0001.234560p+3"), en_US
, SV("{:015.6La}"), F(-0x1.23456p3
));
852 std::locale::global(en_US
);
853 test(SV("1#234560p+3$$$"), loc
, SV("{:$<14.6La}"), F(0x1.23456p3
));
854 test(SV("$$$1#234560p+3"), loc
, SV("{:$>14.6La}"), F(0x1.23456p3
));
855 test(SV("$1#234560p+3$$"), loc
, SV("{:$^14.6La}"), F(0x1.23456p3
));
856 test(SV("0001#234560p+3"), loc
, SV("{:014.6La}"), F(0x1.23456p3
));
857 test(SV("-1#234560p+3$$$"), loc
, SV("{:$<15.6La}"), F(-0x1.23456p3
));
858 test(SV("$$$-1#234560p+3"), loc
, SV("{:$>15.6La}"), F(-0x1.23456p3
));
859 test(SV("$-1#234560p+3$$"), loc
, SV("{:$^15.6La}"), F(-0x1.23456p3
));
860 test(SV("-0001#234560p+3"), loc
, SV("{:015.6La}"), F(-0x1.23456p3
));
863 template <class F
, class CharT
>
864 void test_floating_point_hex_upper_case_precision() {
865 std::locale loc
= std::locale(std::locale(), new numpunct
<CharT
>());
866 std::locale en_US
= std::locale(LOCALE_en_US_UTF_8
);
869 std::locale::global(en_US
);
870 test(SV("1.234560P-3"), SV("{:.6LA}"), F(0x1.23456p
-3));
871 test(SV("1.234560P-2"), SV("{:.6LA}"), F(0x1.23456p
-2));
872 test(SV("1.234560P-1"), SV("{:.6LA}"), F(0x1.23456p
-1));
873 test(SV("1.234560P+0"), SV("{:.6LA}"), F(0x1.23456p0
));
874 test(SV("1.234560P+1"), SV("{:.6LA}"), F(0x1.23456p
+1));
875 test(SV("1.234560P+2"), SV("{:.6LA}"), F(0x1.23456p
+2));
876 test(SV("1.234560P+3"), SV("{:.6LA}"), F(0x1.23456p
+3));
877 test(SV("1.234560P+20"), SV("{:.6LA}"), F(0x1.23456p
+20));
879 std::locale::global(loc
);
880 test(SV("1#234560P-3"), SV("{:.6LA}"), F(0x1.23456p
-3));
881 test(SV("1#234560P-2"), SV("{:.6LA}"), F(0x1.23456p
-2));
882 test(SV("1#234560P-1"), SV("{:.6LA}"), F(0x1.23456p
-1));
883 test(SV("1#234560P+0"), SV("{:.6LA}"), F(0x1.23456p0
));
884 test(SV("1#234560P+1"), SV("{:.6LA}"), F(0x1.23456p
+1));
885 test(SV("1#234560P+2"), SV("{:.6LA}"), F(0x1.23456p
+2));
886 test(SV("1#234560P+3"), SV("{:.6LA}"), F(0x1.23456p
+3));
887 test(SV("1#234560P+20"), SV("{:.6LA}"), F(0x1.23456p
+20));
889 test(SV("1.234560P-3"), en_US
, SV("{:.6LA}"), F(0x1.23456p
-3));
890 test(SV("1.234560P-2"), en_US
, SV("{:.6LA}"), F(0x1.23456p
-2));
891 test(SV("1.234560P-1"), en_US
, SV("{:.6LA}"), F(0x1.23456p
-1));
892 test(SV("1.234560P+0"), en_US
, SV("{:.6LA}"), F(0x1.23456p0
));
893 test(SV("1.234560P+1"), en_US
, SV("{:.6LA}"), F(0x1.23456p
+1));
894 test(SV("1.234560P+2"), en_US
, SV("{:.6LA}"), F(0x1.23456p
+2));
895 test(SV("1.234560P+3"), en_US
, SV("{:.6LA}"), F(0x1.23456p
+3));
896 test(SV("1.234560P+20"), en_US
, SV("{:.6LA}"), F(0x1.23456p
+20));
898 std::locale::global(en_US
);
899 test(SV("1#234560P-3"), loc
, SV("{:.6LA}"), F(0x1.23456p
-3));
900 test(SV("1#234560P-2"), loc
, SV("{:.6LA}"), F(0x1.23456p
-2));
901 test(SV("1#234560P-1"), loc
, SV("{:.6LA}"), F(0x1.23456p
-1));
902 test(SV("1#234560P+0"), loc
, SV("{:.6LA}"), F(0x1.23456p0
));
903 test(SV("1#234560P+1"), loc
, SV("{:.6LA}"), F(0x1.23456p
+1));
904 test(SV("1#234560P+2"), loc
, SV("{:.6LA}"), F(0x1.23456p
+2));
905 test(SV("1#234560P+3"), loc
, SV("{:.6LA}"), F(0x1.23456p
+3));
906 test(SV("1#234560P+20"), loc
, SV("{:.6LA}"), F(0x1.23456p
+20));
908 // *** Fill, align, zero Padding ***
909 std::locale::global(en_US
);
910 test(SV("1.234560P+3$$$"), SV("{:$<14.6LA}"), F(0x1.23456p3
));
911 test(SV("$$$1.234560P+3"), SV("{:$>14.6LA}"), F(0x1.23456p3
));
912 test(SV("$1.234560P+3$$"), SV("{:$^14.6LA}"), F(0x1.23456p3
));
913 test(SV("0001.234560P+3"), SV("{:014.6LA}"), F(0x1.23456p3
));
914 test(SV("-1.234560P+3$$$"), SV("{:$<15.6LA}"), F(-0x1.23456p3
));
915 test(SV("$$$-1.234560P+3"), SV("{:$>15.6LA}"), F(-0x1.23456p3
));
916 test(SV("$-1.234560P+3$$"), SV("{:$^15.6LA}"), F(-0x1.23456p3
));
917 test(SV("-0001.234560P+3"), SV("{:015.6LA}"), F(-0x1.23456p3
));
919 std::locale::global(loc
);
920 test(SV("1#234560P+3$$$"), SV("{:$<14.6LA}"), F(0x1.23456p3
));
921 test(SV("$$$1#234560P+3"), SV("{:$>14.6LA}"), F(0x1.23456p3
));
922 test(SV("$1#234560P+3$$"), SV("{:$^14.6LA}"), F(0x1.23456p3
));
923 test(SV("0001#234560P+3"), SV("{:014.6LA}"), F(0x1.23456p3
));
924 test(SV("-1#234560P+3$$$"), SV("{:$<15.6LA}"), F(-0x1.23456p3
));
925 test(SV("$$$-1#234560P+3"), SV("{:$>15.6LA}"), F(-0x1.23456p3
));
926 test(SV("$-1#234560P+3$$"), SV("{:$^15.6LA}"), F(-0x1.23456p3
));
927 test(SV("-0001#234560P+3"), SV("{:015.6LA}"), F(-0x1.23456p3
));
929 test(SV("1.234560P+3$$$"), en_US
, SV("{:$<14.6LA}"), F(0x1.23456p3
));
930 test(SV("$$$1.234560P+3"), en_US
, SV("{:$>14.6LA}"), F(0x1.23456p3
));
931 test(SV("$1.234560P+3$$"), en_US
, SV("{:$^14.6LA}"), F(0x1.23456p3
));
932 test(SV("0001.234560P+3"), en_US
, SV("{:014.6LA}"), F(0x1.23456p3
));
933 test(SV("-1.234560P+3$$$"), en_US
, SV("{:$<15.6LA}"), F(-0x1.23456p3
));
934 test(SV("$$$-1.234560P+3"), en_US
, SV("{:$>15.6LA}"), F(-0x1.23456p3
));
935 test(SV("$-1.234560P+3$$"), en_US
, SV("{:$^15.6LA}"), F(-0x1.23456p3
));
936 test(SV("-0001.234560P+3"), en_US
, SV("{:015.6LA}"), F(-0x1.23456p3
));
938 std::locale::global(en_US
);
939 test(SV("1#234560P+3$$$"), loc
, SV("{:$<14.6LA}"), F(0x1.23456p3
));
940 test(SV("$$$1#234560P+3"), loc
, SV("{:$>14.6LA}"), F(0x1.23456p3
));
941 test(SV("$1#234560P+3$$"), loc
, SV("{:$^14.6LA}"), F(0x1.23456p3
));
942 test(SV("0001#234560P+3"), loc
, SV("{:014.6LA}"), F(0x1.23456p3
));
943 test(SV("-1#234560P+3$$$"), loc
, SV("{:$<15.6LA}"), F(-0x1.23456p3
));
944 test(SV("$$$-1#234560P+3"), loc
, SV("{:$>15.6LA}"), F(-0x1.23456p3
));
945 test(SV("$-1#234560P+3$$"), loc
, SV("{:$^15.6LA}"), F(-0x1.23456p3
));
946 test(SV("-0001#234560P+3"), loc
, SV("{:015.6LA}"), F(-0x1.23456p3
));
949 template <class F
, class CharT
>
950 void test_floating_point_scientific_lower_case() {
951 std::locale loc
= std::locale(std::locale(), new numpunct
<CharT
>());
952 std::locale en_US
= std::locale(LOCALE_en_US_UTF_8
);
955 std::locale::global(en_US
);
956 test(SV("1.234567e-03"), SV("{:.6Le}"), F(1.234567e-3));
957 test(SV("1.234567e-02"), SV("{:.6Le}"), F(1.234567e-2));
958 test(SV("1.234567e-01"), SV("{:.6Le}"), F(1.234567e-1));
959 test(SV("1.234567e+00"), SV("{:.6Le}"), F(1.234567e0
));
960 test(SV("1.234567e+01"), SV("{:.6Le}"), F(1.234567e1
));
961 test(SV("1.234567e+02"), SV("{:.6Le}"), F(1.234567e2
));
962 test(SV("1.234567e+03"), SV("{:.6Le}"), F(1.234567e3
));
963 test(SV("1.234567e+20"), SV("{:.6Le}"), F(1.234567e20
));
964 test(SV("-1.234567e-03"), SV("{:.6Le}"), F(-1.234567e-3));
965 test(SV("-1.234567e-02"), SV("{:.6Le}"), F(-1.234567e-2));
966 test(SV("-1.234567e-01"), SV("{:.6Le}"), F(-1.234567e-1));
967 test(SV("-1.234567e+00"), SV("{:.6Le}"), F(-1.234567e0
));
968 test(SV("-1.234567e+01"), SV("{:.6Le}"), F(-1.234567e1
));
969 test(SV("-1.234567e+02"), SV("{:.6Le}"), F(-1.234567e2
));
970 test(SV("-1.234567e+03"), SV("{:.6Le}"), F(-1.234567e3
));
971 test(SV("-1.234567e+20"), SV("{:.6Le}"), F(-1.234567e20
));
973 std::locale::global(loc
);
974 test(SV("1#234567e-03"), SV("{:.6Le}"), F(1.234567e-3));
975 test(SV("1#234567e-02"), SV("{:.6Le}"), F(1.234567e-2));
976 test(SV("1#234567e-01"), SV("{:.6Le}"), F(1.234567e-1));
977 test(SV("1#234567e+00"), SV("{:.6Le}"), F(1.234567e0
));
978 test(SV("1#234567e+01"), SV("{:.6Le}"), F(1.234567e1
));
979 test(SV("1#234567e+02"), SV("{:.6Le}"), F(1.234567e2
));
980 test(SV("1#234567e+03"), SV("{:.6Le}"), F(1.234567e3
));
981 test(SV("1#234567e+20"), SV("{:.6Le}"), F(1.234567e20
));
982 test(SV("-1#234567e-03"), SV("{:.6Le}"), F(-1.234567e-3));
983 test(SV("-1#234567e-02"), SV("{:.6Le}"), F(-1.234567e-2));
984 test(SV("-1#234567e-01"), SV("{:.6Le}"), F(-1.234567e-1));
985 test(SV("-1#234567e+00"), SV("{:.6Le}"), F(-1.234567e0
));
986 test(SV("-1#234567e+01"), SV("{:.6Le}"), F(-1.234567e1
));
987 test(SV("-1#234567e+02"), SV("{:.6Le}"), F(-1.234567e2
));
988 test(SV("-1#234567e+03"), SV("{:.6Le}"), F(-1.234567e3
));
989 test(SV("-1#234567e+20"), SV("{:.6Le}"), F(-1.234567e20
));
991 test(SV("1.234567e-03"), en_US
, SV("{:.6Le}"), F(1.234567e-3));
992 test(SV("1.234567e-02"), en_US
, SV("{:.6Le}"), F(1.234567e-2));
993 test(SV("1.234567e-01"), en_US
, SV("{:.6Le}"), F(1.234567e-1));
994 test(SV("1.234567e+00"), en_US
, SV("{:.6Le}"), F(1.234567e0
));
995 test(SV("1.234567e+01"), en_US
, SV("{:.6Le}"), F(1.234567e1
));
996 test(SV("1.234567e+02"), en_US
, SV("{:.6Le}"), F(1.234567e2
));
997 test(SV("1.234567e+03"), en_US
, SV("{:.6Le}"), F(1.234567e3
));
998 test(SV("1.234567e+20"), en_US
, SV("{:.6Le}"), F(1.234567e20
));
999 test(SV("-1.234567e-03"), en_US
, SV("{:.6Le}"), F(-1.234567e-3));
1000 test(SV("-1.234567e-02"), en_US
, SV("{:.6Le}"), F(-1.234567e-2));
1001 test(SV("-1.234567e-01"), en_US
, SV("{:.6Le}"), F(-1.234567e-1));
1002 test(SV("-1.234567e+00"), en_US
, SV("{:.6Le}"), F(-1.234567e0
));
1003 test(SV("-1.234567e+01"), en_US
, SV("{:.6Le}"), F(-1.234567e1
));
1004 test(SV("-1.234567e+02"), en_US
, SV("{:.6Le}"), F(-1.234567e2
));
1005 test(SV("-1.234567e+03"), en_US
, SV("{:.6Le}"), F(-1.234567e3
));
1006 test(SV("-1.234567e+20"), en_US
, SV("{:.6Le}"), F(-1.234567e20
));
1008 std::locale::global(en_US
);
1009 test(SV("1#234567e-03"), loc
, SV("{:.6Le}"), F(1.234567e-3));
1010 test(SV("1#234567e-02"), loc
, SV("{:.6Le}"), F(1.234567e-2));
1011 test(SV("1#234567e-01"), loc
, SV("{:.6Le}"), F(1.234567e-1));
1012 test(SV("1#234567e+00"), loc
, SV("{:.6Le}"), F(1.234567e0
));
1013 test(SV("1#234567e+01"), loc
, SV("{:.6Le}"), F(1.234567e1
));
1014 test(SV("1#234567e+02"), loc
, SV("{:.6Le}"), F(1.234567e2
));
1015 test(SV("1#234567e+03"), loc
, SV("{:.6Le}"), F(1.234567e3
));
1016 test(SV("1#234567e+20"), loc
, SV("{:.6Le}"), F(1.234567e20
));
1017 test(SV("-1#234567e-03"), loc
, SV("{:.6Le}"), F(-1.234567e-3));
1018 test(SV("-1#234567e-02"), loc
, SV("{:.6Le}"), F(-1.234567e-2));
1019 test(SV("-1#234567e-01"), loc
, SV("{:.6Le}"), F(-1.234567e-1));
1020 test(SV("-1#234567e+00"), loc
, SV("{:.6Le}"), F(-1.234567e0
));
1021 test(SV("-1#234567e+01"), loc
, SV("{:.6Le}"), F(-1.234567e1
));
1022 test(SV("-1#234567e+02"), loc
, SV("{:.6Le}"), F(-1.234567e2
));
1023 test(SV("-1#234567e+03"), loc
, SV("{:.6Le}"), F(-1.234567e3
));
1024 test(SV("-1#234567e+20"), loc
, SV("{:.6Le}"), F(-1.234567e20
));
1026 // *** Fill, align, zero padding ***
1027 std::locale::global(en_US
);
1028 test(SV("1.234567e+03$$$"), SV("{:$<15.6Le}"), F(1.234567e3
));
1029 test(SV("$$$1.234567e+03"), SV("{:$>15.6Le}"), F(1.234567e3
));
1030 test(SV("$1.234567e+03$$"), SV("{:$^15.6Le}"), F(1.234567e3
));
1031 test(SV("0001.234567e+03"), SV("{:015.6Le}"), F(1.234567e3
));
1032 test(SV("-1.234567e+03$$$"), SV("{:$<16.6Le}"), F(-1.234567e3
));
1033 test(SV("$$$-1.234567e+03"), SV("{:$>16.6Le}"), F(-1.234567e3
));
1034 test(SV("$-1.234567e+03$$"), SV("{:$^16.6Le}"), F(-1.234567e3
));
1035 test(SV("-0001.234567e+03"), SV("{:016.6Le}"), F(-1.234567e3
));
1037 std::locale::global(loc
);
1038 test(SV("1#234567e+03$$$"), SV("{:$<15.6Le}"), F(1.234567e3
));
1039 test(SV("$$$1#234567e+03"), SV("{:$>15.6Le}"), F(1.234567e3
));
1040 test(SV("$1#234567e+03$$"), SV("{:$^15.6Le}"), F(1.234567e3
));
1041 test(SV("0001#234567e+03"), SV("{:015.6Le}"), F(1.234567e3
));
1042 test(SV("-1#234567e+03$$$"), SV("{:$<16.6Le}"), F(-1.234567e3
));
1043 test(SV("$$$-1#234567e+03"), SV("{:$>16.6Le}"), F(-1.234567e3
));
1044 test(SV("$-1#234567e+03$$"), SV("{:$^16.6Le}"), F(-1.234567e3
));
1045 test(SV("-0001#234567e+03"), SV("{:016.6Le}"), F(-1.234567e3
));
1047 test(SV("1.234567e+03$$$"), en_US
, SV("{:$<15.6Le}"), F(1.234567e3
));
1048 test(SV("$$$1.234567e+03"), en_US
, SV("{:$>15.6Le}"), F(1.234567e3
));
1049 test(SV("$1.234567e+03$$"), en_US
, SV("{:$^15.6Le}"), F(1.234567e3
));
1050 test(SV("0001.234567e+03"), en_US
, SV("{:015.6Le}"), F(1.234567e3
));
1051 test(SV("-1.234567e+03$$$"), en_US
, SV("{:$<16.6Le}"), F(-1.234567e3
));
1052 test(SV("$$$-1.234567e+03"), en_US
, SV("{:$>16.6Le}"), F(-1.234567e3
));
1053 test(SV("$-1.234567e+03$$"), en_US
, SV("{:$^16.6Le}"), F(-1.234567e3
));
1054 test(SV("-0001.234567e+03"), en_US
, SV("{:016.6Le}"), F(-1.234567e3
));
1056 std::locale::global(en_US
);
1057 test(SV("1#234567e+03$$$"), loc
, SV("{:$<15.6Le}"), F(1.234567e3
));
1058 test(SV("$$$1#234567e+03"), loc
, SV("{:$>15.6Le}"), F(1.234567e3
));
1059 test(SV("$1#234567e+03$$"), loc
, SV("{:$^15.6Le}"), F(1.234567e3
));
1060 test(SV("0001#234567e+03"), loc
, SV("{:015.6Le}"), F(1.234567e3
));
1061 test(SV("-1#234567e+03$$$"), loc
, SV("{:$<16.6Le}"), F(-1.234567e3
));
1062 test(SV("$$$-1#234567e+03"), loc
, SV("{:$>16.6Le}"), F(-1.234567e3
));
1063 test(SV("$-1#234567e+03$$"), loc
, SV("{:$^16.6Le}"), F(-1.234567e3
));
1064 test(SV("-0001#234567e+03"), loc
, SV("{:016.6Le}"), F(-1.234567e3
));
1067 template <class F
, class CharT
>
1068 void test_floating_point_scientific_upper_case() {
1069 std::locale loc
= std::locale(std::locale(), new numpunct
<CharT
>());
1070 std::locale en_US
= std::locale(LOCALE_en_US_UTF_8
);
1073 std::locale::global(en_US
);
1074 test(SV("1.234567E-03"), SV("{:.6LE}"), F(1.234567e-3));
1075 test(SV("1.234567E-02"), SV("{:.6LE}"), F(1.234567e-2));
1076 test(SV("1.234567E-01"), SV("{:.6LE}"), F(1.234567e-1));
1077 test(SV("1.234567E+00"), SV("{:.6LE}"), F(1.234567e0
));
1078 test(SV("1.234567E+01"), SV("{:.6LE}"), F(1.234567e1
));
1079 test(SV("1.234567E+02"), SV("{:.6LE}"), F(1.234567e2
));
1080 test(SV("1.234567E+03"), SV("{:.6LE}"), F(1.234567e3
));
1081 test(SV("1.234567E+20"), SV("{:.6LE}"), F(1.234567e20
));
1082 test(SV("-1.234567E-03"), SV("{:.6LE}"), F(-1.234567e-3));
1083 test(SV("-1.234567E-02"), SV("{:.6LE}"), F(-1.234567e-2));
1084 test(SV("-1.234567E-01"), SV("{:.6LE}"), F(-1.234567e-1));
1085 test(SV("-1.234567E+00"), SV("{:.6LE}"), F(-1.234567e0
));
1086 test(SV("-1.234567E+01"), SV("{:.6LE}"), F(-1.234567e1
));
1087 test(SV("-1.234567E+02"), SV("{:.6LE}"), F(-1.234567e2
));
1088 test(SV("-1.234567E+03"), SV("{:.6LE}"), F(-1.234567e3
));
1089 test(SV("-1.234567E+20"), SV("{:.6LE}"), F(-1.234567e20
));
1091 std::locale::global(loc
);
1092 test(SV("1#234567E-03"), SV("{:.6LE}"), F(1.234567e-3));
1093 test(SV("1#234567E-02"), SV("{:.6LE}"), F(1.234567e-2));
1094 test(SV("1#234567E-01"), SV("{:.6LE}"), F(1.234567e-1));
1095 test(SV("1#234567E+00"), SV("{:.6LE}"), F(1.234567e0
));
1096 test(SV("1#234567E+01"), SV("{:.6LE}"), F(1.234567e1
));
1097 test(SV("1#234567E+02"), SV("{:.6LE}"), F(1.234567e2
));
1098 test(SV("1#234567E+03"), SV("{:.6LE}"), F(1.234567e3
));
1099 test(SV("1#234567E+20"), SV("{:.6LE}"), F(1.234567e20
));
1100 test(SV("-1#234567E-03"), SV("{:.6LE}"), F(-1.234567e-3));
1101 test(SV("-1#234567E-02"), SV("{:.6LE}"), F(-1.234567e-2));
1102 test(SV("-1#234567E-01"), SV("{:.6LE}"), F(-1.234567e-1));
1103 test(SV("-1#234567E+00"), SV("{:.6LE}"), F(-1.234567e0
));
1104 test(SV("-1#234567E+01"), SV("{:.6LE}"), F(-1.234567e1
));
1105 test(SV("-1#234567E+02"), SV("{:.6LE}"), F(-1.234567e2
));
1106 test(SV("-1#234567E+03"), SV("{:.6LE}"), F(-1.234567e3
));
1107 test(SV("-1#234567E+20"), SV("{:.6LE}"), F(-1.234567e20
));
1109 test(SV("1.234567E-03"), en_US
, SV("{:.6LE}"), F(1.234567e-3));
1110 test(SV("1.234567E-02"), en_US
, SV("{:.6LE}"), F(1.234567e-2));
1111 test(SV("1.234567E-01"), en_US
, SV("{:.6LE}"), F(1.234567e-1));
1112 test(SV("1.234567E+00"), en_US
, SV("{:.6LE}"), F(1.234567e0
));
1113 test(SV("1.234567E+01"), en_US
, SV("{:.6LE}"), F(1.234567e1
));
1114 test(SV("1.234567E+02"), en_US
, SV("{:.6LE}"), F(1.234567e2
));
1115 test(SV("1.234567E+03"), en_US
, SV("{:.6LE}"), F(1.234567e3
));
1116 test(SV("1.234567E+20"), en_US
, SV("{:.6LE}"), F(1.234567e20
));
1117 test(SV("-1.234567E-03"), en_US
, SV("{:.6LE}"), F(-1.234567e-3));
1118 test(SV("-1.234567E-02"), en_US
, SV("{:.6LE}"), F(-1.234567e-2));
1119 test(SV("-1.234567E-01"), en_US
, SV("{:.6LE}"), F(-1.234567e-1));
1120 test(SV("-1.234567E+00"), en_US
, SV("{:.6LE}"), F(-1.234567e0
));
1121 test(SV("-1.234567E+01"), en_US
, SV("{:.6LE}"), F(-1.234567e1
));
1122 test(SV("-1.234567E+02"), en_US
, SV("{:.6LE}"), F(-1.234567e2
));
1123 test(SV("-1.234567E+03"), en_US
, SV("{:.6LE}"), F(-1.234567e3
));
1124 test(SV("-1.234567E+20"), en_US
, SV("{:.6LE}"), F(-1.234567e20
));
1126 std::locale::global(en_US
);
1127 test(SV("1#234567E-03"), loc
, SV("{:.6LE}"), F(1.234567e-3));
1128 test(SV("1#234567E-02"), loc
, SV("{:.6LE}"), F(1.234567e-2));
1129 test(SV("1#234567E-01"), loc
, SV("{:.6LE}"), F(1.234567e-1));
1130 test(SV("1#234567E+00"), loc
, SV("{:.6LE}"), F(1.234567e0
));
1131 test(SV("1#234567E+01"), loc
, SV("{:.6LE}"), F(1.234567e1
));
1132 test(SV("1#234567E+02"), loc
, SV("{:.6LE}"), F(1.234567e2
));
1133 test(SV("1#234567E+03"), loc
, SV("{:.6LE}"), F(1.234567e3
));
1134 test(SV("1#234567E+20"), loc
, SV("{:.6LE}"), F(1.234567e20
));
1135 test(SV("-1#234567E-03"), loc
, SV("{:.6LE}"), F(-1.234567e-3));
1136 test(SV("-1#234567E-02"), loc
, SV("{:.6LE}"), F(-1.234567e-2));
1137 test(SV("-1#234567E-01"), loc
, SV("{:.6LE}"), F(-1.234567e-1));
1138 test(SV("-1#234567E+00"), loc
, SV("{:.6LE}"), F(-1.234567e0
));
1139 test(SV("-1#234567E+01"), loc
, SV("{:.6LE}"), F(-1.234567e1
));
1140 test(SV("-1#234567E+02"), loc
, SV("{:.6LE}"), F(-1.234567e2
));
1141 test(SV("-1#234567E+03"), loc
, SV("{:.6LE}"), F(-1.234567e3
));
1142 test(SV("-1#234567E+20"), loc
, SV("{:.6LE}"), F(-1.234567e20
));
1144 // *** Fill, align, zero padding ***
1145 std::locale::global(en_US
);
1146 test(SV("1.234567E+03$$$"), SV("{:$<15.6LE}"), F(1.234567e3
));
1147 test(SV("$$$1.234567E+03"), SV("{:$>15.6LE}"), F(1.234567e3
));
1148 test(SV("$1.234567E+03$$"), SV("{:$^15.6LE}"), F(1.234567e3
));
1149 test(SV("0001.234567E+03"), SV("{:015.6LE}"), F(1.234567e3
));
1150 test(SV("-1.234567E+03$$$"), SV("{:$<16.6LE}"), F(-1.234567e3
));
1151 test(SV("$$$-1.234567E+03"), SV("{:$>16.6LE}"), F(-1.234567e3
));
1152 test(SV("$-1.234567E+03$$"), SV("{:$^16.6LE}"), F(-1.234567e3
));
1153 test(SV("-0001.234567E+03"), SV("{:016.6LE}"), F(-1.234567e3
));
1155 std::locale::global(loc
);
1156 test(SV("1#234567E+03$$$"), SV("{:$<15.6LE}"), F(1.234567e3
));
1157 test(SV("$$$1#234567E+03"), SV("{:$>15.6LE}"), F(1.234567e3
));
1158 test(SV("$1#234567E+03$$"), SV("{:$^15.6LE}"), F(1.234567e3
));
1159 test(SV("0001#234567E+03"), SV("{:015.6LE}"), F(1.234567e3
));
1160 test(SV("-1#234567E+03$$$"), SV("{:$<16.6LE}"), F(-1.234567e3
));
1161 test(SV("$$$-1#234567E+03"), SV("{:$>16.6LE}"), F(-1.234567e3
));
1162 test(SV("$-1#234567E+03$$"), SV("{:$^16.6LE}"), F(-1.234567e3
));
1163 test(SV("-0001#234567E+03"), SV("{:016.6LE}"), F(-1.234567e3
));
1165 test(SV("1.234567E+03$$$"), en_US
, SV("{:$<15.6LE}"), F(1.234567e3
));
1166 test(SV("$$$1.234567E+03"), en_US
, SV("{:$>15.6LE}"), F(1.234567e3
));
1167 test(SV("$1.234567E+03$$"), en_US
, SV("{:$^15.6LE}"), F(1.234567e3
));
1168 test(SV("0001.234567E+03"), en_US
, SV("{:015.6LE}"), F(1.234567e3
));
1169 test(SV("-1.234567E+03$$$"), en_US
, SV("{:$<16.6LE}"), F(-1.234567e3
));
1170 test(SV("$$$-1.234567E+03"), en_US
, SV("{:$>16.6LE}"), F(-1.234567e3
));
1171 test(SV("$-1.234567E+03$$"), en_US
, SV("{:$^16.6LE}"), F(-1.234567e3
));
1172 test(SV("-0001.234567E+03"), en_US
, SV("{:016.6LE}"), F(-1.234567e3
));
1174 std::locale::global(en_US
);
1175 test(SV("1#234567E+03$$$"), loc
, SV("{:$<15.6LE}"), F(1.234567e3
));
1176 test(SV("$$$1#234567E+03"), loc
, SV("{:$>15.6LE}"), F(1.234567e3
));
1177 test(SV("$1#234567E+03$$"), loc
, SV("{:$^15.6LE}"), F(1.234567e3
));
1178 test(SV("0001#234567E+03"), loc
, SV("{:015.6LE}"), F(1.234567e3
));
1179 test(SV("-1#234567E+03$$$"), loc
, SV("{:$<16.6LE}"), F(-1.234567e3
));
1180 test(SV("$$$-1#234567E+03"), loc
, SV("{:$>16.6LE}"), F(-1.234567e3
));
1181 test(SV("$-1#234567E+03$$"), loc
, SV("{:$^16.6LE}"), F(-1.234567e3
));
1182 test(SV("-0001#234567E+03"), loc
, SV("{:016.6LE}"), F(-1.234567e3
));
1185 template <class F
, class CharT
>
1186 void test_floating_point_fixed_lower_case() {
1187 std::locale loc
= std::locale(std::locale(), new numpunct
<CharT
>());
1188 std::locale en_US
= std::locale(LOCALE_en_US_UTF_8
);
1191 std::locale::global(en_US
);
1192 test(SV("0.000001"), SV("{:.6Lf}"), F(1.234567e-6));
1193 test(SV("0.000012"), SV("{:.6Lf}"), F(1.234567e-5));
1194 test(SV("0.000123"), SV("{:.6Lf}"), F(1.234567e-4));
1195 test(SV("0.001235"), SV("{:.6Lf}"), F(1.234567e-3));
1196 test(SV("0.012346"), SV("{:.6Lf}"), F(1.234567e-2));
1197 test(SV("0.123457"), SV("{:.6Lf}"), F(1.234567e-1));
1198 test(SV("1.234567"), SV("{:.6Lf}"), F(1.234567e0
));
1199 test(SV("12.345670"), SV("{:.6Lf}"), F(1.234567e1
));
1200 if constexpr (sizeof(F
) > sizeof(float)) {
1201 test(SV("123.456700"), SV("{:.6Lf}"), F(1.234567e2
));
1202 test(SV("1,234.567000"), SV("{:.6Lf}"), F(1.234567e3
));
1203 test(SV("12,345.670000"), SV("{:.6Lf}"), F(1.234567e4
));
1204 test(SV("123,456.700000"), SV("{:.6Lf}"), F(1.234567e5
));
1205 test(SV("1,234,567.000000"), SV("{:.6Lf}"), F(1.234567e6
));
1206 test(SV("12,345,670.000000"), SV("{:.6Lf}"), F(1.234567e7
));
1207 test(SV("123,456,700,000,000,000,000.000000"), SV("{:.6Lf}"), F(1.234567e20
));
1209 test(SV("-0.000001"), SV("{:.6Lf}"), F(-1.234567e-6));
1210 test(SV("-0.000012"), SV("{:.6Lf}"), F(-1.234567e-5));
1211 test(SV("-0.000123"), SV("{:.6Lf}"), F(-1.234567e-4));
1212 test(SV("-0.001235"), SV("{:.6Lf}"), F(-1.234567e-3));
1213 test(SV("-0.012346"), SV("{:.6Lf}"), F(-1.234567e-2));
1214 test(SV("-0.123457"), SV("{:.6Lf}"), F(-1.234567e-1));
1215 test(SV("-1.234567"), SV("{:.6Lf}"), F(-1.234567e0
));
1216 test(SV("-12.345670"), SV("{:.6Lf}"), F(-1.234567e1
));
1217 if constexpr (sizeof(F
) > sizeof(float)) {
1218 test(SV("-123.456700"), SV("{:.6Lf}"), F(-1.234567e2
));
1219 test(SV("-1,234.567000"), SV("{:.6Lf}"), F(-1.234567e3
));
1220 test(SV("-12,345.670000"), SV("{:.6Lf}"), F(-1.234567e4
));
1221 test(SV("-123,456.700000"), SV("{:.6Lf}"), F(-1.234567e5
));
1222 test(SV("-1,234,567.000000"), SV("{:.6Lf}"), F(-1.234567e6
));
1223 test(SV("-12,345,670.000000"), SV("{:.6Lf}"), F(-1.234567e7
));
1224 test(SV("-123,456,700,000,000,000,000.000000"), SV("{:.6Lf}"), F(-1.234567e20
));
1227 std::locale::global(loc
);
1228 test(SV("0#000001"), SV("{:.6Lf}"), F(1.234567e-6));
1229 test(SV("0#000012"), SV("{:.6Lf}"), F(1.234567e-5));
1230 test(SV("0#000123"), SV("{:.6Lf}"), F(1.234567e-4));
1231 test(SV("0#001235"), SV("{:.6Lf}"), F(1.234567e-3));
1232 test(SV("0#012346"), SV("{:.6Lf}"), F(1.234567e-2));
1233 test(SV("0#123457"), SV("{:.6Lf}"), F(1.234567e-1));
1234 test(SV("1#234567"), SV("{:.6Lf}"), F(1.234567e0
));
1235 test(SV("1_2#345670"), SV("{:.6Lf}"), F(1.234567e1
));
1236 if constexpr (sizeof(F
) > sizeof(float)) {
1237 test(SV("12_3#456700"), SV("{:.6Lf}"), F(1.234567e2
));
1238 test(SV("1_23_4#567000"), SV("{:.6Lf}"), F(1.234567e3
));
1239 test(SV("12_34_5#670000"), SV("{:.6Lf}"), F(1.234567e4
));
1240 test(SV("123_45_6#700000"), SV("{:.6Lf}"), F(1.234567e5
));
1241 test(SV("1_234_56_7#000000"), SV("{:.6Lf}"), F(1.234567e6
));
1242 test(SV("12_345_67_0#000000"), SV("{:.6Lf}"), F(1.234567e7
));
1243 test(SV("1_2_3_4_5_6_7_0_0_0_0_0_0_00_000_00_0#000000"), SV("{:.6Lf}"), F(1.234567e20
));
1245 test(SV("-0#000001"), SV("{:.6Lf}"), F(-1.234567e-6));
1246 test(SV("-0#000012"), SV("{:.6Lf}"), F(-1.234567e-5));
1247 test(SV("-0#000123"), SV("{:.6Lf}"), F(-1.234567e-4));
1248 test(SV("-0#001235"), SV("{:.6Lf}"), F(-1.234567e-3));
1249 test(SV("-0#012346"), SV("{:.6Lf}"), F(-1.234567e-2));
1250 test(SV("-0#123457"), SV("{:.6Lf}"), F(-1.234567e-1));
1251 test(SV("-1#234567"), SV("{:.6Lf}"), F(-1.234567e0
));
1252 test(SV("-1_2#345670"), SV("{:.6Lf}"), F(-1.234567e1
));
1253 if constexpr (sizeof(F
) > sizeof(float)) {
1254 test(SV("-12_3#456700"), SV("{:.6Lf}"), F(-1.234567e2
));
1255 test(SV("-1_23_4#567000"), SV("{:.6Lf}"), F(-1.234567e3
));
1256 test(SV("-12_34_5#670000"), SV("{:.6Lf}"), F(-1.234567e4
));
1257 test(SV("-123_45_6#700000"), SV("{:.6Lf}"), F(-1.234567e5
));
1258 test(SV("-1_234_56_7#000000"), SV("{:.6Lf}"), F(-1.234567e6
));
1259 test(SV("-12_345_67_0#000000"), SV("{:.6Lf}"), F(-1.234567e7
));
1260 test(SV("-1_2_3_4_5_6_7_0_0_0_0_0_0_00_000_00_0#000000"), SV("{:.6Lf}"), F(-1.234567e20
));
1263 test(SV("0.000001"), en_US
, SV("{:.6Lf}"), F(1.234567e-6));
1264 test(SV("0.000012"), en_US
, SV("{:.6Lf}"), F(1.234567e-5));
1265 test(SV("0.000123"), en_US
, SV("{:.6Lf}"), F(1.234567e-4));
1266 test(SV("0.001235"), en_US
, SV("{:.6Lf}"), F(1.234567e-3));
1267 test(SV("0.012346"), en_US
, SV("{:.6Lf}"), F(1.234567e-2));
1268 test(SV("0.123457"), en_US
, SV("{:.6Lf}"), F(1.234567e-1));
1269 test(SV("1.234567"), en_US
, SV("{:.6Lf}"), F(1.234567e0
));
1270 test(SV("12.345670"), en_US
, SV("{:.6Lf}"), F(1.234567e1
));
1271 if constexpr (sizeof(F
) > sizeof(float)) {
1272 test(SV("123.456700"), en_US
, SV("{:.6Lf}"), F(1.234567e2
));
1273 test(SV("1,234.567000"), en_US
, SV("{:.6Lf}"), F(1.234567e3
));
1274 test(SV("12,345.670000"), en_US
, SV("{:.6Lf}"), F(1.234567e4
));
1275 test(SV("123,456.700000"), en_US
, SV("{:.6Lf}"), F(1.234567e5
));
1276 test(SV("1,234,567.000000"), en_US
, SV("{:.6Lf}"), F(1.234567e6
));
1277 test(SV("12,345,670.000000"), en_US
, SV("{:.6Lf}"), F(1.234567e7
));
1278 test(SV("123,456,700,000,000,000,000.000000"), en_US
, SV("{:.6Lf}"), F(1.234567e20
));
1280 test(SV("-0.000001"), en_US
, SV("{:.6Lf}"), F(-1.234567e-6));
1281 test(SV("-0.000012"), en_US
, SV("{:.6Lf}"), F(-1.234567e-5));
1282 test(SV("-0.000123"), en_US
, SV("{:.6Lf}"), F(-1.234567e-4));
1283 test(SV("-0.001235"), en_US
, SV("{:.6Lf}"), F(-1.234567e-3));
1284 test(SV("-0.012346"), en_US
, SV("{:.6Lf}"), F(-1.234567e-2));
1285 test(SV("-0.123457"), en_US
, SV("{:.6Lf}"), F(-1.234567e-1));
1286 test(SV("-1.234567"), en_US
, SV("{:.6Lf}"), F(-1.234567e0
));
1287 test(SV("-12.345670"), en_US
, SV("{:.6Lf}"), F(-1.234567e1
));
1288 if constexpr (sizeof(F
) > sizeof(float)) {
1289 test(SV("-123.456700"), en_US
, SV("{:.6Lf}"), F(-1.234567e2
));
1290 test(SV("-1,234.567000"), en_US
, SV("{:.6Lf}"), F(-1.234567e3
));
1291 test(SV("-12,345.670000"), en_US
, SV("{:.6Lf}"), F(-1.234567e4
));
1292 test(SV("-123,456.700000"), en_US
, SV("{:.6Lf}"), F(-1.234567e5
));
1293 test(SV("-1,234,567.000000"), en_US
, SV("{:.6Lf}"), F(-1.234567e6
));
1294 test(SV("-12,345,670.000000"), en_US
, SV("{:.6Lf}"), F(-1.234567e7
));
1295 test(SV("-123,456,700,000,000,000,000.000000"), en_US
, SV("{:.6Lf}"), F(-1.234567e20
));
1298 std::locale::global(en_US
);
1299 test(SV("0#000001"), loc
, SV("{:.6Lf}"), F(1.234567e-6));
1300 test(SV("0#000012"), loc
, SV("{:.6Lf}"), F(1.234567e-5));
1301 test(SV("0#000123"), loc
, SV("{:.6Lf}"), F(1.234567e-4));
1302 test(SV("0#001235"), loc
, SV("{:.6Lf}"), F(1.234567e-3));
1303 test(SV("0#012346"), loc
, SV("{:.6Lf}"), F(1.234567e-2));
1304 test(SV("0#123457"), loc
, SV("{:.6Lf}"), F(1.234567e-1));
1305 test(SV("1#234567"), loc
, SV("{:.6Lf}"), F(1.234567e0
));
1306 test(SV("1_2#345670"), loc
, SV("{:.6Lf}"), F(1.234567e1
));
1307 if constexpr (sizeof(F
) > sizeof(float)) {
1308 test(SV("12_3#456700"), loc
, SV("{:.6Lf}"), F(1.234567e2
));
1309 test(SV("1_23_4#567000"), loc
, SV("{:.6Lf}"), F(1.234567e3
));
1310 test(SV("12_34_5#670000"), loc
, SV("{:.6Lf}"), F(1.234567e4
));
1311 test(SV("123_45_6#700000"), loc
, SV("{:.6Lf}"), F(1.234567e5
));
1312 test(SV("1_234_56_7#000000"), loc
, SV("{:.6Lf}"), F(1.234567e6
));
1313 test(SV("12_345_67_0#000000"), loc
, SV("{:.6Lf}"), F(1.234567e7
));
1314 test(SV("1_2_3_4_5_6_7_0_0_0_0_0_0_00_000_00_0#000000"), loc
, SV("{:.6Lf}"), F(1.234567e20
));
1316 test(SV("-0#000001"), loc
, SV("{:.6Lf}"), F(-1.234567e-6));
1317 test(SV("-0#000012"), loc
, SV("{:.6Lf}"), F(-1.234567e-5));
1318 test(SV("-0#000123"), loc
, SV("{:.6Lf}"), F(-1.234567e-4));
1319 test(SV("-0#001235"), loc
, SV("{:.6Lf}"), F(-1.234567e-3));
1320 test(SV("-0#012346"), loc
, SV("{:.6Lf}"), F(-1.234567e-2));
1321 test(SV("-0#123457"), loc
, SV("{:.6Lf}"), F(-1.234567e-1));
1322 test(SV("-1#234567"), loc
, SV("{:.6Lf}"), F(-1.234567e0
));
1323 test(SV("-1_2#345670"), loc
, SV("{:.6Lf}"), F(-1.234567e1
));
1324 if constexpr (sizeof(F
) > sizeof(float)) {
1325 test(SV("-12_3#456700"), loc
, SV("{:.6Lf}"), F(-1.234567e2
));
1326 test(SV("-1_23_4#567000"), loc
, SV("{:.6Lf}"), F(-1.234567e3
));
1327 test(SV("-12_34_5#670000"), loc
, SV("{:.6Lf}"), F(-1.234567e4
));
1328 test(SV("-123_45_6#700000"), loc
, SV("{:.6Lf}"), F(-1.234567e5
));
1329 test(SV("-1_234_56_7#000000"), loc
, SV("{:.6Lf}"), F(-1.234567e6
));
1330 test(SV("-12_345_67_0#000000"), loc
, SV("{:.6Lf}"), F(-1.234567e7
));
1331 test(SV("-1_2_3_4_5_6_7_0_0_0_0_0_0_00_000_00_0#000000"), loc
, SV("{:.6Lf}"), F(-1.234567e20
));
1334 // *** Fill, align, zero padding ***
1335 if constexpr (sizeof(F
) > sizeof(float)) {
1336 std::locale::global(en_US
);
1337 test(SV("1,234.567000$$$"), SV("{:$<15.6Lf}"), F(1.234567e3
));
1338 test(SV("$$$1,234.567000"), SV("{:$>15.6Lf}"), F(1.234567e3
));
1339 test(SV("$1,234.567000$$"), SV("{:$^15.6Lf}"), F(1.234567e3
));
1340 test(SV("0001,234.567000"), SV("{:015.6Lf}"), F(1.234567e3
));
1341 test(SV("-1,234.567000$$$"), SV("{:$<16.6Lf}"), F(-1.234567e3
));
1342 test(SV("$$$-1,234.567000"), SV("{:$>16.6Lf}"), F(-1.234567e3
));
1343 test(SV("$-1,234.567000$$"), SV("{:$^16.6Lf}"), F(-1.234567e3
));
1344 test(SV("-0001,234.567000"), SV("{:016.6Lf}"), F(-1.234567e3
));
1346 std::locale::global(loc
);
1347 test(SV("1_23_4#567000$$$"), SV("{:$<16.6Lf}"), F(1.234567e3
));
1348 test(SV("$$$1_23_4#567000"), SV("{:$>16.6Lf}"), F(1.234567e3
));
1349 test(SV("$1_23_4#567000$$"), SV("{:$^16.6Lf}"), F(1.234567e3
));
1350 test(SV("0001_23_4#567000"), SV("{:016.6Lf}"), F(1.234567e3
));
1351 test(SV("-1_23_4#567000$$$"), SV("{:$<17.6Lf}"), F(-1.234567e3
));
1352 test(SV("$$$-1_23_4#567000"), SV("{:$>17.6Lf}"), F(-1.234567e3
));
1353 test(SV("$-1_23_4#567000$$"), SV("{:$^17.6Lf}"), F(-1.234567e3
));
1354 test(SV("-0001_23_4#567000"), SV("{:017.6Lf}"), F(-1.234567e3
));
1356 test(SV("1,234.567000$$$"), en_US
, SV("{:$<15.6Lf}"), F(1.234567e3
));
1357 test(SV("$$$1,234.567000"), en_US
, SV("{:$>15.6Lf}"), F(1.234567e3
));
1358 test(SV("$1,234.567000$$"), en_US
, SV("{:$^15.6Lf}"), F(1.234567e3
));
1359 test(SV("0001,234.567000"), en_US
, SV("{:015.6Lf}"), F(1.234567e3
));
1360 test(SV("-1,234.567000$$$"), en_US
, SV("{:$<16.6Lf}"), F(-1.234567e3
));
1361 test(SV("$$$-1,234.567000"), en_US
, SV("{:$>16.6Lf}"), F(-1.234567e3
));
1362 test(SV("$-1,234.567000$$"), en_US
, SV("{:$^16.6Lf}"), F(-1.234567e3
));
1363 test(SV("-0001,234.567000"), en_US
, SV("{:016.6Lf}"), F(-1.234567e3
));
1365 std::locale::global(en_US
);
1366 test(SV("1_23_4#567000$$$"), loc
, SV("{:$<16.6Lf}"), F(1.234567e3
));
1367 test(SV("$$$1_23_4#567000"), loc
, SV("{:$>16.6Lf}"), F(1.234567e3
));
1368 test(SV("$1_23_4#567000$$"), loc
, SV("{:$^16.6Lf}"), F(1.234567e3
));
1369 test(SV("0001_23_4#567000"), loc
, SV("{:016.6Lf}"), F(1.234567e3
));
1370 test(SV("-1_23_4#567000$$$"), loc
, SV("{:$<17.6Lf}"), F(-1.234567e3
));
1371 test(SV("$$$-1_23_4#567000"), loc
, SV("{:$>17.6Lf}"), F(-1.234567e3
));
1372 test(SV("$-1_23_4#567000$$"), loc
, SV("{:$^17.6Lf}"), F(-1.234567e3
));
1373 test(SV("-0001_23_4#567000"), loc
, SV("{:017.6Lf}"), F(-1.234567e3
));
1377 template <class F
, class CharT
>
1378 void test_floating_point_fixed_upper_case() {
1379 std::locale loc
= std::locale(std::locale(), new numpunct
<CharT
>());
1380 std::locale en_US
= std::locale(LOCALE_en_US_UTF_8
);
1383 std::locale::global(en_US
);
1384 test(SV("0.000001"), SV("{:.6Lf}"), F(1.234567e-6));
1385 test(SV("0.000012"), SV("{:.6Lf}"), F(1.234567e-5));
1386 test(SV("0.000123"), SV("{:.6Lf}"), F(1.234567e-4));
1387 test(SV("0.001235"), SV("{:.6Lf}"), F(1.234567e-3));
1388 test(SV("0.012346"), SV("{:.6Lf}"), F(1.234567e-2));
1389 test(SV("0.123457"), SV("{:.6Lf}"), F(1.234567e-1));
1390 test(SV("1.234567"), SV("{:.6Lf}"), F(1.234567e0
));
1391 test(SV("12.345670"), SV("{:.6Lf}"), F(1.234567e1
));
1392 if constexpr (sizeof(F
) > sizeof(float)) {
1393 test(SV("123.456700"), SV("{:.6Lf}"), F(1.234567e2
));
1394 test(SV("1,234.567000"), SV("{:.6Lf}"), F(1.234567e3
));
1395 test(SV("12,345.670000"), SV("{:.6Lf}"), F(1.234567e4
));
1396 test(SV("123,456.700000"), SV("{:.6Lf}"), F(1.234567e5
));
1397 test(SV("1,234,567.000000"), SV("{:.6Lf}"), F(1.234567e6
));
1398 test(SV("12,345,670.000000"), SV("{:.6Lf}"), F(1.234567e7
));
1399 test(SV("123,456,700,000,000,000,000.000000"), SV("{:.6Lf}"), F(1.234567e20
));
1401 test(SV("-0.000001"), SV("{:.6Lf}"), F(-1.234567e-6));
1402 test(SV("-0.000012"), SV("{:.6Lf}"), F(-1.234567e-5));
1403 test(SV("-0.000123"), SV("{:.6Lf}"), F(-1.234567e-4));
1404 test(SV("-0.001235"), SV("{:.6Lf}"), F(-1.234567e-3));
1405 test(SV("-0.012346"), SV("{:.6Lf}"), F(-1.234567e-2));
1406 test(SV("-0.123457"), SV("{:.6Lf}"), F(-1.234567e-1));
1407 test(SV("-1.234567"), SV("{:.6Lf}"), F(-1.234567e0
));
1408 test(SV("-12.345670"), SV("{:.6Lf}"), F(-1.234567e1
));
1409 if constexpr (sizeof(F
) > sizeof(float)) {
1410 test(SV("-123.456700"), SV("{:.6Lf}"), F(-1.234567e2
));
1411 test(SV("-1,234.567000"), SV("{:.6Lf}"), F(-1.234567e3
));
1412 test(SV("-12,345.670000"), SV("{:.6Lf}"), F(-1.234567e4
));
1413 test(SV("-123,456.700000"), SV("{:.6Lf}"), F(-1.234567e5
));
1414 test(SV("-1,234,567.000000"), SV("{:.6Lf}"), F(-1.234567e6
));
1415 test(SV("-12,345,670.000000"), SV("{:.6Lf}"), F(-1.234567e7
));
1416 test(SV("-123,456,700,000,000,000,000.000000"), SV("{:.6Lf}"), F(-1.234567e20
));
1419 std::locale::global(loc
);
1420 test(SV("0#000001"), SV("{:.6Lf}"), F(1.234567e-6));
1421 test(SV("0#000012"), SV("{:.6Lf}"), F(1.234567e-5));
1422 test(SV("0#000123"), SV("{:.6Lf}"), F(1.234567e-4));
1423 test(SV("0#001235"), SV("{:.6Lf}"), F(1.234567e-3));
1424 test(SV("0#012346"), SV("{:.6Lf}"), F(1.234567e-2));
1425 test(SV("0#123457"), SV("{:.6Lf}"), F(1.234567e-1));
1426 test(SV("1#234567"), SV("{:.6Lf}"), F(1.234567e0
));
1427 test(SV("1_2#345670"), SV("{:.6Lf}"), F(1.234567e1
));
1428 if constexpr (sizeof(F
) > sizeof(float)) {
1429 test(SV("12_3#456700"), SV("{:.6Lf}"), F(1.234567e2
));
1430 test(SV("1_23_4#567000"), SV("{:.6Lf}"), F(1.234567e3
));
1431 test(SV("12_34_5#670000"), SV("{:.6Lf}"), F(1.234567e4
));
1432 test(SV("123_45_6#700000"), SV("{:.6Lf}"), F(1.234567e5
));
1433 test(SV("1_234_56_7#000000"), SV("{:.6Lf}"), F(1.234567e6
));
1434 test(SV("12_345_67_0#000000"), SV("{:.6Lf}"), F(1.234567e7
));
1435 test(SV("1_2_3_4_5_6_7_0_0_0_0_0_0_00_000_00_0#000000"), SV("{:.6Lf}"), F(1.234567e20
));
1437 test(SV("-0#000001"), SV("{:.6Lf}"), F(-1.234567e-6));
1438 test(SV("-0#000012"), SV("{:.6Lf}"), F(-1.234567e-5));
1439 test(SV("-0#000123"), SV("{:.6Lf}"), F(-1.234567e-4));
1440 test(SV("-0#001235"), SV("{:.6Lf}"), F(-1.234567e-3));
1441 test(SV("-0#012346"), SV("{:.6Lf}"), F(-1.234567e-2));
1442 test(SV("-0#123457"), SV("{:.6Lf}"), F(-1.234567e-1));
1443 test(SV("-1#234567"), SV("{:.6Lf}"), F(-1.234567e0
));
1444 test(SV("-1_2#345670"), SV("{:.6Lf}"), F(-1.234567e1
));
1445 if constexpr (sizeof(F
) > sizeof(float)) {
1446 test(SV("-12_3#456700"), SV("{:.6Lf}"), F(-1.234567e2
));
1447 test(SV("-1_23_4#567000"), SV("{:.6Lf}"), F(-1.234567e3
));
1448 test(SV("-12_34_5#670000"), SV("{:.6Lf}"), F(-1.234567e4
));
1449 test(SV("-123_45_6#700000"), SV("{:.6Lf}"), F(-1.234567e5
));
1450 test(SV("-1_234_56_7#000000"), SV("{:.6Lf}"), F(-1.234567e6
));
1451 test(SV("-12_345_67_0#000000"), SV("{:.6Lf}"), F(-1.234567e7
));
1452 test(SV("-1_2_3_4_5_6_7_0_0_0_0_0_0_00_000_00_0#000000"), SV("{:.6Lf}"), F(-1.234567e20
));
1455 test(SV("0.000001"), en_US
, SV("{:.6Lf}"), F(1.234567e-6));
1456 test(SV("0.000012"), en_US
, SV("{:.6Lf}"), F(1.234567e-5));
1457 test(SV("0.000123"), en_US
, SV("{:.6Lf}"), F(1.234567e-4));
1458 test(SV("0.001235"), en_US
, SV("{:.6Lf}"), F(1.234567e-3));
1459 test(SV("0.012346"), en_US
, SV("{:.6Lf}"), F(1.234567e-2));
1460 test(SV("0.123457"), en_US
, SV("{:.6Lf}"), F(1.234567e-1));
1461 test(SV("1.234567"), en_US
, SV("{:.6Lf}"), F(1.234567e0
));
1462 test(SV("12.345670"), en_US
, SV("{:.6Lf}"), F(1.234567e1
));
1463 if constexpr (sizeof(F
) > sizeof(float)) {
1464 test(SV("123.456700"), en_US
, SV("{:.6Lf}"), F(1.234567e2
));
1465 test(SV("1,234.567000"), en_US
, SV("{:.6Lf}"), F(1.234567e3
));
1466 test(SV("12,345.670000"), en_US
, SV("{:.6Lf}"), F(1.234567e4
));
1467 test(SV("123,456.700000"), en_US
, SV("{:.6Lf}"), F(1.234567e5
));
1468 test(SV("1,234,567.000000"), en_US
, SV("{:.6Lf}"), F(1.234567e6
));
1469 test(SV("12,345,670.000000"), en_US
, SV("{:.6Lf}"), F(1.234567e7
));
1470 test(SV("123,456,700,000,000,000,000.000000"), en_US
, SV("{:.6Lf}"), F(1.234567e20
));
1472 test(SV("-0.000001"), en_US
, SV("{:.6Lf}"), F(-1.234567e-6));
1473 test(SV("-0.000012"), en_US
, SV("{:.6Lf}"), F(-1.234567e-5));
1474 test(SV("-0.000123"), en_US
, SV("{:.6Lf}"), F(-1.234567e-4));
1475 test(SV("-0.001235"), en_US
, SV("{:.6Lf}"), F(-1.234567e-3));
1476 test(SV("-0.012346"), en_US
, SV("{:.6Lf}"), F(-1.234567e-2));
1477 test(SV("-0.123457"), en_US
, SV("{:.6Lf}"), F(-1.234567e-1));
1478 test(SV("-1.234567"), en_US
, SV("{:.6Lf}"), F(-1.234567e0
));
1479 test(SV("-12.345670"), en_US
, SV("{:.6Lf}"), F(-1.234567e1
));
1480 if constexpr (sizeof(F
) > sizeof(float)) {
1481 test(SV("-123.456700"), en_US
, SV("{:.6Lf}"), F(-1.234567e2
));
1482 test(SV("-1,234.567000"), en_US
, SV("{:.6Lf}"), F(-1.234567e3
));
1483 test(SV("-12,345.670000"), en_US
, SV("{:.6Lf}"), F(-1.234567e4
));
1484 test(SV("-123,456.700000"), en_US
, SV("{:.6Lf}"), F(-1.234567e5
));
1485 test(SV("-1,234,567.000000"), en_US
, SV("{:.6Lf}"), F(-1.234567e6
));
1486 test(SV("-12,345,670.000000"), en_US
, SV("{:.6Lf}"), F(-1.234567e7
));
1487 test(SV("-123,456,700,000,000,000,000.000000"), en_US
, SV("{:.6Lf}"), F(-1.234567e20
));
1490 std::locale::global(en_US
);
1491 test(SV("0#000001"), loc
, SV("{:.6Lf}"), F(1.234567e-6));
1492 test(SV("0#000012"), loc
, SV("{:.6Lf}"), F(1.234567e-5));
1493 test(SV("0#000123"), loc
, SV("{:.6Lf}"), F(1.234567e-4));
1494 test(SV("0#001235"), loc
, SV("{:.6Lf}"), F(1.234567e-3));
1495 test(SV("0#012346"), loc
, SV("{:.6Lf}"), F(1.234567e-2));
1496 test(SV("0#123457"), loc
, SV("{:.6Lf}"), F(1.234567e-1));
1497 test(SV("1#234567"), loc
, SV("{:.6Lf}"), F(1.234567e0
));
1498 test(SV("1_2#345670"), loc
, SV("{:.6Lf}"), F(1.234567e1
));
1499 if constexpr (sizeof(F
) > sizeof(float)) {
1500 test(SV("12_3#456700"), loc
, SV("{:.6Lf}"), F(1.234567e2
));
1501 test(SV("1_23_4#567000"), loc
, SV("{:.6Lf}"), F(1.234567e3
));
1502 test(SV("12_34_5#670000"), loc
, SV("{:.6Lf}"), F(1.234567e4
));
1503 test(SV("123_45_6#700000"), loc
, SV("{:.6Lf}"), F(1.234567e5
));
1504 test(SV("1_234_56_7#000000"), loc
, SV("{:.6Lf}"), F(1.234567e6
));
1505 test(SV("12_345_67_0#000000"), loc
, SV("{:.6Lf}"), F(1.234567e7
));
1506 test(SV("1_2_3_4_5_6_7_0_0_0_0_0_0_00_000_00_0#000000"), loc
, SV("{:.6Lf}"), F(1.234567e20
));
1508 test(SV("-0#000001"), loc
, SV("{:.6Lf}"), F(-1.234567e-6));
1509 test(SV("-0#000012"), loc
, SV("{:.6Lf}"), F(-1.234567e-5));
1510 test(SV("-0#000123"), loc
, SV("{:.6Lf}"), F(-1.234567e-4));
1511 test(SV("-0#001235"), loc
, SV("{:.6Lf}"), F(-1.234567e-3));
1512 test(SV("-0#012346"), loc
, SV("{:.6Lf}"), F(-1.234567e-2));
1513 test(SV("-0#123457"), loc
, SV("{:.6Lf}"), F(-1.234567e-1));
1514 test(SV("-1#234567"), loc
, SV("{:.6Lf}"), F(-1.234567e0
));
1515 test(SV("-1_2#345670"), loc
, SV("{:.6Lf}"), F(-1.234567e1
));
1516 if constexpr (sizeof(F
) > sizeof(float)) {
1517 test(SV("-12_3#456700"), loc
, SV("{:.6Lf}"), F(-1.234567e2
));
1518 test(SV("-1_23_4#567000"), loc
, SV("{:.6Lf}"), F(-1.234567e3
));
1519 test(SV("-12_34_5#670000"), loc
, SV("{:.6Lf}"), F(-1.234567e4
));
1520 test(SV("-123_45_6#700000"), loc
, SV("{:.6Lf}"), F(-1.234567e5
));
1521 test(SV("-1_234_56_7#000000"), loc
, SV("{:.6Lf}"), F(-1.234567e6
));
1522 test(SV("-12_345_67_0#000000"), loc
, SV("{:.6Lf}"), F(-1.234567e7
));
1523 test(SV("-1_2_3_4_5_6_7_0_0_0_0_0_0_00_000_00_0#000000"), loc
, SV("{:.6Lf}"), F(-1.234567e20
));
1526 // *** Fill, align, zero padding ***
1527 if constexpr (sizeof(F
) > sizeof(float)) {
1528 std::locale::global(en_US
);
1529 test(SV("1,234.567000$$$"), SV("{:$<15.6Lf}"), F(1.234567e3
));
1530 test(SV("$$$1,234.567000"), SV("{:$>15.6Lf}"), F(1.234567e3
));
1531 test(SV("$1,234.567000$$"), SV("{:$^15.6Lf}"), F(1.234567e3
));
1532 test(SV("0001,234.567000"), SV("{:015.6Lf}"), F(1.234567e3
));
1533 test(SV("-1,234.567000$$$"), SV("{:$<16.6Lf}"), F(-1.234567e3
));
1534 test(SV("$$$-1,234.567000"), SV("{:$>16.6Lf}"), F(-1.234567e3
));
1535 test(SV("$-1,234.567000$$"), SV("{:$^16.6Lf}"), F(-1.234567e3
));
1536 test(SV("-0001,234.567000"), SV("{:016.6Lf}"), F(-1.234567e3
));
1538 std::locale::global(loc
);
1539 test(SV("1_23_4#567000$$$"), SV("{:$<16.6Lf}"), F(1.234567e3
));
1540 test(SV("$$$1_23_4#567000"), SV("{:$>16.6Lf}"), F(1.234567e3
));
1541 test(SV("$1_23_4#567000$$"), SV("{:$^16.6Lf}"), F(1.234567e3
));
1542 test(SV("0001_23_4#567000"), SV("{:016.6Lf}"), F(1.234567e3
));
1543 test(SV("-1_23_4#567000$$$"), SV("{:$<17.6Lf}"), F(-1.234567e3
));
1544 test(SV("$$$-1_23_4#567000"), SV("{:$>17.6Lf}"), F(-1.234567e3
));
1545 test(SV("$-1_23_4#567000$$"), SV("{:$^17.6Lf}"), F(-1.234567e3
));
1546 test(SV("-0001_23_4#567000"), SV("{:017.6Lf}"), F(-1.234567e3
));
1548 test(SV("1,234.567000$$$"), en_US
, SV("{:$<15.6Lf}"), F(1.234567e3
));
1549 test(SV("$$$1,234.567000"), en_US
, SV("{:$>15.6Lf}"), F(1.234567e3
));
1550 test(SV("$1,234.567000$$"), en_US
, SV("{:$^15.6Lf}"), F(1.234567e3
));
1551 test(SV("0001,234.567000"), en_US
, SV("{:015.6Lf}"), F(1.234567e3
));
1552 test(SV("-1,234.567000$$$"), en_US
, SV("{:$<16.6Lf}"), F(-1.234567e3
));
1553 test(SV("$$$-1,234.567000"), en_US
, SV("{:$>16.6Lf}"), F(-1.234567e3
));
1554 test(SV("$-1,234.567000$$"), en_US
, SV("{:$^16.6Lf}"), F(-1.234567e3
));
1555 test(SV("-0001,234.567000"), en_US
, SV("{:016.6Lf}"), F(-1.234567e3
));
1557 std::locale::global(en_US
);
1558 test(SV("1_23_4#567000$$$"), loc
, SV("{:$<16.6Lf}"), F(1.234567e3
));
1559 test(SV("$$$1_23_4#567000"), loc
, SV("{:$>16.6Lf}"), F(1.234567e3
));
1560 test(SV("$1_23_4#567000$$"), loc
, SV("{:$^16.6Lf}"), F(1.234567e3
));
1561 test(SV("0001_23_4#567000"), loc
, SV("{:016.6Lf}"), F(1.234567e3
));
1562 test(SV("-1_23_4#567000$$$"), loc
, SV("{:$<17.6Lf}"), F(-1.234567e3
));
1563 test(SV("$$$-1_23_4#567000"), loc
, SV("{:$>17.6Lf}"), F(-1.234567e3
));
1564 test(SV("$-1_23_4#567000$$"), loc
, SV("{:$^17.6Lf}"), F(-1.234567e3
));
1565 test(SV("-0001_23_4#567000"), loc
, SV("{:017.6Lf}"), F(-1.234567e3
));
1569 template <class F
, class CharT
>
1570 void test_floating_point_general_lower_case() {
1571 std::locale loc
= std::locale(std::locale(), new numpunct
<CharT
>());
1572 std::locale en_US
= std::locale(LOCALE_en_US_UTF_8
);
1575 std::locale::global(en_US
);
1576 test(SV("1.23457e-06"), SV("{:.6Lg}"), F(1.234567e-6));
1577 test(SV("1.23457e-05"), SV("{:.6Lg}"), F(1.234567e-5));
1578 test(SV("0.000123457"), SV("{:.6Lg}"), F(1.234567e-4));
1579 test(SV("0.00123457"), SV("{:.6Lg}"), F(1.234567e-3));
1580 test(SV("0.0123457"), SV("{:.6Lg}"), F(1.234567e-2));
1581 test(SV("0.123457"), SV("{:.6Lg}"), F(1.234567e-1));
1582 test(SV("1.23457"), SV("{:.6Lg}"), F(1.234567e0
));
1583 test(SV("12.3457"), SV("{:.6Lg}"), F(1.234567e1
));
1584 test(SV("123.457"), SV("{:.6Lg}"), F(1.234567e2
));
1585 test(SV("1,234.57"), SV("{:.6Lg}"), F(1.234567e3
));
1586 test(SV("12,345.7"), SV("{:.6Lg}"), F(1.234567e4
));
1587 test(SV("123,457"), SV("{:.6Lg}"), F(1.234567e5
));
1588 test(SV("1.23457e+06"), SV("{:.6Lg}"), F(1.234567e6
));
1589 test(SV("1.23457e+07"), SV("{:.6Lg}"), F(1.234567e7
));
1590 test(SV("-1.23457e-06"), SV("{:.6Lg}"), F(-1.234567e-6));
1591 test(SV("-1.23457e-05"), SV("{:.6Lg}"), F(-1.234567e-5));
1592 test(SV("-0.000123457"), SV("{:.6Lg}"), F(-1.234567e-4));
1593 test(SV("-0.00123457"), SV("{:.6Lg}"), F(-1.234567e-3));
1594 test(SV("-0.0123457"), SV("{:.6Lg}"), F(-1.234567e-2));
1595 test(SV("-0.123457"), SV("{:.6Lg}"), F(-1.234567e-1));
1596 test(SV("-1.23457"), SV("{:.6Lg}"), F(-1.234567e0
));
1597 test(SV("-12.3457"), SV("{:.6Lg}"), F(-1.234567e1
));
1598 test(SV("-123.457"), SV("{:.6Lg}"), F(-1.234567e2
));
1599 test(SV("-1,234.57"), SV("{:.6Lg}"), F(-1.234567e3
));
1600 test(SV("-12,345.7"), SV("{:.6Lg}"), F(-1.234567e4
));
1601 test(SV("-123,457"), SV("{:.6Lg}"), F(-1.234567e5
));
1602 test(SV("-1.23457e+06"), SV("{:.6Lg}"), F(-1.234567e6
));
1603 test(SV("-1.23457e+07"), SV("{:.6Lg}"), F(-1.234567e7
));
1605 std::locale::global(loc
);
1606 test(SV("1#23457e-06"), SV("{:.6Lg}"), F(1.234567e-6));
1607 test(SV("1#23457e-05"), SV("{:.6Lg}"), F(1.234567e-5));
1608 test(SV("0#000123457"), SV("{:.6Lg}"), F(1.234567e-4));
1609 test(SV("0#00123457"), SV("{:.6Lg}"), F(1.234567e-3));
1610 test(SV("0#0123457"), SV("{:.6Lg}"), F(1.234567e-2));
1611 test(SV("0#123457"), SV("{:.6Lg}"), F(1.234567e-1));
1612 test(SV("1#23457"), SV("{:.6Lg}"), F(1.234567e0
));
1613 test(SV("1_2#3457"), SV("{:.6Lg}"), F(1.234567e1
));
1614 test(SV("12_3#457"), SV("{:.6Lg}"), F(1.234567e2
));
1615 test(SV("1_23_4#57"), SV("{:.6Lg}"), F(1.234567e3
));
1616 test(SV("12_34_5#7"), SV("{:.6Lg}"), F(1.234567e4
));
1617 test(SV("123_45_7"), SV("{:.6Lg}"), F(1.234567e5
));
1618 test(SV("1#23457e+06"), SV("{:.6Lg}"), F(1.234567e6
));
1619 test(SV("1#23457e+07"), SV("{:.6Lg}"), F(1.234567e7
));
1620 test(SV("-1#23457e-06"), SV("{:.6Lg}"), F(-1.234567e-6));
1621 test(SV("-1#23457e-05"), SV("{:.6Lg}"), F(-1.234567e-5));
1622 test(SV("-0#000123457"), SV("{:.6Lg}"), F(-1.234567e-4));
1623 test(SV("-0#00123457"), SV("{:.6Lg}"), F(-1.234567e-3));
1624 test(SV("-0#0123457"), SV("{:.6Lg}"), F(-1.234567e-2));
1625 test(SV("-0#123457"), SV("{:.6Lg}"), F(-1.234567e-1));
1626 test(SV("-1#23457"), SV("{:.6Lg}"), F(-1.234567e0
));
1627 test(SV("-1_2#3457"), SV("{:.6Lg}"), F(-1.234567e1
));
1628 test(SV("-12_3#457"), SV("{:.6Lg}"), F(-1.234567e2
));
1629 test(SV("-1_23_4#57"), SV("{:.6Lg}"), F(-1.234567e3
));
1630 test(SV("-12_34_5#7"), SV("{:.6Lg}"), F(-1.234567e4
));
1631 test(SV("-123_45_7"), SV("{:.6Lg}"), F(-1.234567e5
));
1632 test(SV("-1#23457e+06"), SV("{:.6Lg}"), F(-1.234567e6
));
1633 test(SV("-1#23457e+07"), SV("{:.6Lg}"), F(-1.234567e7
));
1635 test(SV("1.23457e-06"), en_US
, SV("{:.6Lg}"), F(1.234567e-6));
1636 test(SV("1.23457e-05"), en_US
, SV("{:.6Lg}"), F(1.234567e-5));
1637 test(SV("0.000123457"), en_US
, SV("{:.6Lg}"), F(1.234567e-4));
1638 test(SV("0.00123457"), en_US
, SV("{:.6Lg}"), F(1.234567e-3));
1639 test(SV("0.0123457"), en_US
, SV("{:.6Lg}"), F(1.234567e-2));
1640 test(SV("0.123457"), en_US
, SV("{:.6Lg}"), F(1.234567e-1));
1641 test(SV("1.23457"), en_US
, SV("{:.6Lg}"), F(1.234567e0
));
1642 test(SV("12.3457"), en_US
, SV("{:.6Lg}"), F(1.234567e1
));
1643 test(SV("123.457"), en_US
, SV("{:.6Lg}"), F(1.234567e2
));
1644 test(SV("1,234.57"), en_US
, SV("{:.6Lg}"), F(1.234567e3
));
1645 test(SV("12,345.7"), en_US
, SV("{:.6Lg}"), F(1.234567e4
));
1646 test(SV("123,457"), en_US
, SV("{:.6Lg}"), F(1.234567e5
));
1647 test(SV("1.23457e+06"), en_US
, SV("{:.6Lg}"), F(1.234567e6
));
1648 test(SV("1.23457e+07"), en_US
, SV("{:.6Lg}"), F(1.234567e7
));
1649 test(SV("-1.23457e-06"), en_US
, SV("{:.6Lg}"), F(-1.234567e-6));
1650 test(SV("-1.23457e-05"), en_US
, SV("{:.6Lg}"), F(-1.234567e-5));
1651 test(SV("-0.000123457"), en_US
, SV("{:.6Lg}"), F(-1.234567e-4));
1652 test(SV("-0.00123457"), en_US
, SV("{:.6Lg}"), F(-1.234567e-3));
1653 test(SV("-0.0123457"), en_US
, SV("{:.6Lg}"), F(-1.234567e-2));
1654 test(SV("-0.123457"), en_US
, SV("{:.6Lg}"), F(-1.234567e-1));
1655 test(SV("-1.23457"), en_US
, SV("{:.6Lg}"), F(-1.234567e0
));
1656 test(SV("-12.3457"), en_US
, SV("{:.6Lg}"), F(-1.234567e1
));
1657 test(SV("-123.457"), en_US
, SV("{:.6Lg}"), F(-1.234567e2
));
1658 test(SV("-1,234.57"), en_US
, SV("{:.6Lg}"), F(-1.234567e3
));
1659 test(SV("-12,345.7"), en_US
, SV("{:.6Lg}"), F(-1.234567e4
));
1660 test(SV("-123,457"), en_US
, SV("{:.6Lg}"), F(-1.234567e5
));
1661 test(SV("-1.23457e+06"), en_US
, SV("{:.6Lg}"), F(-1.234567e6
));
1662 test(SV("-1.23457e+07"), en_US
, SV("{:.6Lg}"), F(-1.234567e7
));
1664 std::locale::global(en_US
);
1665 test(SV("1#23457e-06"), loc
, SV("{:.6Lg}"), F(1.234567e-6));
1666 test(SV("1#23457e-05"), loc
, SV("{:.6Lg}"), F(1.234567e-5));
1667 test(SV("0#000123457"), loc
, SV("{:.6Lg}"), F(1.234567e-4));
1668 test(SV("0#00123457"), loc
, SV("{:.6Lg}"), F(1.234567e-3));
1669 test(SV("0#0123457"), loc
, SV("{:.6Lg}"), F(1.234567e-2));
1670 test(SV("0#123457"), loc
, SV("{:.6Lg}"), F(1.234567e-1));
1671 test(SV("1#23457"), loc
, SV("{:.6Lg}"), F(1.234567e0
));
1672 test(SV("1_2#3457"), loc
, SV("{:.6Lg}"), F(1.234567e1
));
1673 test(SV("12_3#457"), loc
, SV("{:.6Lg}"), F(1.234567e2
));
1674 test(SV("1_23_4#57"), loc
, SV("{:.6Lg}"), F(1.234567e3
));
1675 test(SV("12_34_5#7"), loc
, SV("{:.6Lg}"), F(1.234567e4
));
1676 test(SV("123_45_7"), loc
, SV("{:.6Lg}"), F(1.234567e5
));
1677 test(SV("1#23457e+06"), loc
, SV("{:.6Lg}"), F(1.234567e6
));
1678 test(SV("1#23457e+07"), loc
, SV("{:.6Lg}"), F(1.234567e7
));
1679 test(SV("-1#23457e-06"), loc
, SV("{:.6Lg}"), F(-1.234567e-6));
1680 test(SV("-1#23457e-05"), loc
, SV("{:.6Lg}"), F(-1.234567e-5));
1681 test(SV("-0#000123457"), loc
, SV("{:.6Lg}"), F(-1.234567e-4));
1682 test(SV("-0#00123457"), loc
, SV("{:.6Lg}"), F(-1.234567e-3));
1683 test(SV("-0#0123457"), loc
, SV("{:.6Lg}"), F(-1.234567e-2));
1684 test(SV("-0#123457"), loc
, SV("{:.6Lg}"), F(-1.234567e-1));
1685 test(SV("-1#23457"), loc
, SV("{:.6Lg}"), F(-1.234567e0
));
1686 test(SV("-1_2#3457"), loc
, SV("{:.6Lg}"), F(-1.234567e1
));
1687 test(SV("-12_3#457"), loc
, SV("{:.6Lg}"), F(-1.234567e2
));
1688 test(SV("-1_23_4#57"), loc
, SV("{:.6Lg}"), F(-1.234567e3
));
1689 test(SV("-12_34_5#7"), loc
, SV("{:.6Lg}"), F(-1.234567e4
));
1690 test(SV("-123_45_7"), loc
, SV("{:.6Lg}"), F(-1.234567e5
));
1691 test(SV("-1#23457e+06"), loc
, SV("{:.6Lg}"), F(-1.234567e6
));
1692 test(SV("-1#23457e+07"), loc
, SV("{:.6Lg}"), F(-1.234567e7
));
1694 // *** Fill, align, zero padding ***
1695 std::locale::global(en_US
);
1696 test(SV("1,234.57$$$"), SV("{:$<11.6Lg}"), F(1.234567e3
));
1697 test(SV("$$$1,234.57"), SV("{:$>11.6Lg}"), F(1.234567e3
));
1698 test(SV("$1,234.57$$"), SV("{:$^11.6Lg}"), F(1.234567e3
));
1699 test(SV("0001,234.57"), SV("{:011.6Lg}"), F(1.234567e3
));
1700 test(SV("-1,234.57$$$"), SV("{:$<12.6Lg}"), F(-1.234567e3
));
1701 test(SV("$$$-1,234.57"), SV("{:$>12.6Lg}"), F(-1.234567e3
));
1702 test(SV("$-1,234.57$$"), SV("{:$^12.6Lg}"), F(-1.234567e3
));
1703 test(SV("-0001,234.57"), SV("{:012.6Lg}"), F(-1.234567e3
));
1705 std::locale::global(loc
);
1706 test(SV("1_23_4#57$$$"), SV("{:$<12.6Lg}"), F(1.234567e3
));
1707 test(SV("$$$1_23_4#57"), SV("{:$>12.6Lg}"), F(1.234567e3
));
1708 test(SV("$1_23_4#57$$"), SV("{:$^12.6Lg}"), F(1.234567e3
));
1709 test(SV("0001_23_4#57"), SV("{:012.6Lg}"), F(1.234567e3
));
1710 test(SV("-1_23_4#57$$$"), SV("{:$<13.6Lg}"), F(-1.234567e3
));
1711 test(SV("$$$-1_23_4#57"), SV("{:$>13.6Lg}"), F(-1.234567e3
));
1712 test(SV("$-1_23_4#57$$"), SV("{:$^13.6Lg}"), F(-1.234567e3
));
1713 test(SV("-0001_23_4#57"), SV("{:013.6Lg}"), F(-1.234567e3
));
1715 test(SV("1,234.57$$$"), en_US
, SV("{:$<11.6Lg}"), F(1.234567e3
));
1716 test(SV("$$$1,234.57"), en_US
, SV("{:$>11.6Lg}"), F(1.234567e3
));
1717 test(SV("$1,234.57$$"), en_US
, SV("{:$^11.6Lg}"), F(1.234567e3
));
1718 test(SV("0001,234.57"), en_US
, SV("{:011.6Lg}"), F(1.234567e3
));
1719 test(SV("-1,234.57$$$"), en_US
, SV("{:$<12.6Lg}"), F(-1.234567e3
));
1720 test(SV("$$$-1,234.57"), en_US
, SV("{:$>12.6Lg}"), F(-1.234567e3
));
1721 test(SV("$-1,234.57$$"), en_US
, SV("{:$^12.6Lg}"), F(-1.234567e3
));
1722 test(SV("-0001,234.57"), en_US
, SV("{:012.6Lg}"), F(-1.234567e3
));
1724 std::locale::global(en_US
);
1725 test(SV("1_23_4#57$$$"), loc
, SV("{:$<12.6Lg}"), F(1.234567e3
));
1726 test(SV("$$$1_23_4#57"), loc
, SV("{:$>12.6Lg}"), F(1.234567e3
));
1727 test(SV("$1_23_4#57$$"), loc
, SV("{:$^12.6Lg}"), F(1.234567e3
));
1728 test(SV("0001_23_4#57"), loc
, SV("{:012.6Lg}"), F(1.234567e3
));
1729 test(SV("-1_23_4#57$$$"), loc
, SV("{:$<13.6Lg}"), F(-1.234567e3
));
1730 test(SV("$$$-1_23_4#57"), loc
, SV("{:$>13.6Lg}"), F(-1.234567e3
));
1731 test(SV("$-1_23_4#57$$"), loc
, SV("{:$^13.6Lg}"), F(-1.234567e3
));
1732 test(SV("-0001_23_4#57"), loc
, SV("{:013.6Lg}"), F(-1.234567e3
));
1735 template <class F
, class CharT
>
1736 void test_floating_point_general_upper_case() {
1737 std::locale loc
= std::locale(std::locale(), new numpunct
<CharT
>());
1738 std::locale en_US
= std::locale(LOCALE_en_US_UTF_8
);
1741 std::locale::global(en_US
);
1742 test(SV("1.23457E-06"), SV("{:.6LG}"), F(1.234567e-6));
1743 test(SV("1.23457E-05"), SV("{:.6LG}"), F(1.234567e-5));
1744 test(SV("0.000123457"), SV("{:.6LG}"), F(1.234567e-4));
1745 test(SV("0.00123457"), SV("{:.6LG}"), F(1.234567e-3));
1746 test(SV("0.0123457"), SV("{:.6LG}"), F(1.234567e-2));
1747 test(SV("0.123457"), SV("{:.6LG}"), F(1.234567e-1));
1748 test(SV("1.23457"), SV("{:.6LG}"), F(1.234567e0
));
1749 test(SV("12.3457"), SV("{:.6LG}"), F(1.234567e1
));
1750 test(SV("123.457"), SV("{:.6LG}"), F(1.234567e2
));
1751 test(SV("1,234.57"), SV("{:.6LG}"), F(1.234567e3
));
1752 test(SV("12,345.7"), SV("{:.6LG}"), F(1.234567e4
));
1753 test(SV("123,457"), SV("{:.6LG}"), F(1.234567e5
));
1754 test(SV("1.23457E+06"), SV("{:.6LG}"), F(1.234567e6
));
1755 test(SV("1.23457E+07"), SV("{:.6LG}"), F(1.234567e7
));
1756 test(SV("-1.23457E-06"), SV("{:.6LG}"), F(-1.234567e-6));
1757 test(SV("-1.23457E-05"), SV("{:.6LG}"), F(-1.234567e-5));
1758 test(SV("-0.000123457"), SV("{:.6LG}"), F(-1.234567e-4));
1759 test(SV("-0.00123457"), SV("{:.6LG}"), F(-1.234567e-3));
1760 test(SV("-0.0123457"), SV("{:.6LG}"), F(-1.234567e-2));
1761 test(SV("-0.123457"), SV("{:.6LG}"), F(-1.234567e-1));
1762 test(SV("-1.23457"), SV("{:.6LG}"), F(-1.234567e0
));
1763 test(SV("-12.3457"), SV("{:.6LG}"), F(-1.234567e1
));
1764 test(SV("-123.457"), SV("{:.6LG}"), F(-1.234567e2
));
1765 test(SV("-1,234.57"), SV("{:.6LG}"), F(-1.234567e3
));
1766 test(SV("-12,345.7"), SV("{:.6LG}"), F(-1.234567e4
));
1767 test(SV("-123,457"), SV("{:.6LG}"), F(-1.234567e5
));
1768 test(SV("-1.23457E+06"), SV("{:.6LG}"), F(-1.234567e6
));
1769 test(SV("-1.23457E+07"), SV("{:.6LG}"), F(-1.234567e7
));
1771 std::locale::global(loc
);
1772 test(SV("1#23457E-06"), SV("{:.6LG}"), F(1.234567e-6));
1773 test(SV("1#23457E-05"), SV("{:.6LG}"), F(1.234567e-5));
1774 test(SV("0#000123457"), SV("{:.6LG}"), F(1.234567e-4));
1775 test(SV("0#00123457"), SV("{:.6LG}"), F(1.234567e-3));
1776 test(SV("0#0123457"), SV("{:.6LG}"), F(1.234567e-2));
1777 test(SV("0#123457"), SV("{:.6LG}"), F(1.234567e-1));
1778 test(SV("1#23457"), SV("{:.6LG}"), F(1.234567e0
));
1779 test(SV("1_2#3457"), SV("{:.6LG}"), F(1.234567e1
));
1780 test(SV("12_3#457"), SV("{:.6LG}"), F(1.234567e2
));
1781 test(SV("1_23_4#57"), SV("{:.6LG}"), F(1.234567e3
));
1782 test(SV("12_34_5#7"), SV("{:.6LG}"), F(1.234567e4
));
1783 test(SV("123_45_7"), SV("{:.6LG}"), F(1.234567e5
));
1784 test(SV("1#23457E+06"), SV("{:.6LG}"), F(1.234567e6
));
1785 test(SV("1#23457E+07"), SV("{:.6LG}"), F(1.234567e7
));
1786 test(SV("-1#23457E-06"), SV("{:.6LG}"), F(-1.234567e-6));
1787 test(SV("-1#23457E-05"), SV("{:.6LG}"), F(-1.234567e-5));
1788 test(SV("-0#000123457"), SV("{:.6LG}"), F(-1.234567e-4));
1789 test(SV("-0#00123457"), SV("{:.6LG}"), F(-1.234567e-3));
1790 test(SV("-0#0123457"), SV("{:.6LG}"), F(-1.234567e-2));
1791 test(SV("-0#123457"), SV("{:.6LG}"), F(-1.234567e-1));
1792 test(SV("-1#23457"), SV("{:.6LG}"), F(-1.234567e0
));
1793 test(SV("-1_2#3457"), SV("{:.6LG}"), F(-1.234567e1
));
1794 test(SV("-12_3#457"), SV("{:.6LG}"), F(-1.234567e2
));
1795 test(SV("-1_23_4#57"), SV("{:.6LG}"), F(-1.234567e3
));
1796 test(SV("-12_34_5#7"), SV("{:.6LG}"), F(-1.234567e4
));
1797 test(SV("-123_45_7"), SV("{:.6LG}"), F(-1.234567e5
));
1798 test(SV("-1#23457E+06"), SV("{:.6LG}"), F(-1.234567e6
));
1799 test(SV("-1#23457E+07"), SV("{:.6LG}"), F(-1.234567e7
));
1801 test(SV("1.23457E-06"), en_US
, SV("{:.6LG}"), F(1.234567e-6));
1802 test(SV("1.23457E-05"), en_US
, SV("{:.6LG}"), F(1.234567e-5));
1803 test(SV("0.000123457"), en_US
, SV("{:.6LG}"), F(1.234567e-4));
1804 test(SV("0.00123457"), en_US
, SV("{:.6LG}"), F(1.234567e-3));
1805 test(SV("0.0123457"), en_US
, SV("{:.6LG}"), F(1.234567e-2));
1806 test(SV("0.123457"), en_US
, SV("{:.6LG}"), F(1.234567e-1));
1807 test(SV("1.23457"), en_US
, SV("{:.6LG}"), F(1.234567e0
));
1808 test(SV("12.3457"), en_US
, SV("{:.6LG}"), F(1.234567e1
));
1809 test(SV("123.457"), en_US
, SV("{:.6LG}"), F(1.234567e2
));
1810 test(SV("1,234.57"), en_US
, SV("{:.6LG}"), F(1.234567e3
));
1811 test(SV("12,345.7"), en_US
, SV("{:.6LG}"), F(1.234567e4
));
1812 test(SV("123,457"), en_US
, SV("{:.6LG}"), F(1.234567e5
));
1813 test(SV("1.23457E+06"), en_US
, SV("{:.6LG}"), F(1.234567e6
));
1814 test(SV("1.23457E+07"), en_US
, SV("{:.6LG}"), F(1.234567e7
));
1815 test(SV("-1.23457E-06"), en_US
, SV("{:.6LG}"), F(-1.234567e-6));
1816 test(SV("-1.23457E-05"), en_US
, SV("{:.6LG}"), F(-1.234567e-5));
1817 test(SV("-0.000123457"), en_US
, SV("{:.6LG}"), F(-1.234567e-4));
1818 test(SV("-0.00123457"), en_US
, SV("{:.6LG}"), F(-1.234567e-3));
1819 test(SV("-0.0123457"), en_US
, SV("{:.6LG}"), F(-1.234567e-2));
1820 test(SV("-0.123457"), en_US
, SV("{:.6LG}"), F(-1.234567e-1));
1821 test(SV("-1.23457"), en_US
, SV("{:.6LG}"), F(-1.234567e0
));
1822 test(SV("-12.3457"), en_US
, SV("{:.6LG}"), F(-1.234567e1
));
1823 test(SV("-123.457"), en_US
, SV("{:.6LG}"), F(-1.234567e2
));
1824 test(SV("-1,234.57"), en_US
, SV("{:.6LG}"), F(-1.234567e3
));
1825 test(SV("-12,345.7"), en_US
, SV("{:.6LG}"), F(-1.234567e4
));
1826 test(SV("-123,457"), en_US
, SV("{:.6LG}"), F(-1.234567e5
));
1827 test(SV("-1.23457E+06"), en_US
, SV("{:.6LG}"), F(-1.234567e6
));
1828 test(SV("-1.23457E+07"), en_US
, SV("{:.6LG}"), F(-1.234567e7
));
1830 std::locale::global(en_US
);
1831 test(SV("1#23457E-06"), loc
, SV("{:.6LG}"), F(1.234567e-6));
1832 test(SV("1#23457E-05"), loc
, SV("{:.6LG}"), F(1.234567e-5));
1833 test(SV("0#000123457"), loc
, SV("{:.6LG}"), F(1.234567e-4));
1834 test(SV("0#00123457"), loc
, SV("{:.6LG}"), F(1.234567e-3));
1835 test(SV("0#0123457"), loc
, SV("{:.6LG}"), F(1.234567e-2));
1836 test(SV("0#123457"), loc
, SV("{:.6LG}"), F(1.234567e-1));
1837 test(SV("1#23457"), loc
, SV("{:.6LG}"), F(1.234567e0
));
1838 test(SV("1_2#3457"), loc
, SV("{:.6LG}"), F(1.234567e1
));
1839 test(SV("12_3#457"), loc
, SV("{:.6LG}"), F(1.234567e2
));
1840 test(SV("1_23_4#57"), loc
, SV("{:.6LG}"), F(1.234567e3
));
1841 test(SV("12_34_5#7"), loc
, SV("{:.6LG}"), F(1.234567e4
));
1842 test(SV("123_45_7"), loc
, SV("{:.6LG}"), F(1.234567e5
));
1843 test(SV("1#23457E+06"), loc
, SV("{:.6LG}"), F(1.234567e6
));
1844 test(SV("1#23457E+07"), loc
, SV("{:.6LG}"), F(1.234567e7
));
1845 test(SV("-1#23457E-06"), loc
, SV("{:.6LG}"), F(-1.234567e-6));
1846 test(SV("-1#23457E-05"), loc
, SV("{:.6LG}"), F(-1.234567e-5));
1847 test(SV("-0#000123457"), loc
, SV("{:.6LG}"), F(-1.234567e-4));
1848 test(SV("-0#00123457"), loc
, SV("{:.6LG}"), F(-1.234567e-3));
1849 test(SV("-0#0123457"), loc
, SV("{:.6LG}"), F(-1.234567e-2));
1850 test(SV("-0#123457"), loc
, SV("{:.6LG}"), F(-1.234567e-1));
1851 test(SV("-1#23457"), loc
, SV("{:.6LG}"), F(-1.234567e0
));
1852 test(SV("-1_2#3457"), loc
, SV("{:.6LG}"), F(-1.234567e1
));
1853 test(SV("-12_3#457"), loc
, SV("{:.6LG}"), F(-1.234567e2
));
1854 test(SV("-1_23_4#57"), loc
, SV("{:.6LG}"), F(-1.234567e3
));
1855 test(SV("-12_34_5#7"), loc
, SV("{:.6LG}"), F(-1.234567e4
));
1856 test(SV("-123_45_7"), loc
, SV("{:.6LG}"), F(-1.234567e5
));
1857 test(SV("-1#23457E+06"), loc
, SV("{:.6LG}"), F(-1.234567e6
));
1858 test(SV("-1#23457E+07"), loc
, SV("{:.6LG}"), F(-1.234567e7
));
1860 // *** Fill, align, zero padding ***
1861 std::locale::global(en_US
);
1862 test(SV("1,234.57$$$"), SV("{:$<11.6LG}"), F(1.234567e3
));
1863 test(SV("$$$1,234.57"), SV("{:$>11.6LG}"), F(1.234567e3
));
1864 test(SV("$1,234.57$$"), SV("{:$^11.6LG}"), F(1.234567e3
));
1865 test(SV("0001,234.57"), SV("{:011.6LG}"), F(1.234567e3
));
1866 test(SV("-1,234.57$$$"), SV("{:$<12.6LG}"), F(-1.234567e3
));
1867 test(SV("$$$-1,234.57"), SV("{:$>12.6LG}"), F(-1.234567e3
));
1868 test(SV("$-1,234.57$$"), SV("{:$^12.6LG}"), F(-1.234567e3
));
1869 test(SV("-0001,234.57"), SV("{:012.6LG}"), F(-1.234567e3
));
1871 std::locale::global(loc
);
1872 test(SV("1_23_4#57$$$"), SV("{:$<12.6LG}"), F(1.234567e3
));
1873 test(SV("$$$1_23_4#57"), SV("{:$>12.6LG}"), F(1.234567e3
));
1874 test(SV("$1_23_4#57$$"), SV("{:$^12.6LG}"), F(1.234567e3
));
1875 test(SV("0001_23_4#57"), SV("{:012.6LG}"), F(1.234567e3
));
1876 test(SV("-1_23_4#57$$$"), SV("{:$<13.6LG}"), F(-1.234567e3
));
1877 test(SV("$$$-1_23_4#57"), SV("{:$>13.6LG}"), F(-1.234567e3
));
1878 test(SV("$-1_23_4#57$$"), SV("{:$^13.6LG}"), F(-1.234567e3
));
1879 test(SV("-0001_23_4#57"), SV("{:013.6LG}"), F(-1.234567e3
));
1881 test(SV("1,234.57$$$"), en_US
, SV("{:$<11.6LG}"), F(1.234567e3
));
1882 test(SV("$$$1,234.57"), en_US
, SV("{:$>11.6LG}"), F(1.234567e3
));
1883 test(SV("$1,234.57$$"), en_US
, SV("{:$^11.6LG}"), F(1.234567e3
));
1884 test(SV("0001,234.57"), en_US
, SV("{:011.6LG}"), F(1.234567e3
));
1885 test(SV("-1,234.57$$$"), en_US
, SV("{:$<12.6LG}"), F(-1.234567e3
));
1886 test(SV("$$$-1,234.57"), en_US
, SV("{:$>12.6LG}"), F(-1.234567e3
));
1887 test(SV("$-1,234.57$$"), en_US
, SV("{:$^12.6LG}"), F(-1.234567e3
));
1888 test(SV("-0001,234.57"), en_US
, SV("{:012.6LG}"), F(-1.234567e3
));
1890 std::locale::global(en_US
);
1891 test(SV("1_23_4#57$$$"), loc
, SV("{:$<12.6LG}"), F(1.234567e3
));
1892 test(SV("$$$1_23_4#57"), loc
, SV("{:$>12.6LG}"), F(1.234567e3
));
1893 test(SV("$1_23_4#57$$"), loc
, SV("{:$^12.6LG}"), F(1.234567e3
));
1894 test(SV("0001_23_4#57"), loc
, SV("{:012.6LG}"), F(1.234567e3
));
1895 test(SV("-1_23_4#57$$$"), loc
, SV("{:$<13.6LG}"), F(-1.234567e3
));
1896 test(SV("$$$-1_23_4#57"), loc
, SV("{:$>13.6LG}"), F(-1.234567e3
));
1897 test(SV("$-1_23_4#57$$"), loc
, SV("{:$^13.6LG}"), F(-1.234567e3
));
1898 test(SV("-0001_23_4#57"), loc
, SV("{:013.6LG}"), F(-1.234567e3
));
1901 template <class F
, class CharT
>
1902 void test_floating_point_default() {
1903 std::locale loc
= std::locale(std::locale(), new numpunct
<CharT
>());
1904 std::locale en_US
= std::locale(LOCALE_en_US_UTF_8
);
1907 std::locale::global(en_US
);
1908 test(SV("1.234567e-06"), SV("{:L}"), F(1.234567e-6));
1909 test(SV("1.234567e-05"), SV("{:L}"), F(1.234567e-5));
1910 test(SV("0.0001234567"), SV("{:L}"), F(1.234567e-4));
1911 test(SV("0.001234567"), SV("{:L}"), F(1.234567e-3));
1912 test(SV("0.01234567"), SV("{:L}"), F(1.234567e-2));
1913 test(SV("0.1234567"), SV("{:L}"), F(1.234567e-1));
1914 test(SV("1.234567"), SV("{:L}"), F(1.234567e0
));
1915 test(SV("12.34567"), SV("{:L}"), F(1.234567e1
));
1916 test(SV("123.4567"), SV("{:L}"), F(1.234567e2
));
1917 test(SV("1,234.567"), SV("{:L}"), F(1.234567e3
));
1918 test(SV("12,345.67"), SV("{:L}"), F(1.234567e4
));
1919 test(SV("123,456.7"), SV("{:L}"), F(1.234567e5
));
1920 test(SV("1,234,567"), SV("{:L}"), F(1.234567e6
));
1921 test(SV("12,345,670"), SV("{:L}"), F(1.234567e7
));
1922 if constexpr (sizeof(F
) > sizeof(float)) {
1923 test(SV("123,456,700"), SV("{:L}"), F(1.234567e8
));
1924 test(SV("1,234,567,000"), SV("{:L}"), F(1.234567e9
));
1925 test(SV("12,345,670,000"), SV("{:L}"), F(1.234567e10
));
1926 test(SV("123,456,700,000"), SV("{:L}"), F(1.234567e11
));
1927 test(SV("1.234567e+12"), SV("{:L}"), F(1.234567e12
));
1928 test(SV("1.234567e+13"), SV("{:L}"), F(1.234567e13
));
1930 test(SV("-1.234567e-06"), SV("{:L}"), F(-1.234567e-6));
1931 test(SV("-1.234567e-05"), SV("{:L}"), F(-1.234567e-5));
1932 test(SV("-0.0001234567"), SV("{:L}"), F(-1.234567e-4));
1933 test(SV("-0.001234567"), SV("{:L}"), F(-1.234567e-3));
1934 test(SV("-0.01234567"), SV("{:L}"), F(-1.234567e-2));
1935 test(SV("-0.1234567"), SV("{:L}"), F(-1.234567e-1));
1936 test(SV("-1.234567"), SV("{:L}"), F(-1.234567e0
));
1937 test(SV("-12.34567"), SV("{:L}"), F(-1.234567e1
));
1938 test(SV("-123.4567"), SV("{:L}"), F(-1.234567e2
));
1939 test(SV("-1,234.567"), SV("{:L}"), F(-1.234567e3
));
1940 test(SV("-12,345.67"), SV("{:L}"), F(-1.234567e4
));
1941 test(SV("-123,456.7"), SV("{:L}"), F(-1.234567e5
));
1942 test(SV("-1,234,567"), SV("{:L}"), F(-1.234567e6
));
1943 test(SV("-12,345,670"), SV("{:L}"), F(-1.234567e7
));
1944 if constexpr (sizeof(F
) > sizeof(float)) {
1945 test(SV("-123,456,700"), SV("{:L}"), F(-1.234567e8
));
1946 test(SV("-1,234,567,000"), SV("{:L}"), F(-1.234567e9
));
1947 test(SV("-12,345,670,000"), SV("{:L}"), F(-1.234567e10
));
1948 test(SV("-123,456,700,000"), SV("{:L}"), F(-1.234567e11
));
1949 test(SV("-1.234567e+12"), SV("{:L}"), F(-1.234567e12
));
1950 test(SV("-1.234567e+13"), SV("{:L}"), F(-1.234567e13
));
1953 std::locale::global(loc
);
1954 test(SV("1#234567e-06"), SV("{:L}"), F(1.234567e-6));
1955 test(SV("1#234567e-05"), SV("{:L}"), F(1.234567e-5));
1956 test(SV("0#0001234567"), SV("{:L}"), F(1.234567e-4));
1957 test(SV("0#001234567"), SV("{:L}"), F(1.234567e-3));
1958 test(SV("0#01234567"), SV("{:L}"), F(1.234567e-2));
1959 test(SV("0#1234567"), SV("{:L}"), F(1.234567e-1));
1960 test(SV("1#234567"), SV("{:L}"), F(1.234567e0
));
1961 test(SV("1_2#34567"), SV("{:L}"), F(1.234567e1
));
1962 test(SV("12_3#4567"), SV("{:L}"), F(1.234567e2
));
1963 test(SV("1_23_4#567"), SV("{:L}"), F(1.234567e3
));
1964 test(SV("12_34_5#67"), SV("{:L}"), F(1.234567e4
));
1965 test(SV("123_45_6#7"), SV("{:L}"), F(1.234567e5
));
1966 test(SV("1_234_56_7"), SV("{:L}"), F(1.234567e6
));
1967 test(SV("12_345_67_0"), SV("{:L}"), F(1.234567e7
));
1968 if constexpr (sizeof(F
) > sizeof(float)) {
1969 test(SV("1_23_456_70_0"), SV("{:L}"), F(1.234567e8
));
1970 test(SV("1_2_34_567_00_0"), SV("{:L}"), F(1.234567e9
));
1971 test(SV("1_2_3_45_670_00_0"), SV("{:L}"), F(1.234567e10
));
1972 test(SV("1_2_3_4_56_700_00_0"), SV("{:L}"), F(1.234567e11
));
1973 test(SV("1#234567e+12"), SV("{:L}"), F(1.234567e12
));
1974 test(SV("1#234567e+13"), SV("{:L}"), F(1.234567e13
));
1976 test(SV("-1#234567e-06"), SV("{:L}"), F(-1.234567e-6));
1977 test(SV("-1#234567e-05"), SV("{:L}"), F(-1.234567e-5));
1978 test(SV("-0#0001234567"), SV("{:L}"), F(-1.234567e-4));
1979 test(SV("-0#001234567"), SV("{:L}"), F(-1.234567e-3));
1980 test(SV("-0#01234567"), SV("{:L}"), F(-1.234567e-2));
1981 test(SV("-0#1234567"), SV("{:L}"), F(-1.234567e-1));
1982 test(SV("-1#234567"), SV("{:L}"), F(-1.234567e0
));
1983 test(SV("-1_2#34567"), SV("{:L}"), F(-1.234567e1
));
1984 test(SV("-12_3#4567"), SV("{:L}"), F(-1.234567e2
));
1985 test(SV("-1_23_4#567"), SV("{:L}"), F(-1.234567e3
));
1986 test(SV("-12_34_5#67"), SV("{:L}"), F(-1.234567e4
));
1987 test(SV("-123_45_6#7"), SV("{:L}"), F(-1.234567e5
));
1988 test(SV("-1_234_56_7"), SV("{:L}"), F(-1.234567e6
));
1989 test(SV("-12_345_67_0"), SV("{:L}"), F(-1.234567e7
));
1990 if constexpr (sizeof(F
) > sizeof(float)) {
1991 test(SV("-1_23_456_70_0"), SV("{:L}"), F(-1.234567e8
));
1992 test(SV("-1_2_34_567_00_0"), SV("{:L}"), F(-1.234567e9
));
1993 test(SV("-1_2_3_45_670_00_0"), SV("{:L}"), F(-1.234567e10
));
1994 test(SV("-1_2_3_4_56_700_00_0"), SV("{:L}"), F(-1.234567e11
));
1995 test(SV("-1#234567e+12"), SV("{:L}"), F(-1.234567e12
));
1996 test(SV("-1#234567e+13"), SV("{:L}"), F(-1.234567e13
));
1999 test(SV("1.234567e-06"), en_US
, SV("{:L}"), F(1.234567e-6));
2000 test(SV("1.234567e-05"), en_US
, SV("{:L}"), F(1.234567e-5));
2001 test(SV("0.0001234567"), en_US
, SV("{:L}"), F(1.234567e-4));
2002 test(SV("0.001234567"), en_US
, SV("{:L}"), F(1.234567e-3));
2003 test(SV("0.01234567"), en_US
, SV("{:L}"), F(1.234567e-2));
2004 test(SV("0.1234567"), en_US
, SV("{:L}"), F(1.234567e-1));
2005 test(SV("1.234567"), en_US
, SV("{:L}"), F(1.234567e0
));
2006 test(SV("12.34567"), en_US
, SV("{:L}"), F(1.234567e1
));
2007 test(SV("123.4567"), en_US
, SV("{:L}"), F(1.234567e2
));
2008 test(SV("1,234.567"), en_US
, SV("{:L}"), F(1.234567e3
));
2009 test(SV("12,345.67"), en_US
, SV("{:L}"), F(1.234567e4
));
2010 test(SV("123,456.7"), en_US
, SV("{:L}"), F(1.234567e5
));
2011 test(SV("1,234,567"), en_US
, SV("{:L}"), F(1.234567e6
));
2012 test(SV("12,345,670"), en_US
, SV("{:L}"), F(1.234567e7
));
2013 if constexpr (sizeof(F
) > sizeof(float)) {
2014 test(SV("123,456,700"), en_US
, SV("{:L}"), F(1.234567e8
));
2015 test(SV("1,234,567,000"), en_US
, SV("{:L}"), F(1.234567e9
));
2016 test(SV("12,345,670,000"), en_US
, SV("{:L}"), F(1.234567e10
));
2017 test(SV("123,456,700,000"), en_US
, SV("{:L}"), F(1.234567e11
));
2018 test(SV("1.234567e+12"), en_US
, SV("{:L}"), F(1.234567e12
));
2019 test(SV("1.234567e+13"), en_US
, SV("{:L}"), F(1.234567e13
));
2021 test(SV("-1.234567e-06"), en_US
, SV("{:L}"), F(-1.234567e-6));
2022 test(SV("-1.234567e-05"), en_US
, SV("{:L}"), F(-1.234567e-5));
2023 test(SV("-0.0001234567"), en_US
, SV("{:L}"), F(-1.234567e-4));
2024 test(SV("-0.001234567"), en_US
, SV("{:L}"), F(-1.234567e-3));
2025 test(SV("-0.01234567"), en_US
, SV("{:L}"), F(-1.234567e-2));
2026 test(SV("-0.1234567"), en_US
, SV("{:L}"), F(-1.234567e-1));
2027 test(SV("-1.234567"), en_US
, SV("{:L}"), F(-1.234567e0
));
2028 test(SV("-12.34567"), en_US
, SV("{:L}"), F(-1.234567e1
));
2029 test(SV("-123.4567"), en_US
, SV("{:L}"), F(-1.234567e2
));
2030 test(SV("-1,234.567"), en_US
, SV("{:L}"), F(-1.234567e3
));
2031 test(SV("-12,345.67"), en_US
, SV("{:L}"), F(-1.234567e4
));
2032 test(SV("-123,456.7"), en_US
, SV("{:L}"), F(-1.234567e5
));
2033 test(SV("-1,234,567"), en_US
, SV("{:L}"), F(-1.234567e6
));
2034 test(SV("-12,345,670"), en_US
, SV("{:L}"), F(-1.234567e7
));
2035 if constexpr (sizeof(F
) > sizeof(float)) {
2036 test(SV("-123,456,700"), en_US
, SV("{:L}"), F(-1.234567e8
));
2037 test(SV("-1,234,567,000"), en_US
, SV("{:L}"), F(-1.234567e9
));
2038 test(SV("-12,345,670,000"), en_US
, SV("{:L}"), F(-1.234567e10
));
2039 test(SV("-123,456,700,000"), en_US
, SV("{:L}"), F(-1.234567e11
));
2040 test(SV("-1.234567e+12"), en_US
, SV("{:L}"), F(-1.234567e12
));
2041 test(SV("-1.234567e+13"), en_US
, SV("{:L}"), F(-1.234567e13
));
2044 std::locale::global(en_US
);
2045 test(SV("1#234567e-06"), loc
, SV("{:L}"), F(1.234567e-6));
2046 test(SV("1#234567e-05"), loc
, SV("{:L}"), F(1.234567e-5));
2047 test(SV("0#0001234567"), loc
, SV("{:L}"), F(1.234567e-4));
2048 test(SV("0#001234567"), loc
, SV("{:L}"), F(1.234567e-3));
2049 test(SV("0#01234567"), loc
, SV("{:L}"), F(1.234567e-2));
2050 test(SV("0#1234567"), loc
, SV("{:L}"), F(1.234567e-1));
2051 test(SV("1#234567"), loc
, SV("{:L}"), F(1.234567e0
));
2052 test(SV("1_2#34567"), loc
, SV("{:L}"), F(1.234567e1
));
2053 test(SV("12_3#4567"), loc
, SV("{:L}"), F(1.234567e2
));
2054 test(SV("1_23_4#567"), loc
, SV("{:L}"), F(1.234567e3
));
2055 test(SV("12_34_5#67"), loc
, SV("{:L}"), F(1.234567e4
));
2056 test(SV("123_45_6#7"), loc
, SV("{:L}"), F(1.234567e5
));
2057 test(SV("1_234_56_7"), loc
, SV("{:L}"), F(1.234567e6
));
2058 test(SV("12_345_67_0"), loc
, SV("{:L}"), F(1.234567e7
));
2059 if constexpr (sizeof(F
) > sizeof(float)) {
2060 test(SV("1_23_456_70_0"), loc
, SV("{:L}"), F(1.234567e8
));
2061 test(SV("1_2_34_567_00_0"), loc
, SV("{:L}"), F(1.234567e9
));
2062 test(SV("1_2_3_45_670_00_0"), loc
, SV("{:L}"), F(1.234567e10
));
2063 test(SV("1_2_3_4_56_700_00_0"), loc
, SV("{:L}"), F(1.234567e11
));
2064 test(SV("1#234567e+12"), loc
, SV("{:L}"), F(1.234567e12
));
2065 test(SV("1#234567e+13"), loc
, SV("{:L}"), F(1.234567e13
));
2067 test(SV("-1#234567e-06"), loc
, SV("{:L}"), F(-1.234567e-6));
2068 test(SV("-1#234567e-05"), loc
, SV("{:L}"), F(-1.234567e-5));
2069 test(SV("-0#0001234567"), loc
, SV("{:L}"), F(-1.234567e-4));
2070 test(SV("-0#001234567"), loc
, SV("{:L}"), F(-1.234567e-3));
2071 test(SV("-0#01234567"), loc
, SV("{:L}"), F(-1.234567e-2));
2072 test(SV("-0#1234567"), loc
, SV("{:L}"), F(-1.234567e-1));
2073 test(SV("-1#234567"), loc
, SV("{:L}"), F(-1.234567e0
));
2074 test(SV("-1_2#34567"), loc
, SV("{:L}"), F(-1.234567e1
));
2075 test(SV("-12_3#4567"), loc
, SV("{:L}"), F(-1.234567e2
));
2076 test(SV("-1_23_4#567"), loc
, SV("{:L}"), F(-1.234567e3
));
2077 test(SV("-12_34_5#67"), loc
, SV("{:L}"), F(-1.234567e4
));
2078 test(SV("-123_45_6#7"), loc
, SV("{:L}"), F(-1.234567e5
));
2079 test(SV("-1_234_56_7"), loc
, SV("{:L}"), F(-1.234567e6
));
2080 test(SV("-12_345_67_0"), loc
, SV("{:L}"), F(-1.234567e7
));
2081 if constexpr (sizeof(F
) > sizeof(float)) {
2082 test(SV("-1_23_456_70_0"), loc
, SV("{:L}"), F(-1.234567e8
));
2083 test(SV("-1_2_34_567_00_0"), loc
, SV("{:L}"), F(-1.234567e9
));
2084 test(SV("-1_2_3_45_670_00_0"), loc
, SV("{:L}"), F(-1.234567e10
));
2085 test(SV("-1_2_3_4_56_700_00_0"), loc
, SV("{:L}"), F(-1.234567e11
));
2086 test(SV("-1#234567e+12"), loc
, SV("{:L}"), F(-1.234567e12
));
2087 test(SV("-1#234567e+13"), loc
, SV("{:L}"), F(-1.234567e13
));
2090 // *** Fill, align, zero padding ***
2091 std::locale::global(en_US
);
2092 test(SV("1,234.567$$$"), SV("{:$<12L}"), F(1.234567e3
));
2093 test(SV("$$$1,234.567"), SV("{:$>12L}"), F(1.234567e3
));
2094 test(SV("$1,234.567$$"), SV("{:$^12L}"), F(1.234567e3
));
2095 test(SV("0001,234.567"), SV("{:012L}"), F(1.234567e3
));
2096 test(SV("-1,234.567$$$"), SV("{:$<13L}"), F(-1.234567e3
));
2097 test(SV("$$$-1,234.567"), SV("{:$>13L}"), F(-1.234567e3
));
2098 test(SV("$-1,234.567$$"), SV("{:$^13L}"), F(-1.234567e3
));
2099 test(SV("-0001,234.567"), SV("{:013L}"), F(-1.234567e3
));
2101 std::locale::global(loc
);
2102 test(SV("1_23_4#567$$$"), SV("{:$<13L}"), F(1.234567e3
));
2103 test(SV("$$$1_23_4#567"), SV("{:$>13L}"), F(1.234567e3
));
2104 test(SV("$1_23_4#567$$"), SV("{:$^13L}"), F(1.234567e3
));
2105 test(SV("0001_23_4#567"), SV("{:013L}"), F(1.234567e3
));
2106 test(SV("-1_23_4#567$$$"), SV("{:$<14L}"), F(-1.234567e3
));
2107 test(SV("$$$-1_23_4#567"), SV("{:$>14L}"), F(-1.234567e3
));
2108 test(SV("$-1_23_4#567$$"), SV("{:$^14L}"), F(-1.234567e3
));
2109 test(SV("-0001_23_4#567"), SV("{:014L}"), F(-1.234567e3
));
2111 test(SV("1,234.567$$$"), en_US
, SV("{:$<12L}"), F(1.234567e3
));
2112 test(SV("$$$1,234.567"), en_US
, SV("{:$>12L}"), F(1.234567e3
));
2113 test(SV("$1,234.567$$"), en_US
, SV("{:$^12L}"), F(1.234567e3
));
2114 test(SV("0001,234.567"), en_US
, SV("{:012L}"), F(1.234567e3
));
2115 test(SV("-1,234.567$$$"), en_US
, SV("{:$<13L}"), F(-1.234567e3
));
2116 test(SV("$$$-1,234.567"), en_US
, SV("{:$>13L}"), F(-1.234567e3
));
2117 test(SV("$-1,234.567$$"), en_US
, SV("{:$^13L}"), F(-1.234567e3
));
2118 test(SV("-0001,234.567"), en_US
, SV("{:013L}"), F(-1.234567e3
));
2120 std::locale::global(en_US
);
2121 test(SV("1_23_4#567$$$"), loc
, SV("{:$<13L}"), F(1.234567e3
));
2122 test(SV("$$$1_23_4#567"), loc
, SV("{:$>13L}"), F(1.234567e3
));
2123 test(SV("$1_23_4#567$$"), loc
, SV("{:$^13L}"), F(1.234567e3
));
2124 test(SV("0001_23_4#567"), loc
, SV("{:013L}"), F(1.234567e3
));
2125 test(SV("-1_23_4#567$$$"), loc
, SV("{:$<14L}"), F(-1.234567e3
));
2126 test(SV("$$$-1_23_4#567"), loc
, SV("{:$>14L}"), F(-1.234567e3
));
2127 test(SV("$-1_23_4#567$$"), loc
, SV("{:$^14L}"), F(-1.234567e3
));
2128 test(SV("-0001_23_4#567"), loc
, SV("{:014L}"), F(-1.234567e3
));
2131 template <class F
, class CharT
>
2132 void test_floating_point_default_precision() {
2133 std::locale loc
= std::locale(std::locale(), new numpunct
<CharT
>());
2134 std::locale en_US
= std::locale(LOCALE_en_US_UTF_8
);
2137 std::locale::global(en_US
);
2138 test(SV("1.23457e-06"), SV("{:.6L}"), F(1.234567e-6));
2139 test(SV("1.23457e-05"), SV("{:.6L}"), F(1.234567e-5));
2140 test(SV("0.000123457"), SV("{:.6L}"), F(1.234567e-4));
2141 test(SV("0.00123457"), SV("{:.6L}"), F(1.234567e-3));
2142 test(SV("0.0123457"), SV("{:.6L}"), F(1.234567e-2));
2143 test(SV("0.123457"), SV("{:.6L}"), F(1.234567e-1));
2144 test(SV("1.23457"), SV("{:.6L}"), F(1.234567e0
));
2145 test(SV("12.3457"), SV("{:.6L}"), F(1.234567e1
));
2146 test(SV("123.457"), SV("{:.6L}"), F(1.234567e2
));
2147 test(SV("1,234.57"), SV("{:.6L}"), F(1.234567e3
));
2148 test(SV("12,345.7"), SV("{:.6L}"), F(1.234567e4
));
2149 test(SV("123,457"), SV("{:.6L}"), F(1.234567e5
));
2150 test(SV("1.23457e+06"), SV("{:.6L}"), F(1.234567e6
));
2151 test(SV("1.23457e+07"), SV("{:.6L}"), F(1.234567e7
));
2152 test(SV("-1.23457e-06"), SV("{:.6L}"), F(-1.234567e-6));
2153 test(SV("-1.23457e-05"), SV("{:.6L}"), F(-1.234567e-5));
2154 test(SV("-0.000123457"), SV("{:.6L}"), F(-1.234567e-4));
2155 test(SV("-0.00123457"), SV("{:.6L}"), F(-1.234567e-3));
2156 test(SV("-0.0123457"), SV("{:.6L}"), F(-1.234567e-2));
2157 test(SV("-0.123457"), SV("{:.6L}"), F(-1.234567e-1));
2158 test(SV("-1.23457"), SV("{:.6L}"), F(-1.234567e0
));
2159 test(SV("-12.3457"), SV("{:.6L}"), F(-1.234567e1
));
2160 test(SV("-123.457"), SV("{:.6L}"), F(-1.234567e2
));
2161 test(SV("-1,234.57"), SV("{:.6L}"), F(-1.234567e3
));
2162 test(SV("-12,345.7"), SV("{:.6L}"), F(-1.234567e4
));
2163 test(SV("-123,457"), SV("{:.6L}"), F(-1.234567e5
));
2164 test(SV("-1.23457e+06"), SV("{:.6L}"), F(-1.234567e6
));
2165 test(SV("-1.23457e+07"), SV("{:.6L}"), F(-1.234567e7
));
2167 std::locale::global(loc
);
2168 test(SV("1#23457e-06"), SV("{:.6L}"), F(1.234567e-6));
2169 test(SV("1#23457e-05"), SV("{:.6L}"), F(1.234567e-5));
2170 test(SV("0#000123457"), SV("{:.6L}"), F(1.234567e-4));
2171 test(SV("0#00123457"), SV("{:.6L}"), F(1.234567e-3));
2172 test(SV("0#0123457"), SV("{:.6L}"), F(1.234567e-2));
2173 test(SV("0#123457"), SV("{:.6L}"), F(1.234567e-1));
2174 test(SV("1#23457"), SV("{:.6L}"), F(1.234567e0
));
2175 test(SV("1_2#3457"), SV("{:.6L}"), F(1.234567e1
));
2176 test(SV("12_3#457"), SV("{:.6L}"), F(1.234567e2
));
2177 test(SV("1_23_4#57"), SV("{:.6L}"), F(1.234567e3
));
2178 test(SV("12_34_5#7"), SV("{:.6L}"), F(1.234567e4
));
2179 test(SV("123_45_7"), SV("{:.6L}"), F(1.234567e5
));
2180 test(SV("1#23457e+06"), SV("{:.6L}"), F(1.234567e6
));
2181 test(SV("1#23457e+07"), SV("{:.6L}"), F(1.234567e7
));
2182 test(SV("-1#23457e-06"), SV("{:.6L}"), F(-1.234567e-6));
2183 test(SV("-1#23457e-05"), SV("{:.6L}"), F(-1.234567e-5));
2184 test(SV("-0#000123457"), SV("{:.6L}"), F(-1.234567e-4));
2185 test(SV("-0#00123457"), SV("{:.6L}"), F(-1.234567e-3));
2186 test(SV("-0#0123457"), SV("{:.6L}"), F(-1.234567e-2));
2187 test(SV("-0#123457"), SV("{:.6L}"), F(-1.234567e-1));
2188 test(SV("-1#23457"), SV("{:.6L}"), F(-1.234567e0
));
2189 test(SV("-1_2#3457"), SV("{:.6L}"), F(-1.234567e1
));
2190 test(SV("-12_3#457"), SV("{:.6L}"), F(-1.234567e2
));
2191 test(SV("-1_23_4#57"), SV("{:.6L}"), F(-1.234567e3
));
2192 test(SV("-12_34_5#7"), SV("{:.6L}"), F(-1.234567e4
));
2193 test(SV("-123_45_7"), SV("{:.6L}"), F(-1.234567e5
));
2194 test(SV("-1#23457e+06"), SV("{:.6L}"), F(-1.234567e6
));
2195 test(SV("-1#23457e+07"), SV("{:.6L}"), F(-1.234567e7
));
2197 test(SV("1.23457e-06"), en_US
, SV("{:.6L}"), F(1.234567e-6));
2198 test(SV("1.23457e-05"), en_US
, SV("{:.6L}"), F(1.234567e-5));
2199 test(SV("0.000123457"), en_US
, SV("{:.6L}"), F(1.234567e-4));
2200 test(SV("0.00123457"), en_US
, SV("{:.6L}"), F(1.234567e-3));
2201 test(SV("0.0123457"), en_US
, SV("{:.6L}"), F(1.234567e-2));
2202 test(SV("0.123457"), en_US
, SV("{:.6L}"), F(1.234567e-1));
2203 test(SV("1.23457"), en_US
, SV("{:.6L}"), F(1.234567e0
));
2204 test(SV("12.3457"), en_US
, SV("{:.6L}"), F(1.234567e1
));
2205 test(SV("123.457"), en_US
, SV("{:.6L}"), F(1.234567e2
));
2206 test(SV("1,234.57"), en_US
, SV("{:.6L}"), F(1.234567e3
));
2207 test(SV("12,345.7"), en_US
, SV("{:.6L}"), F(1.234567e4
));
2208 test(SV("123,457"), en_US
, SV("{:.6L}"), F(1.234567e5
));
2209 test(SV("1.23457e+06"), en_US
, SV("{:.6L}"), F(1.234567e6
));
2210 test(SV("1.23457e+07"), en_US
, SV("{:.6L}"), F(1.234567e7
));
2211 test(SV("-1.23457e-06"), en_US
, SV("{:.6L}"), F(-1.234567e-6));
2212 test(SV("-1.23457e-05"), en_US
, SV("{:.6L}"), F(-1.234567e-5));
2213 test(SV("-0.000123457"), en_US
, SV("{:.6L}"), F(-1.234567e-4));
2214 test(SV("-0.00123457"), en_US
, SV("{:.6L}"), F(-1.234567e-3));
2215 test(SV("-0.0123457"), en_US
, SV("{:.6L}"), F(-1.234567e-2));
2216 test(SV("-0.123457"), en_US
, SV("{:.6L}"), F(-1.234567e-1));
2217 test(SV("-1.23457"), en_US
, SV("{:.6L}"), F(-1.234567e0
));
2218 test(SV("-12.3457"), en_US
, SV("{:.6L}"), F(-1.234567e1
));
2219 test(SV("-123.457"), en_US
, SV("{:.6L}"), F(-1.234567e2
));
2220 test(SV("-1,234.57"), en_US
, SV("{:.6L}"), F(-1.234567e3
));
2221 test(SV("-12,345.7"), en_US
, SV("{:.6L}"), F(-1.234567e4
));
2222 test(SV("-123,457"), en_US
, SV("{:.6L}"), F(-1.234567e5
));
2223 test(SV("-1.23457e+06"), en_US
, SV("{:.6L}"), F(-1.234567e6
));
2224 test(SV("-1.23457e+07"), en_US
, SV("{:.6L}"), F(-1.234567e7
));
2226 std::locale::global(en_US
);
2227 test(SV("1#23457e-06"), loc
, SV("{:.6L}"), F(1.234567e-6));
2228 test(SV("1#23457e-05"), loc
, SV("{:.6L}"), F(1.234567e-5));
2229 test(SV("0#000123457"), loc
, SV("{:.6L}"), F(1.234567e-4));
2230 test(SV("0#00123457"), loc
, SV("{:.6L}"), F(1.234567e-3));
2231 test(SV("0#0123457"), loc
, SV("{:.6L}"), F(1.234567e-2));
2232 test(SV("0#123457"), loc
, SV("{:.6L}"), F(1.234567e-1));
2233 test(SV("1#23457"), loc
, SV("{:.6L}"), F(1.234567e0
));
2234 test(SV("1_2#3457"), loc
, SV("{:.6L}"), F(1.234567e1
));
2235 test(SV("12_3#457"), loc
, SV("{:.6L}"), F(1.234567e2
));
2236 test(SV("1_23_4#57"), loc
, SV("{:.6L}"), F(1.234567e3
));
2237 test(SV("12_34_5#7"), loc
, SV("{:.6L}"), F(1.234567e4
));
2238 test(SV("123_45_7"), loc
, SV("{:.6L}"), F(1.234567e5
));
2239 test(SV("1#23457e+06"), loc
, SV("{:.6L}"), F(1.234567e6
));
2240 test(SV("1#23457e+07"), loc
, SV("{:.6L}"), F(1.234567e7
));
2241 test(SV("-1#23457e-06"), loc
, SV("{:.6L}"), F(-1.234567e-6));
2242 test(SV("-1#23457e-05"), loc
, SV("{:.6L}"), F(-1.234567e-5));
2243 test(SV("-0#000123457"), loc
, SV("{:.6L}"), F(-1.234567e-4));
2244 test(SV("-0#00123457"), loc
, SV("{:.6L}"), F(-1.234567e-3));
2245 test(SV("-0#0123457"), loc
, SV("{:.6L}"), F(-1.234567e-2));
2246 test(SV("-0#123457"), loc
, SV("{:.6L}"), F(-1.234567e-1));
2247 test(SV("-1#23457"), loc
, SV("{:.6L}"), F(-1.234567e0
));
2248 test(SV("-1_2#3457"), loc
, SV("{:.6L}"), F(-1.234567e1
));
2249 test(SV("-12_3#457"), loc
, SV("{:.6L}"), F(-1.234567e2
));
2250 test(SV("-1_23_4#57"), loc
, SV("{:.6L}"), F(-1.234567e3
));
2251 test(SV("-12_34_5#7"), loc
, SV("{:.6L}"), F(-1.234567e4
));
2252 test(SV("-123_45_7"), loc
, SV("{:.6L}"), F(-1.234567e5
));
2253 test(SV("-1#23457e+06"), loc
, SV("{:.6L}"), F(-1.234567e6
));
2254 test(SV("-1#23457e+07"), loc
, SV("{:.6L}"), F(-1.234567e7
));
2256 // *** Fill, align, zero padding ***
2257 std::locale::global(en_US
);
2258 test(SV("1,234.57$$$"), SV("{:$<11.6L}"), F(1.234567e3
));
2259 test(SV("$$$1,234.57"), SV("{:$>11.6L}"), F(1.234567e3
));
2260 test(SV("$1,234.57$$"), SV("{:$^11.6L}"), F(1.234567e3
));
2261 test(SV("0001,234.57"), SV("{:011.6L}"), F(1.234567e3
));
2262 test(SV("-1,234.57$$$"), SV("{:$<12.6L}"), F(-1.234567e3
));
2263 test(SV("$$$-1,234.57"), SV("{:$>12.6L}"), F(-1.234567e3
));
2264 test(SV("$-1,234.57$$"), SV("{:$^12.6L}"), F(-1.234567e3
));
2265 test(SV("-0001,234.57"), SV("{:012.6L}"), F(-1.234567e3
));
2267 std::locale::global(loc
);
2268 test(SV("1_23_4#57$$$"), SV("{:$<12.6L}"), F(1.234567e3
));
2269 test(SV("$$$1_23_4#57"), SV("{:$>12.6L}"), F(1.234567e3
));
2270 test(SV("$1_23_4#57$$"), SV("{:$^12.6L}"), F(1.234567e3
));
2271 test(SV("0001_23_4#57"), SV("{:012.6L}"), F(1.234567e3
));
2272 test(SV("-1_23_4#57$$$"), SV("{:$<13.6L}"), F(-1.234567e3
));
2273 test(SV("$$$-1_23_4#57"), SV("{:$>13.6L}"), F(-1.234567e3
));
2274 test(SV("$-1_23_4#57$$"), SV("{:$^13.6L}"), F(-1.234567e3
));
2275 test(SV("-0001_23_4#57"), SV("{:013.6L}"), F(-1.234567e3
));
2277 test(SV("1,234.57$$$"), en_US
, SV("{:$<11.6L}"), F(1.234567e3
));
2278 test(SV("$$$1,234.57"), en_US
, SV("{:$>11.6L}"), F(1.234567e3
));
2279 test(SV("$1,234.57$$"), en_US
, SV("{:$^11.6L}"), F(1.234567e3
));
2280 test(SV("0001,234.57"), en_US
, SV("{:011.6L}"), F(1.234567e3
));
2281 test(SV("-1,234.57$$$"), en_US
, SV("{:$<12.6L}"), F(-1.234567e3
));
2282 test(SV("$$$-1,234.57"), en_US
, SV("{:$>12.6L}"), F(-1.234567e3
));
2283 test(SV("$-1,234.57$$"), en_US
, SV("{:$^12.6L}"), F(-1.234567e3
));
2284 test(SV("-0001,234.57"), en_US
, SV("{:012.6L}"), F(-1.234567e3
));
2286 std::locale::global(en_US
);
2287 test(SV("1_23_4#57$$$"), loc
, SV("{:$<12.6L}"), F(1.234567e3
));
2288 test(SV("$$$1_23_4#57"), loc
, SV("{:$>12.6L}"), F(1.234567e3
));
2289 test(SV("$1_23_4#57$$"), loc
, SV("{:$^12.6L}"), F(1.234567e3
));
2290 test(SV("0001_23_4#57"), loc
, SV("{:012.6L}"), F(1.234567e3
));
2291 test(SV("-1_23_4#57$$$"), loc
, SV("{:$<13.6L}"), F(-1.234567e3
));
2292 test(SV("$$$-1_23_4#57"), loc
, SV("{:$>13.6L}"), F(-1.234567e3
));
2293 test(SV("$-1_23_4#57$$"), loc
, SV("{:$^13.6L}"), F(-1.234567e3
));
2294 test(SV("-0001_23_4#57"), loc
, SV("{:013.6L}"), F(-1.234567e3
));
2297 template <class F
, class CharT
>
2298 void test_floating_point() {
2299 test_floating_point_hex_lower_case
<F
, CharT
>();
2300 test_floating_point_hex_upper_case
<F
, CharT
>();
2301 test_floating_point_hex_lower_case_precision
<F
, CharT
>();
2302 test_floating_point_hex_upper_case_precision
<F
, CharT
>();
2304 test_floating_point_scientific_lower_case
<F
, CharT
>();
2305 test_floating_point_scientific_upper_case
<F
, CharT
>();
2307 test_floating_point_fixed_lower_case
<F
, CharT
>();
2308 test_floating_point_fixed_upper_case
<F
, CharT
>();
2310 test_floating_point_general_lower_case
<F
, CharT
>();
2311 test_floating_point_general_upper_case
<F
, CharT
>();
2313 test_floating_point_default
<F
, CharT
>();
2314 test_floating_point_default_precision
<F
, CharT
>();
2317 template <class CharT
>
2320 test_integer
<CharT
>();
2321 test_floating_point
<float, CharT
>();
2322 test_floating_point
<double, CharT
>();
2323 test_floating_point
<long double, CharT
>();
2326 int main(int, char**) {
2328 #ifndef TEST_HAS_NO_WIDE_CHARACTERS