[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