[libcxx-commits] [libcxx] f1d0d6f - [libcxx] [test] Fix the monetary locale pos/neg_format test for Windows and macOS
Martin Storsjö via libcxx-commits
libcxx-commits at lists.llvm.org
Sun Feb 27 12:08:32 PST 2022
Author: Martin Storsjö
Date: 2022-02-27T21:49:14+02:00
New Revision: f1d0d6f70c63a465c102742c7b910cc201a9502e
URL: https://github.com/llvm/llvm-project/commit/f1d0d6f70c63a465c102742c7b910cc201a9502e
DIFF: https://github.com/llvm/llvm-project/commit/f1d0d6f70c63a465c102742c7b910cc201a9502e.diff
LOG: [libcxx] [test] Fix the monetary locale pos/neg_format test for Windows and macOS
The zh_CN.UTF-8 locale on Glibc has got `n_sign_posn == 4` (which means
having the negative sign just after the currency symbol), but has
`int_n_sign_posn == 1` (which means before the string).
On Windows, there's no separate `int_n_sign_posn` field, so the same
`n_sign_posn` (which is 4 there too) is used for international currency
formatting too. This makes the ordering for the international case on
Windows be the same as for the national one right above it.
On Apple platforms, the fr_FR.UTF-8 locale has got `n_sign_posn == 2`
but `p_sign_posn == 1`, giving a different order for the French locale
for the negative format.
On Apple platforms for the zh_CN.UTF-8 locale, both `n_sign_posn` and
`int_n_sign_posn` are 4, but `p_sign_posn` and `int_p_sign_posn` are 1.
Differential Revision: https://reviews.llvm.org/D120550
Added:
Modified:
libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/neg_format.pass.cpp
libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/pos_format.pass.cpp
Removed:
################################################################################
diff --git a/libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/neg_format.pass.cpp b/libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/neg_format.pass.cpp
index 8b85dc07a90b0..c84c63b1a30e6 100644
--- a/libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/neg_format.pass.cpp
+++ b/libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/neg_format.pass.cpp
@@ -6,13 +6,9 @@
//
//===----------------------------------------------------------------------===//
//
-// XFAIL: darwin
-//
// NetBSD does not support LC_MONETARY at the moment
// XFAIL: netbsd
-// XFAIL: LIBCXX-WINDOWS-FIXME
-
// REQUIRES: locale.en_US.UTF-8
// REQUIRES: locale.fr_FR.UTF-8
// REQUIRES: locale.ru_RU.UTF-8
@@ -65,180 +61,176 @@ class Fwt
};
#endif // TEST_HAS_NO_WIDE_CHARACTERS
+void assert_symbol_sign_none_value(std::money_base::pattern p)
+{
+ assert(p.field[0] == std::money_base::symbol);
+ assert(p.field[1] == std::money_base::sign);
+ assert(p.field[2] == std::money_base::none);
+ assert(p.field[3] == std::money_base::value);
+}
+
+void assert_sign_symbol_none_value(std::money_base::pattern p)
+{
+ assert(p.field[0] == std::money_base::sign);
+ assert(p.field[1] == std::money_base::symbol);
+ assert(p.field[2] == std::money_base::none);
+ assert(p.field[3] == std::money_base::value);
+}
+
+void assert_value_none_symbol_sign(std::money_base::pattern p)
+{
+ assert(p.field[0] == std::money_base::value);
+ assert(p.field[1] == std::money_base::none);
+ assert(p.field[2] == std::money_base::symbol);
+ assert(p.field[3] == std::money_base::sign);
+}
+
+void assert_sign_value_none_symbol(std::money_base::pattern p)
+{
+ assert(p.field[0] == std::money_base::sign);
+ assert(p.field[1] == std::money_base::value);
+ assert(p.field[2] == std::money_base::none);
+ assert(p.field[3] == std::money_base::symbol);
+}
+
int main(int, char**)
{
{
Fnf f("C", 1);
std::money_base::pattern p = f.neg_format();
- assert(p.field[0] == std::money_base::symbol);
- assert(p.field[1] == std::money_base::sign);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::value);
+ assert_symbol_sign_none_value(p);
}
{
Fnt f("C", 1);
std::money_base::pattern p = f.neg_format();
- assert(p.field[0] == std::money_base::symbol);
- assert(p.field[1] == std::money_base::sign);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::value);
+ assert_symbol_sign_none_value(p);
}
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
{
Fwf f("C", 1);
std::money_base::pattern p = f.neg_format();
- assert(p.field[0] == std::money_base::symbol);
- assert(p.field[1] == std::money_base::sign);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::value);
+ assert_symbol_sign_none_value(p);
}
{
Fwt f("C", 1);
std::money_base::pattern p = f.neg_format();
- assert(p.field[0] == std::money_base::symbol);
- assert(p.field[1] == std::money_base::sign);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::value);
+ assert_symbol_sign_none_value(p);
}
#endif // TEST_HAS_NO_WIDE_CHARACTERS
{
Fnf f(LOCALE_en_US_UTF_8, 1);
std::money_base::pattern p = f.neg_format();
- assert(p.field[0] == std::money_base::sign);
- assert(p.field[1] == std::money_base::symbol);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::value);
+ assert_sign_symbol_none_value(p);
}
{
Fnt f(LOCALE_en_US_UTF_8, 1);
std::money_base::pattern p = f.neg_format();
- assert(p.field[0] == std::money_base::sign);
- assert(p.field[1] == std::money_base::symbol);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::value);
+ assert_sign_symbol_none_value(p);
}
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
{
Fwf f(LOCALE_en_US_UTF_8, 1);
std::money_base::pattern p = f.neg_format();
- assert(p.field[0] == std::money_base::sign);
- assert(p.field[1] == std::money_base::symbol);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::value);
+ assert_sign_symbol_none_value(p);
}
{
Fwt f(LOCALE_en_US_UTF_8, 1);
std::money_base::pattern p = f.neg_format();
- assert(p.field[0] == std::money_base::sign);
- assert(p.field[1] == std::money_base::symbol);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::value);
+ assert_sign_symbol_none_value(p);
}
#endif // TEST_HAS_NO_WIDE_CHARACTERS
{
Fnf f(LOCALE_fr_FR_UTF_8, 1);
std::money_base::pattern p = f.neg_format();
- assert(p.field[0] == std::money_base::sign);
- assert(p.field[1] == std::money_base::value);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::symbol);
+#ifdef __APPLE__
+ assert_value_none_symbol_sign(p);
+#else
+ assert_sign_value_none_symbol(p);
+#endif
}
{
Fnt f(LOCALE_fr_FR_UTF_8, 1);
std::money_base::pattern p = f.neg_format();
- assert(p.field[0] == std::money_base::sign);
- assert(p.field[1] == std::money_base::value);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::symbol);
+#ifdef __APPLE__
+ assert_value_none_symbol_sign(p);
+#else
+ assert_sign_value_none_symbol(p);
+#endif
}
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
{
Fwf f(LOCALE_fr_FR_UTF_8, 1);
std::money_base::pattern p = f.neg_format();
- assert(p.field[0] == std::money_base::sign);
- assert(p.field[1] == std::money_base::value);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::symbol);
+#ifdef __APPLE__
+ assert_value_none_symbol_sign(p);
+#else
+ assert_sign_value_none_symbol(p);
+#endif
}
{
Fwt f(LOCALE_fr_FR_UTF_8, 1);
std::money_base::pattern p = f.neg_format();
- assert(p.field[0] == std::money_base::sign);
- assert(p.field[1] == std::money_base::value);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::symbol);
+#ifdef __APPLE__
+ assert_value_none_symbol_sign(p);
+#else
+ assert_sign_value_none_symbol(p);
+#endif
}
#endif // TEST_HAS_NO_WIDE_CHARACTERS
{
Fnf f(LOCALE_ru_RU_UTF_8, 1);
std::money_base::pattern p = f.neg_format();
- assert(p.field[0] == std::money_base::sign);
- assert(p.field[1] == std::money_base::value);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::symbol);
+ assert_sign_value_none_symbol(p);
}
{
Fnt f(LOCALE_ru_RU_UTF_8, 1);
std::money_base::pattern p = f.neg_format();
- assert(p.field[0] == std::money_base::sign);
- assert(p.field[1] == std::money_base::value);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::symbol);
+ assert_sign_value_none_symbol(p);
}
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
{
Fwf f(LOCALE_ru_RU_UTF_8, 1);
std::money_base::pattern p = f.neg_format();
- assert(p.field[0] == std::money_base::sign);
- assert(p.field[1] == std::money_base::value);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::symbol);
+ assert_sign_value_none_symbol(p);
}
{
Fwt f(LOCALE_ru_RU_UTF_8, 1);
std::money_base::pattern p = f.neg_format();
- assert(p.field[0] == std::money_base::sign);
- assert(p.field[1] == std::money_base::value);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::symbol);
+ assert_sign_value_none_symbol(p);
}
#endif // TEST_HAS_NO_WIDE_CHARACTERS
{
Fnf f(LOCALE_zh_CN_UTF_8, 1);
std::money_base::pattern p = f.neg_format();
- assert(p.field[0] == std::money_base::symbol);
- assert(p.field[1] == std::money_base::sign);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::value);
+ assert_symbol_sign_none_value(p);
}
{
Fnt f(LOCALE_zh_CN_UTF_8, 1);
std::money_base::pattern p = f.neg_format();
- assert(p.field[0] == std::money_base::sign);
- assert(p.field[1] == std::money_base::symbol);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::value);
+#if defined(_WIN32) || defined(__APPLE__)
+ assert_symbol_sign_none_value(p);
+#else
+ assert_sign_symbol_none_value(p);
+#endif
}
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
{
Fwf f(LOCALE_zh_CN_UTF_8, 1);
std::money_base::pattern p = f.neg_format();
- assert(p.field[0] == std::money_base::symbol);
- assert(p.field[1] == std::money_base::sign);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::value);
+ assert_symbol_sign_none_value(p);
}
{
Fwt f(LOCALE_zh_CN_UTF_8, 1);
std::money_base::pattern p = f.neg_format();
- assert(p.field[0] == std::money_base::sign);
- assert(p.field[1] == std::money_base::symbol);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::value);
+#if defined(_WIN32) || defined(__APPLE__)
+ assert_symbol_sign_none_value(p);
+#else
+ assert_sign_symbol_none_value(p);
+#endif
}
#endif // TEST_HAS_NO_WIDE_CHARACTERS
diff --git a/libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/pos_format.pass.cpp b/libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/pos_format.pass.cpp
index 900d55f7001d3..7dbcf412bd7b4 100644
--- a/libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/pos_format.pass.cpp
+++ b/libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/pos_format.pass.cpp
@@ -6,13 +6,9 @@
//
//===----------------------------------------------------------------------===//
//
-// XFAIL: darwin
-//
// NetBSD does not support LC_MONETARY at the moment
// XFAIL: netbsd
-// XFAIL: LIBCXX-WINDOWS-FIXME
-
// REQUIRES: locale.en_US.UTF-8
// REQUIRES: locale.fr_FR.UTF-8
// REQUIRES: locale.ru_RU.UTF-8
@@ -65,180 +61,168 @@ class Fwt
};
#endif // TEST_HAS_NO_WIDE_CHARACTERS
+void assert_symbol_sign_none_value(std::money_base::pattern p)
+{
+ assert(p.field[0] == std::money_base::symbol);
+ assert(p.field[1] == std::money_base::sign);
+ assert(p.field[2] == std::money_base::none);
+ assert(p.field[3] == std::money_base::value);
+}
+
+void assert_sign_symbol_none_value(std::money_base::pattern p)
+{
+ assert(p.field[0] == std::money_base::sign);
+ assert(p.field[1] == std::money_base::symbol);
+ assert(p.field[2] == std::money_base::none);
+ assert(p.field[3] == std::money_base::value);
+}
+
+void assert_value_none_symbol_sign(std::money_base::pattern p)
+{
+ assert(p.field[0] == std::money_base::value);
+ assert(p.field[1] == std::money_base::none);
+ assert(p.field[2] == std::money_base::symbol);
+ assert(p.field[3] == std::money_base::sign);
+}
+
+void assert_sign_value_none_symbol(std::money_base::pattern p)
+{
+ assert(p.field[0] == std::money_base::sign);
+ assert(p.field[1] == std::money_base::value);
+ assert(p.field[2] == std::money_base::none);
+ assert(p.field[3] == std::money_base::symbol);
+}
+
int main(int, char**)
{
{
Fnf f("C", 1);
std::money_base::pattern p = f.pos_format();
- assert(p.field[0] == std::money_base::symbol);
- assert(p.field[1] == std::money_base::sign);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::value);
+ assert_symbol_sign_none_value(p);
}
{
Fnt f("C", 1);
std::money_base::pattern p = f.pos_format();
- assert(p.field[0] == std::money_base::symbol);
- assert(p.field[1] == std::money_base::sign);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::value);
+ assert_symbol_sign_none_value(p);
}
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
{
Fwf f("C", 1);
std::money_base::pattern p = f.pos_format();
- assert(p.field[0] == std::money_base::symbol);
- assert(p.field[1] == std::money_base::sign);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::value);
+ assert_symbol_sign_none_value(p);
}
{
Fwt f("C", 1);
std::money_base::pattern p = f.pos_format();
- assert(p.field[0] == std::money_base::symbol);
- assert(p.field[1] == std::money_base::sign);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::value);
+ assert_symbol_sign_none_value(p);
}
#endif // TEST_HAS_NO_WIDE_CHARACTERS
{
Fnf f(LOCALE_en_US_UTF_8, 1);
std::money_base::pattern p = f.pos_format();
- assert(p.field[0] == std::money_base::sign);
- assert(p.field[1] == std::money_base::symbol);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::value);
+ assert_sign_symbol_none_value(p);
}
{
Fnt f(LOCALE_en_US_UTF_8, 1);
std::money_base::pattern p = f.pos_format();
- assert(p.field[0] == std::money_base::sign);
- assert(p.field[1] == std::money_base::symbol);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::value);
+ assert_sign_symbol_none_value(p);
}
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
{
Fwf f(LOCALE_en_US_UTF_8, 1);
std::money_base::pattern p = f.pos_format();
- assert(p.field[0] == std::money_base::sign);
- assert(p.field[1] == std::money_base::symbol);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::value);
+ assert_sign_symbol_none_value(p);
}
{
Fwt f(LOCALE_en_US_UTF_8, 1);
std::money_base::pattern p = f.pos_format();
- assert(p.field[0] == std::money_base::sign);
- assert(p.field[1] == std::money_base::symbol);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::value);
+ assert_sign_symbol_none_value(p);
}
#endif // TEST_HAS_NO_WIDE_CHARACTERS
{
Fnf f(LOCALE_fr_FR_UTF_8, 1);
std::money_base::pattern p = f.pos_format();
- assert(p.field[0] == std::money_base::sign);
- assert(p.field[1] == std::money_base::value);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::symbol);
+ assert_sign_value_none_symbol(p);
}
{
Fnt f(LOCALE_fr_FR_UTF_8, 1);
std::money_base::pattern p = f.pos_format();
- assert(p.field[0] == std::money_base::sign);
- assert(p.field[1] == std::money_base::value);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::symbol);
+ assert_sign_value_none_symbol(p);
}
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
{
Fwf f(LOCALE_fr_FR_UTF_8, 1);
std::money_base::pattern p = f.pos_format();
- assert(p.field[0] == std::money_base::sign);
- assert(p.field[1] == std::money_base::value);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::symbol);
+ assert_sign_value_none_symbol(p);
}
{
Fwt f(LOCALE_fr_FR_UTF_8, 1);
std::money_base::pattern p = f.pos_format();
- assert(p.field[0] == std::money_base::sign);
- assert(p.field[1] == std::money_base::value);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::symbol);
+ assert_sign_value_none_symbol(p);
}
#endif // TEST_HAS_NO_WIDE_CHARACTERS
{
Fnf f(LOCALE_ru_RU_UTF_8, 1);
std::money_base::pattern p = f.pos_format();
- assert(p.field[0] == std::money_base::sign);
- assert(p.field[1] == std::money_base::value);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::symbol);
+ assert_sign_value_none_symbol(p);
}
{
Fnt f(LOCALE_ru_RU_UTF_8, 1);
std::money_base::pattern p = f.pos_format();
- assert(p.field[0] == std::money_base::sign);
- assert(p.field[1] == std::money_base::value);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::symbol);
+ assert_sign_value_none_symbol(p);
}
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
{
Fwf f(LOCALE_ru_RU_UTF_8, 1);
std::money_base::pattern p = f.pos_format();
- assert(p.field[0] == std::money_base::sign);
- assert(p.field[1] == std::money_base::value);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::symbol);
+ assert_sign_value_none_symbol(p);
}
{
Fwt f(LOCALE_ru_RU_UTF_8, 1);
std::money_base::pattern p = f.pos_format();
- assert(p.field[0] == std::money_base::sign);
- assert(p.field[1] == std::money_base::value);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::symbol);
+ assert_sign_value_none_symbol(p);
}
#endif // TEST_HAS_NO_WIDE_CHARACTERS
{
Fnf f(LOCALE_zh_CN_UTF_8, 1);
std::money_base::pattern p = f.pos_format();
- assert(p.field[0] == std::money_base::symbol);
- assert(p.field[1] == std::money_base::sign);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::value);
+#ifdef __APPLE__
+ assert_sign_symbol_none_value(p);
+#else
+ assert_symbol_sign_none_value(p);
+#endif
}
{
Fnt f(LOCALE_zh_CN_UTF_8, 1);
std::money_base::pattern p = f.pos_format();
- assert(p.field[0] == std::money_base::sign);
- assert(p.field[1] == std::money_base::symbol);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::value);
+#ifdef _WIN32
+ assert_symbol_sign_none_value(p);
+#else
+ assert_sign_symbol_none_value(p);
+#endif
}
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
{
Fwf f(LOCALE_zh_CN_UTF_8, 1);
std::money_base::pattern p = f.pos_format();
- assert(p.field[0] == std::money_base::symbol);
- assert(p.field[1] == std::money_base::sign);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::value);
+#ifdef __APPLE__
+ assert_sign_symbol_none_value(p);
+#else
+ assert_symbol_sign_none_value(p);
+#endif
}
{
Fwt f(LOCALE_zh_CN_UTF_8, 1);
std::money_base::pattern p = f.pos_format();
- assert(p.field[0] == std::money_base::sign);
- assert(p.field[1] == std::money_base::symbol);
- assert(p.field[2] == std::money_base::none);
- assert(p.field[3] == std::money_base::value);
+#ifdef _WIN32
+ assert_symbol_sign_none_value(p);
+#else
+ assert_sign_symbol_none_value(p);
+#endif
}
#endif // TEST_HAS_NO_WIDE_CHARACTERS
More information about the libcxx-commits
mailing list