Skip to content

Commit 9afb09e

Browse files
authored
[libcxx][test][AIX] address more platform differences in locale tests (#94826)
This is a follow on to #92312, where we address some more locale platform differences. These are: - for locale fr_FR AIX libc expects `U202F` as `LC_MONETARY` `thousands_sep` - for locale zh_CN AIX libc `LC_MONETARY` has `n_sign_posn == 1`, indicating the `negative_sign` should come before the `currency_symbol` string
1 parent d462bf6 commit 9afb09e

File tree

4 files changed

+326
-277
lines changed

4 files changed

+326
-277
lines changed

libcxx/test/std/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_fr_FR.pass.cpp

Lines changed: 129 additions & 138 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111
// NetBSD does not support LC_MONETARY at the moment
1212
// XFAIL: netbsd
1313

14-
// XFAIL: LIBCXX-AIX-FIXME
15-
1614
// REQUIRES: locale.fr_FR.UTF-8
1715

1816
// <locale>
@@ -32,6 +30,13 @@
3230
#include "platform_support.h" // locale name macros
3331
#include "test_macros.h"
3432

33+
#ifdef _AIX
34+
// the AIX libc expects U202F as LC_MONETARY thousands_sep
35+
# define THOUSANDS_SEP L"\u202F"
36+
#else
37+
# define THOUSANDS_SEP L" "
38+
#endif
39+
3540
typedef std::money_get<char, cpp17_input_iterator<const char*> > Fn;
3641

3742
class my_facet
@@ -432,26 +437,24 @@ int main(int, char**)
432437
assert(ex == -1);
433438
}
434439
{ // positive
435-
std::wstring v = convert_thousands_sep(L"1 234 567,89 ");
436-
typedef cpp17_input_iterator<const wchar_t*> I;
437-
long double ex;
438-
std::ios_base::iostate err = std::ios_base::goodbit;
439-
I iter = f.get(I(v.data()), I(v.data() + v.size()),
440-
false, ios, err, ex);
441-
assert(base(iter) == v.data() + v.size());
442-
assert(err == std::ios_base::eofbit);
443-
assert(ex == 123456789);
440+
std::wstring v = convert_thousands_sep(L"1" THOUSANDS_SEP "234" THOUSANDS_SEP "567,89 ");
441+
typedef cpp17_input_iterator<const wchar_t*> I;
442+
long double ex;
443+
std::ios_base::iostate err = std::ios_base::goodbit;
444+
I iter = f.get(I(v.data()), I(v.data() + v.size()), false, ios, err, ex);
445+
assert(base(iter) == v.data() + v.size());
446+
assert(err == std::ios_base::eofbit);
447+
assert(ex == 123456789);
444448
}
445449
{ // negative
446-
std::wstring v = convert_thousands_sep(L"-1 234 567,89");
447-
typedef cpp17_input_iterator<const wchar_t*> I;
448-
long double ex;
449-
std::ios_base::iostate err = std::ios_base::goodbit;
450-
I iter = f.get(I(v.data()), I(v.data() + v.size()),
451-
false, ios, err, ex);
452-
assert(base(iter) == v.data() + v.size());
453-
assert(err == std::ios_base::eofbit);
454-
assert(ex == -123456789);
450+
std::wstring v = convert_thousands_sep(L"-1" THOUSANDS_SEP "234" THOUSANDS_SEP "567,89");
451+
typedef cpp17_input_iterator<const wchar_t*> I;
452+
long double ex;
453+
std::ios_base::iostate err = std::ios_base::goodbit;
454+
I iter = f.get(I(v.data()), I(v.data() + v.size()), false, ios, err, ex);
455+
assert(base(iter) == v.data() + v.size());
456+
assert(err == std::ios_base::eofbit);
457+
assert(ex == -123456789);
455458
}
456459
{ // negative
457460
std::wstring v = L"-1234567,89";
@@ -512,64 +515,59 @@ int main(int, char**)
512515
assert(ex == -1);
513516
}
514517
{ // positive, showbase
515-
std::wstring v = convert_thousands_sep(L"1 234 567,89 \u20ac"); // EURO SIGN
516-
typedef cpp17_input_iterator<const wchar_t*> I;
517-
long double ex;
518-
std::ios_base::iostate err = std::ios_base::goodbit;
519-
I iter = f.get(I(v.data()), I(v.data() + v.size()),
520-
false, ios, err, ex);
521-
assert(base(iter) == v.data() + v.size());
522-
assert(err == std::ios_base::eofbit);
523-
assert(ex == 123456789);
518+
std::wstring v = convert_thousands_sep(L"1" THOUSANDS_SEP "234" THOUSANDS_SEP "567,89 \u20ac"); // EURO SIGN
519+
typedef cpp17_input_iterator<const wchar_t*> I;
520+
long double ex;
521+
std::ios_base::iostate err = std::ios_base::goodbit;
522+
I iter = f.get(I(v.data()), I(v.data() + v.size()), false, ios, err, ex);
523+
assert(base(iter) == v.data() + v.size());
524+
assert(err == std::ios_base::eofbit);
525+
assert(ex == 123456789);
524526
}
525527
{ // positive, showbase
526-
std::wstring v = convert_thousands_sep(L"1 234 567,89 \u20ac"); // EURO SIGN
527-
std::showbase(ios);
528-
typedef cpp17_input_iterator<const wchar_t*> I;
529-
long double ex;
530-
std::ios_base::iostate err = std::ios_base::goodbit;
531-
I iter = f.get(I(v.data()), I(v.data() + v.size()),
532-
false, ios, err, ex);
533-
assert(base(iter) == v.data() + v.size());
534-
assert(err == std::ios_base::eofbit);
535-
assert(ex == 123456789);
536-
std::noshowbase(ios);
528+
std::wstring v = convert_thousands_sep(L"1" THOUSANDS_SEP "234" THOUSANDS_SEP "567,89 \u20ac"); // EURO SIGN
529+
std::showbase(ios);
530+
typedef cpp17_input_iterator<const wchar_t*> I;
531+
long double ex;
532+
std::ios_base::iostate err = std::ios_base::goodbit;
533+
I iter = f.get(I(v.data()), I(v.data() + v.size()), false, ios, err, ex);
534+
assert(base(iter) == v.data() + v.size());
535+
assert(err == std::ios_base::eofbit);
536+
assert(ex == 123456789);
537+
std::noshowbase(ios);
537538
}
538539
{ // negative, showbase
539-
std::wstring v = convert_thousands_sep(L"-1 234 567,89 \u20ac"); // EURO SIGN
540-
std::showbase(ios);
541-
typedef cpp17_input_iterator<const wchar_t*> I;
542-
long double ex;
543-
std::ios_base::iostate err = std::ios_base::goodbit;
544-
I iter = f.get(I(v.data()), I(v.data() + v.size()),
545-
false, ios, err, ex);
546-
assert(base(iter) == v.data() + v.size());
547-
assert(err == std::ios_base::eofbit);
548-
assert(ex == -123456789);
549-
std::noshowbase(ios);
540+
std::wstring v = convert_thousands_sep(L"-1" THOUSANDS_SEP "234" THOUSANDS_SEP "567,89 \u20ac"); // EURO SIGN
541+
std::showbase(ios);
542+
typedef cpp17_input_iterator<const wchar_t*> I;
543+
long double ex;
544+
std::ios_base::iostate err = std::ios_base::goodbit;
545+
I iter = f.get(I(v.data()), I(v.data() + v.size()), false, ios, err, ex);
546+
assert(base(iter) == v.data() + v.size());
547+
assert(err == std::ios_base::eofbit);
548+
assert(ex == -123456789);
549+
std::noshowbase(ios);
550550
}
551551
{ // negative, showbase
552-
std::wstring v = convert_thousands_sep(L"1 234 567,89 EUR -");
553-
std::showbase(ios);
554-
typedef cpp17_input_iterator<const wchar_t*> I;
555-
long double ex;
556-
std::ios_base::iostate err = std::ios_base::goodbit;
557-
I iter = f.get(I(v.data()), I(v.data() + v.size()),
558-
false, ios, err, ex);
559-
assert(base(iter) == v.data() + 13);
560-
assert(err == std::ios_base::failbit);
561-
std::noshowbase(ios);
552+
std::wstring v = convert_thousands_sep(L"1" THOUSANDS_SEP "234" THOUSANDS_SEP "567,89 EUR -");
553+
std::showbase(ios);
554+
typedef cpp17_input_iterator<const wchar_t*> I;
555+
long double ex;
556+
std::ios_base::iostate err = std::ios_base::goodbit;
557+
I iter = f.get(I(v.data()), I(v.data() + v.size()), false, ios, err, ex);
558+
assert(base(iter) == v.data() + 13);
559+
assert(err == std::ios_base::failbit);
560+
std::noshowbase(ios);
562561
}
563562
{ // negative, showbase
564-
std::wstring v = convert_thousands_sep(L"1 234 567,89 EUR -");
565-
typedef cpp17_input_iterator<const wchar_t*> I;
566-
long double ex;
567-
std::ios_base::iostate err = std::ios_base::goodbit;
568-
I iter = f.get(I(v.data()), I(v.data() + v.size()),
569-
false, ios, err, ex);
570-
assert(base(iter) == v.data() + 13);
571-
assert(err == std::ios_base::goodbit);
572-
assert(ex == 123456789);
563+
std::wstring v = convert_thousands_sep(L"1" THOUSANDS_SEP "234" THOUSANDS_SEP "567,89 EUR -");
564+
typedef cpp17_input_iterator<const wchar_t*> I;
565+
long double ex;
566+
std::ios_base::iostate err = std::ios_base::goodbit;
567+
I iter = f.get(I(v.data()), I(v.data() + v.size()), false, ios, err, ex);
568+
assert(base(iter) == v.data() + 13);
569+
assert(err == std::ios_base::goodbit);
570+
assert(ex == 123456789);
573571
}
574572
}
575573
{
@@ -598,26 +596,24 @@ int main(int, char**)
598596
assert(ex == -1);
599597
}
600598
{ // positive
601-
std::wstring v = convert_thousands_sep(L"1 234 567,89 ");
602-
typedef cpp17_input_iterator<const wchar_t*> I;
603-
long double ex;
604-
std::ios_base::iostate err = std::ios_base::goodbit;
605-
I iter = f.get(I(v.data()), I(v.data() + v.size()),
606-
true, ios, err, ex);
607-
assert(base(iter) == v.data() + v.size());
608-
assert(err == std::ios_base::eofbit);
609-
assert(ex == 123456789);
599+
std::wstring v = convert_thousands_sep(L"1" THOUSANDS_SEP "234" THOUSANDS_SEP "567,89 ");
600+
typedef cpp17_input_iterator<const wchar_t*> I;
601+
long double ex;
602+
std::ios_base::iostate err = std::ios_base::goodbit;
603+
I iter = f.get(I(v.data()), I(v.data() + v.size()), true, ios, err, ex);
604+
assert(base(iter) == v.data() + v.size());
605+
assert(err == std::ios_base::eofbit);
606+
assert(ex == 123456789);
610607
}
611608
{ // negative
612-
std::wstring v = convert_thousands_sep(L"-1 234 567,89");
613-
typedef cpp17_input_iterator<const wchar_t*> I;
614-
long double ex;
615-
std::ios_base::iostate err = std::ios_base::goodbit;
616-
I iter = f.get(I(v.data()), I(v.data() + v.size()),
617-
true, ios, err, ex);
618-
assert(base(iter) == v.data() + v.size());
619-
assert(err == std::ios_base::eofbit);
620-
assert(ex == -123456789);
609+
std::wstring v = convert_thousands_sep(L"-1" THOUSANDS_SEP "234" THOUSANDS_SEP "567,89");
610+
typedef cpp17_input_iterator<const wchar_t*> I;
611+
long double ex;
612+
std::ios_base::iostate err = std::ios_base::goodbit;
613+
I iter = f.get(I(v.data()), I(v.data() + v.size()), true, ios, err, ex);
614+
assert(base(iter) == v.data() + v.size());
615+
assert(err == std::ios_base::eofbit);
616+
assert(ex == -123456789);
621617
}
622618
{ // negative
623619
std::wstring v = L"-1234567,89";
@@ -678,64 +674,59 @@ int main(int, char**)
678674
assert(ex == -1);
679675
}
680676
{ // positive, showbase
681-
std::wstring v = convert_thousands_sep(L"1 234 567,89 EUR");
682-
typedef cpp17_input_iterator<const wchar_t*> I;
683-
long double ex;
684-
std::ios_base::iostate err = std::ios_base::goodbit;
685-
I iter = f.get(I(v.data()), I(v.data() + v.size()),
686-
true, ios, err, ex);
687-
assert(base(iter) == v.data() + v.size());
688-
assert(err == std::ios_base::eofbit);
689-
assert(ex == 123456789);
677+
std::wstring v = convert_thousands_sep(L"1" THOUSANDS_SEP "234" THOUSANDS_SEP "567,89 EUR");
678+
typedef cpp17_input_iterator<const wchar_t*> I;
679+
long double ex;
680+
std::ios_base::iostate err = std::ios_base::goodbit;
681+
I iter = f.get(I(v.data()), I(v.data() + v.size()), true, ios, err, ex);
682+
assert(base(iter) == v.data() + v.size());
683+
assert(err == std::ios_base::eofbit);
684+
assert(ex == 123456789);
690685
}
691686
{ // positive, showbase
692-
std::wstring v = convert_thousands_sep(L"1 234 567,89 EUR");
693-
std::showbase(ios);
694-
typedef cpp17_input_iterator<const wchar_t*> I;
695-
long double ex;
696-
std::ios_base::iostate err = std::ios_base::goodbit;
697-
I iter = f.get(I(v.data()), I(v.data() + v.size()),
698-
true, ios, err, ex);
699-
assert(base(iter) == v.data() + v.size());
700-
assert(err == std::ios_base::eofbit);
701-
assert(ex == 123456789);
702-
std::noshowbase(ios);
687+
std::wstring v = convert_thousands_sep(L"1" THOUSANDS_SEP "234" THOUSANDS_SEP "567,89 EUR");
688+
std::showbase(ios);
689+
typedef cpp17_input_iterator<const wchar_t*> I;
690+
long double ex;
691+
std::ios_base::iostate err = std::ios_base::goodbit;
692+
I iter = f.get(I(v.data()), I(v.data() + v.size()), true, ios, err, ex);
693+
assert(base(iter) == v.data() + v.size());
694+
assert(err == std::ios_base::eofbit);
695+
assert(ex == 123456789);
696+
std::noshowbase(ios);
703697
}
704698
{ // negative, showbase
705-
std::wstring v = convert_thousands_sep(L"-1 234 567,89 EUR");
706-
std::showbase(ios);
707-
typedef cpp17_input_iterator<const wchar_t*> I;
708-
long double ex;
709-
std::ios_base::iostate err = std::ios_base::goodbit;
710-
I iter = f.get(I(v.data()), I(v.data() + v.size()),
711-
true, ios, err, ex);
712-
assert(base(iter) == v.data() + v.size());
713-
assert(err == std::ios_base::eofbit);
714-
assert(ex == -123456789);
715-
std::noshowbase(ios);
699+
std::wstring v = convert_thousands_sep(L"-1" THOUSANDS_SEP "234" THOUSANDS_SEP "567,89 EUR");
700+
std::showbase(ios);
701+
typedef cpp17_input_iterator<const wchar_t*> I;
702+
long double ex;
703+
std::ios_base::iostate err = std::ios_base::goodbit;
704+
I iter = f.get(I(v.data()), I(v.data() + v.size()), true, ios, err, ex);
705+
assert(base(iter) == v.data() + v.size());
706+
assert(err == std::ios_base::eofbit);
707+
assert(ex == -123456789);
708+
std::noshowbase(ios);
716709
}
717710
{ // negative, showbase
718-
std::wstring v = convert_thousands_sep(L"1 234 567,89 Eu-");
719-
std::showbase(ios);
720-
typedef cpp17_input_iterator<const wchar_t*> I;
721-
long double ex;
722-
std::ios_base::iostate err = std::ios_base::goodbit;
723-
I iter = f.get(I(v.data()), I(v.data() + v.size()),
724-
true, ios, err, ex);
725-
assert(base(iter) == v.data() + 14);
726-
assert(err == std::ios_base::failbit);
727-
std::noshowbase(ios);
711+
std::wstring v = convert_thousands_sep(L"1" THOUSANDS_SEP "234" THOUSANDS_SEP "567,89 Eu-");
712+
std::showbase(ios);
713+
typedef cpp17_input_iterator<const wchar_t*> I;
714+
long double ex;
715+
std::ios_base::iostate err = std::ios_base::goodbit;
716+
I iter = f.get(I(v.data()), I(v.data() + v.size()), true, ios, err, ex);
717+
assert(base(iter) == v.data() + 14);
718+
assert(err == std::ios_base::failbit);
719+
std::noshowbase(ios);
728720
}
729721
{ // negative, showbase
730-
std::wstring v = convert_thousands_sep(L"1 234 567,89 Eu-");
731-
typedef cpp17_input_iterator<const wchar_t*> I;
732-
long double ex;
733-
std::ios_base::iostate err = std::ios_base::goodbit;
734-
I iter = f.get(I(v.data()), I(v.data() + v.size()),
735-
true, ios, err, ex);
736-
assert(base(iter) == v.data() + 13);
737-
assert(err == std::ios_base::goodbit);
738-
assert(ex == 123456789);
722+
std::wstring v = convert_thousands_sep(L"1" THOUSANDS_SEP "234" THOUSANDS_SEP "567,89 Eu-");
723+
typedef cpp17_input_iterator<const wchar_t*> I;
724+
long double ex;
725+
std::ios_base::iostate err = std::ios_base::goodbit;
726+
I iter = f.get(I(v.data()), I(v.data() + v.size()), true, ios, err, ex);
727+
assert(base(iter) == v.data() + 13);
728+
assert(err == std::ios_base::goodbit);
729+
assert(ex == 123456789);
739730
}
740731
}
741732
#endif // TEST_HAS_NO_WIDE_CHARACTERS

0 commit comments

Comments
 (0)