1//===----------------------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9// UNSUPPORTED: c++03, c++11, c++14, c++17
10// UNSUPPORTED: no-localization
11// UNSUPPORTED: GCC-ALWAYS_INLINE-FIXME
12
13// XFAIL: availability-fp_to_chars-missing
14
15// Bionic has minimal locale support, investigate this later.
16// XFAIL: LIBCXX-ANDROID-FIXME
17
18// REQUIRES: locale.en_US.UTF-8
19
20// <format>
21
22// This test the locale-specific form for these formatting functions:
23//
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);
33//
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);
38//
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);
47//
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,
54// format_args args);
55// template<class Out>
56// Out vformat_to(Out out, const locale& loc, wstring_view fmt,
57// wformat_arg args);
58//
59// template<class Out> struct format_to_n_result {
60// Out out;
61// iter_difference_t<Out> size;
62// };
63//
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);
78//
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);
87
88#include <format>
89#include <cassert>
90#include <iostream>
91#include <vector>
92
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"
101
102#define STR(S) MAKE_STRING(CharT, S)
103#define SV(S) MAKE_STRING_VIEW(CharT, S)
104
105template <class CharT>
106struct numpunct;
107
108template <>
109struct numpunct<char> : std::numpunct<char> {
110 string_type do_truename() const override { return "yes"; }
111 string_type do_falsename() const override { return "no"; }
112
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 '#'; }
116};
117
118#ifndef TEST_HAS_NO_WIDE_CHARACTERS
119template <>
120struct 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"; }
123
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'#'; }
127};
128#endif
129
130template <class CharT, class... Args>
131void test(std::basic_string_view<CharT> expected, test_format_string<CharT, Args...> fmt, Args&&... args) {
132 // *** format ***
133 {
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'));
138 }
139 // *** vformat ***
140 {
141 std::basic_string<CharT> out = std::vformat(fmt.get(), std::make_format_args<context_t<CharT>>(args...));
142 assert(out == expected);
143 }
144 // *** format_to ***
145 {
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);
150 }
151 // *** vformat_to ***
152 {
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);
157 }
158 // *** format_to_n ***
159 {
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);
165
166 assert(result.size == formatted_size);
167 assert(out == expected.substr(0, size));
168 }
169 // *** formatted_size ***
170 {
171 std::size_t size = std::formatted_size(fmt, std::forward<Args>(args)...);
172 assert(size == expected.size());
173 }
174}
175
176template <class CharT, class... Args>
177void test(
178 std::basic_string_view<CharT> expected, std::locale loc, test_format_string<CharT, Args...> fmt, Args&&... args) {
179 // *** format ***
180 {
181 std::basic_string<CharT> out = std::format(loc, fmt, std::forward<Args>(args)...);
182 if constexpr (std::same_as<CharT, char>)
183 if (out != expected)
184 std::cerr << "\nFormat string " << fmt.get() << "\nExpected output " << expected << "\nActual output "
185 << out << '\n';
186 assert(out == expected);
187 }
188 // *** vformat ***
189 {
190 std::basic_string<CharT> out = std::vformat(loc, fmt.get(), std::make_format_args<context_t<CharT>>(args...));
191 assert(out == expected);
192 }
193 // *** format_to ***
194 {
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);
199 }
200 // *** vformat_to ***
201 {
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);
206 }
207 // *** format_to_n ***
208 {
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);
215
216 assert(result.size == formatted_size);
217 assert(out == expected.substr(0, size));
218 }
219 // *** formatted_size ***
220 {
221 std::size_t size = std::formatted_size(loc, fmt, std::forward<Args>(args)...);
222 assert(size == expected.size());
223 }
224}
225
226#ifndef TEST_HAS_NO_UNICODE
227template <class CharT>
228struct numpunct_unicode;
229
230template <>
231struct 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"; }
234};
235
236# ifndef TEST_HAS_NO_WIDE_CHARACTERS
237template <>
238struct 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"; }
241};
242# endif
243#endif // TEST_HAS_NO_UNICODE
244
245template <class CharT>
246void test_bool() {
247 std::locale loc = std::locale(std::locale(), new numpunct<CharT>());
248
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);
253
254 test(SV("yes"), loc, SV("{:L}"), true);
255 test(SV("no"), loc, SV("{:L}"), false);
256
257 std::locale::global(loc: loc);
258 test(SV("yes"), SV("{:L}"), true);
259 test(SV("no"), SV("{:L}"), false);
260
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);
263
264#ifndef TEST_HAS_NO_UNICODE
265 std::locale loc_unicode = std::locale(std::locale(), new numpunct_unicode<CharT>());
266
267 test(SV("gültig"), loc_unicode, SV("{:L}"), true);
268 test(SV("ungültig"), loc_unicode, SV("{:L}"), false);
269
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
275}
276
277template <class CharT>
278void 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);
281
282 // *** Decimal ***
283 std::locale::global(loc: 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);
295
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);
306
307 std::locale::global(loc: 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);
319
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);
330
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);
342
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);
353
354 std::locale::global(loc: 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);
366
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);
377
378 // *** Binary ***
379 std::locale::global(loc: 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);
383
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);
387
388 test(SV("-1"), SV("{:LB}"), -0b1);
389 test(SV("-1,000,000,000"), SV("{:LB}"), -0b1'000'000'000);
390
391 test(SV("-0B1"), SV("{:#LB}"), -0b1);
392 test(SV("-0B1,000,000,000"), SV("{:#LB}"), -0b1'000'000'000);
393
394 std::locale::global(loc: 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);
398
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);
402
403 test(SV("-1"), SV("{:LB}"), -0b1);
404 test(SV("-1_0_00_000_00_0"), SV("{:LB}"), -0b1'000'000'000);
405
406 test(SV("-0B1"), SV("{:#LB}"), -0b1);
407 test(SV("-0B1_0_00_000_00_0"), SV("{:#LB}"), -0b1'000'000'000);
408
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);
412
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);
416
417 test(SV("-1"), en_US, SV("{:LB}"), -0b1);
418 test(SV("-1,000,000,000"), en_US, SV("{:LB}"), -0b1'000'000'000);
419
420 test(SV("-0B1"), en_US, SV("{:#LB}"), -0b1);
421 test(SV("-0B1,000,000,000"), en_US, SV("{:#LB}"), -0b1'000'000'000);
422
423 std::locale::global(loc: 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);
427
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);
431
432 test(SV("-1"), loc, SV("{:LB}"), -0b1);
433 test(SV("-1_0_00_000_00_0"), loc, SV("{:LB}"), -0b1'000'000'000);
434
435 test(SV("-0B1"), loc, SV("{:#LB}"), -0b1);
436 test(SV("-0B1_0_00_000_00_0"), loc, SV("{:#LB}"), -0b1'000'000'000);
437
438 // *** Octal ***
439 std::locale::global(loc: 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);
443
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);
447
448 test(SV("-1"), SV("{:Lo}"), -01);
449 test(SV("-1,000,000,000"), SV("{:Lo}"), -01'000'000'000);
450
451 test(SV("-01"), SV("{:#Lo}"), -01);
452 test(SV("-01,000,000,000"), SV("{:#Lo}"), -01'000'000'000);
453
454 std::locale::global(loc: 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);
458
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);
462
463 test(SV("-1"), SV("{:Lo}"), -01);
464 test(SV("-1_0_00_000_00_0"), SV("{:Lo}"), -01'000'000'000);
465
466 test(SV("-01"), SV("{:#Lo}"), -01);
467 test(SV("-01_0_00_000_00_0"), SV("{:#Lo}"), -01'000'000'000);
468
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);
472
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);
476
477 test(SV("-1"), en_US, SV("{:Lo}"), -01);
478 test(SV("-1,000,000,000"), en_US, SV("{:Lo}"), -01'000'000'000);
479
480 test(SV("-01"), en_US, SV("{:#Lo}"), -01);
481 test(SV("-01,000,000,000"), en_US, SV("{:#Lo}"), -01'000'000'000);
482
483 std::locale::global(loc: 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);
487
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);
491
492 test(SV("-1"), loc, SV("{:Lo}"), -01);
493 test(SV("-1_0_00_000_00_0"), loc, SV("{:Lo}"), -01'000'000'000);
494
495 test(SV("-01"), loc, SV("{:#Lo}"), -01);
496 test(SV("-01_0_00_000_00_0"), loc, SV("{:#Lo}"), -01'000'000'000);
497
498 // *** Hexadecimal ***
499 std::locale::global(loc: 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);
503
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);
507
508 test(SV("-1"), SV("{:LX}"), -0x1);
509 test(SV("-1,000,000,000"), SV("{:LX}"), -0x1'000'000'000);
510
511 test(SV("-0X1"), SV("{:#LX}"), -0x1);
512 test(SV("-0X1,000,000,000"), SV("{:#LX}"), -0x1'000'000'000);
513
514 std::locale::global(loc: 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);
518
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);
522
523 test(SV("-1"), SV("{:LX}"), -0x1);
524 test(SV("-1_0_00_000_00_0"), SV("{:LX}"), -0x1'000'000'000);
525
526 test(SV("-0X1"), SV("{:#LX}"), -0x1);
527 test(SV("-0X1_0_00_000_00_0"), SV("{:#LX}"), -0x1'000'000'000);
528
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);
532
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);
536
537 test(SV("-1"), en_US, SV("{:LX}"), -0x1);
538 test(SV("-1,000,000,000"), en_US, SV("{:LX}"), -0x1'000'000'000);
539
540 test(SV("-0X1"), en_US, SV("{:#LX}"), -0x1);
541 test(SV("-0X1,000,000,000"), en_US, SV("{:#LX}"), -0x1'000'000'000);
542
543 std::locale::global(loc: 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);
547
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);
551
552 test(SV("-1"), loc, SV("{:LX}"), -0x1);
553 test(SV("-1_0_00_000_00_0"), loc, SV("{:LX}"), -0x1'000'000'000);
554
555 test(SV("-0X1"), loc, SV("{:#LX}"), -0x1);
556 test(SV("-0X1_0_00_000_00_0"), loc, SV("{:#LX}"), -0x1'000'000'000);
557
558 // *** align-fill & width ***
559 test(SV("4_2"), loc, SV("{:L}"), 42);
560
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);
565
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);
569
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);
573
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);
577
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);
581
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);
585
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);
590
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);
595
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);
599
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);
603}
604
605template <class F, class CharT>
606void 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);
609
610 // *** Basic ***
611 std::locale::global(loc: 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));
620
621 std::locale::global(loc: 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));
630
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));
639
640 std::locale::global(loc: 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));
649
650 // *** Fill, align, zero padding ***
651 std::locale::global(loc: 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));
660
661 std::locale::global(loc: 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));
670
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));
679
680 std::locale::global(loc: 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));
689}
690
691template <class F, class CharT>
692void 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);
695
696 // *** Basic ***
697 std::locale::global(loc: 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));
706
707 std::locale::global(loc: 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));
716
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));
725
726 std::locale::global(loc: 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));
735
736 // *** Fill, align, zero Padding ***
737 std::locale::global(loc: 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));
746
747 std::locale::global(loc: 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));
756
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));
765
766 std::locale::global(loc: 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));
775}
776
777template <class F, class CharT>
778void 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);
781
782 // *** Basic ***
783 std::locale::global(loc: 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));
792
793 std::locale::global(loc: 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));
802
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));
811
812 std::locale::global(loc: 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));
821
822 // *** Fill, align, zero padding ***
823 std::locale::global(loc: 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));
832
833 std::locale::global(loc: 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));
842
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));
851
852 std::locale::global(loc: 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));
861}
862
863template <class F, class CharT>
864void 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);
867
868 // *** Basic ***
869 std::locale::global(loc: 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));
878
879 std::locale::global(loc: 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));
888
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));
897
898 std::locale::global(loc: 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));
907
908 // *** Fill, align, zero Padding ***
909 std::locale::global(loc: 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));
918
919 std::locale::global(loc: 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));
928
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));
937
938 std::locale::global(loc: 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));
947}
948
949template <class F, class CharT>
950void 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);
953
954 // *** Basic ***
955 std::locale::global(loc: 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));
972
973 std::locale::global(loc: 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));
990
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));
1007
1008 std::locale::global(loc: 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));
1025
1026 // *** Fill, align, zero padding ***
1027 std::locale::global(loc: 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));
1036
1037 std::locale::global(loc: 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));
1046
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));
1055
1056 std::locale::global(loc: 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));
1065}
1066
1067template <class F, class CharT>
1068void 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);
1071
1072 // *** Basic ***
1073 std::locale::global(loc: 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));
1090
1091 std::locale::global(loc: 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));
1108
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));
1125
1126 std::locale::global(loc: 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));
1143
1144 // *** Fill, align, zero padding ***
1145 std::locale::global(loc: 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));
1154
1155 std::locale::global(loc: 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));
1164
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));
1173
1174 std::locale::global(loc: 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));
1183}
1184
1185template <class F, class CharT>
1186void 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);
1189
1190 // *** Basic ***
1191 std::locale::global(loc: 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));
1208 }
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));
1225 }
1226
1227 std::locale::global(loc: 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));
1244 }
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));
1261 }
1262
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));
1279 }
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));
1296 }
1297
1298 std::locale::global(loc: 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));
1315 }
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));
1332 }
1333
1334 // *** Fill, align, zero padding ***
1335 if constexpr (sizeof(F) > sizeof(float)) {
1336 std::locale::global(loc: 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));
1345
1346 std::locale::global(loc: 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));
1355
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));
1364
1365 std::locale::global(loc: 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));
1374 }
1375}
1376
1377template <class F, class CharT>
1378void 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);
1381
1382 // *** Basic ***
1383 std::locale::global(loc: 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));
1400 }
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));
1417 }
1418
1419 std::locale::global(loc: 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));
1436 }
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));
1453 }
1454
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));
1471 }
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));
1488 }
1489
1490 std::locale::global(loc: 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));
1507 }
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));
1524 }
1525
1526 // *** Fill, align, zero padding ***
1527 if constexpr (sizeof(F) > sizeof(float)) {
1528 std::locale::global(loc: 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));
1537
1538 std::locale::global(loc: 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));
1547
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));
1556
1557 std::locale::global(loc: 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));
1566 }
1567}
1568
1569template <class F, class CharT>
1570void 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);
1573
1574 // *** Basic ***
1575 std::locale::global(loc: 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));
1604
1605 std::locale::global(loc: 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));
1634
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));
1663
1664 std::locale::global(loc: 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));
1693
1694 // *** Fill, align, zero padding ***
1695 std::locale::global(loc: 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));
1704
1705 std::locale::global(loc: 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));
1714
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));
1723
1724 std::locale::global(loc: 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));
1733}
1734
1735template <class F, class CharT>
1736void 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);
1739
1740 // *** Basic ***
1741 std::locale::global(loc: 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));
1770
1771 std::locale::global(loc: 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));
1800
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));
1829
1830 std::locale::global(loc: 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));
1859
1860 // *** Fill, align, zero padding ***
1861 std::locale::global(loc: 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));
1870
1871 std::locale::global(loc: 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));
1880
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));
1889
1890 std::locale::global(loc: 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));
1899}
1900
1901template <class F, class CharT>
1902void 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);
1905
1906 // *** Basic ***
1907 std::locale::global(loc: 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));
1929 }
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));
1951 }
1952
1953 std::locale::global(loc: 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));
1975 }
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));
1997 }
1998
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));
2020 }
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));
2042 }
2043
2044 std::locale::global(loc: 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));
2066 }
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));
2088 }
2089
2090 // *** Fill, align, zero padding ***
2091 std::locale::global(loc: 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));
2100
2101 std::locale::global(loc: 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));
2110
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));
2119
2120 std::locale::global(loc: 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));
2129}
2130
2131template <class F, class CharT>
2132void 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);
2135
2136 // *** Basic ***
2137 std::locale::global(loc: 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));
2166
2167 std::locale::global(loc: 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));
2196
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));
2225
2226 std::locale::global(loc: 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));
2255
2256 // *** Fill, align, zero padding ***
2257 std::locale::global(loc: 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));
2266
2267 std::locale::global(loc: 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));
2276
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));
2285
2286 std::locale::global(loc: 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));
2295}
2296
2297template <class F, class CharT >
2298void 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>();
2303
2304 test_floating_point_scientific_lower_case<F, CharT>();
2305 test_floating_point_scientific_upper_case<F, CharT>();
2306
2307 test_floating_point_fixed_lower_case<F, CharT>();
2308 test_floating_point_fixed_upper_case<F, CharT>();
2309
2310 test_floating_point_general_lower_case<F, CharT>();
2311 test_floating_point_general_upper_case<F, CharT>();
2312
2313 test_floating_point_default<F, CharT>();
2314 test_floating_point_default_precision<F, CharT>();
2315}
2316
2317template <class CharT>
2318void test() {
2319 test_bool<CharT>();
2320 test_integer<CharT>();
2321 test_floating_point<float, CharT>();
2322 test_floating_point<double, CharT>();
2323 test_floating_point<long double, CharT>();
2324}
2325
2326int main(int, char**) {
2327 test<char>();
2328#ifndef TEST_HAS_NO_WIDE_CHARACTERS
2329 test<wchar_t>();
2330#endif
2331
2332 return 0;
2333}
2334

source code of libcxx/test/std/utilities/format/format.functions/locale-specific_form.pass.cpp