[libcxx-commits] [PATCH] D120317: [libcxx] [test] Fix get/put long_double_ru_RU on Glibc, FreeBSD and Windows
Mikael Holmén via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Fri Mar 4 00:18:47 PST 2022
uabelho added a comment.
In D120317#3359186 <https://reviews.llvm.org/D120317#3359186>, @mstorsjo wrote:
> Sorry about that. It would seem like there are differences in the `ru_RU.UTF-8` locale in your installation than in the ones used in CI and in my local environment. What glibc version are you running (as it would seem we require to selectively expect different results on different versions of glibc)?
>
> Can you rerun the `put_long_double_ru_RU.pass.cpp` test with this diff applied?
>
> diff --git a/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_ru_RU.pass.cpp b/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_ru_RU.pass.cpp
> index ae5071907aca..a7156e78132e 100644
> --- a/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_ru_RU.pass.cpp
> +++ b/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_ru_RU.pass.cpp
> @@ -77,6 +77,9 @@ int main(int, char**)
> char str[100];
> cpp17_output_iterator<char*> iter = f.put(cpp17_output_iterator<char*>(str), false, ios, '*', v);
> std::string ex(str, base(iter));
> + for (char c : ex)
> + fprintf(stderr, "%02x ", c);
> + fprintf(stderr, "\n");
> assert(ex == "0,00");
> }
> { // negative one
Yes, I got
30 2e 30 30
> Alternatively, even better, can you provide the output of this test program:
>
> #include <locale.h>
> #include <stdio.h>
>
> int main(int argc, char **argv) {
> const char *locale = "ru_RU.UTF-8";
> if (argc > 1)
> locale = argv[1];
> if (!setlocale(LC_ALL, locale)) {
> printf("setlocale(%s) failed\n", locale);
> return 1;
> }
> struct lconv *lconv = localeconv();
> printf("mon_thousands_sep: \"%s\",", lconv->mon_thousands_sep);
> for (const char *c = lconv->mon_thousands_sep; *c; c++)
> printf(" %02x", (unsigned char)*c);
> printf("\n");
> printf("thousands_sep: \"%s\",", lconv->thousands_sep);
> for (const char *c = lconv->thousands_sep; *c; c++)
> printf(" %02x", (unsigned char)*c);
> printf("\n");
> printf("int_curr_symbol: \"%s\"\n", lconv->int_curr_symbol);
> printf("currency_symbol: \"%s\",", lconv->currency_symbol);
> for (const char *c = lconv->currency_symbol; *c; c++)
> printf(" %02x", (unsigned char)*c);
> printf("\n");
> printf("decimal_point: \"%s\",", lconv->decimal_point);
> for (const char *c = lconv->decimal_point; *c; c++)
> printf(" %02x", (unsigned char)*c);
> printf("\n");
> printf("mon_decimal_point: \"%s\",", lconv->mon_decimal_point);
> for (const char *c = lconv->mon_decimal_point; *c; c++)
> printf(" %02x", (unsigned char)*c);
> printf("\n");
> printf("negative_sign: \"%s\"\n", lconv->negative_sign);
> printf("positive_sign: \"%s\"\n", lconv->positive_sign);
> printf("n_sign_posn: %d\n", lconv->n_sign_posn);
> printf("p_sign_posn: %d\n", lconv->p_sign_posn);
> #ifndef _WIN32
> printf("int_n_sign_posn: %d\n", lconv->int_n_sign_posn);
> printf("int_p_sign_posn: %d\n", lconv->int_p_sign_posn);
> #endif
> return 0;
> }
Yep
mon_thousands_sep: " ", c2 a0
thousands_sep: " ", c2 a0
int_curr_symbol: "RUB "
currency_symbol: "руб", d1 80 d1 83 d0 b1
decimal_point: ",", 2c
mon_decimal_point: ".", 2e
negative_sign: "-"
positive_sign: ""
n_sign_posn: 1
p_sign_posn: 1
int_n_sign_posn: 1
int_p_sign_posn: 1
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D120317/new/
https://reviews.llvm.org/D120317
More information about the libcxx-commits
mailing list