Message ID | f0f166cc7b0b3bef7cd51cdf1788ff429e560396.1647544751.git.fweimer@redhat.com |
---|---|
State | New |
Headers | show |
Series | vfprintf rework to remove vtables | expand |
On 17/03/2022 16:28, Florian Weimer via Libc-alpha wrote: > Related to bug 28943 and bug 28944. LGTM with the fix to enabled the test. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> > --- > stdio-common/Makefile | 1 + > stdio-common/tst-printf-width-i18n.c | 95 ++++++++++++++++++++++++++++ > 2 files changed, 96 insertions(+) > create mode 100644 stdio-common/tst-printf-width-i18n.c > > diff --git a/stdio-common/Makefile b/stdio-common/Makefile > index 435cd8904f..f0e65f0dcd 100644 > --- a/stdio-common/Makefile > +++ b/stdio-common/Makefile > @@ -250,6 +250,7 @@ LOCALES := \ > de_DE.ISO-8859-1 \ > de_DE.UTF-8 \ > en_US.ISO-8859-1 \ > + hi_IN.UTF-8 \ > ja_JP.EUC-JP \ > ps_AF.UTF-8 \ > # LOCALES The tests is not enabled since there is no entry in tests. > diff --git a/stdio-common/tst-printf-width-i18n.c b/stdio-common/tst-printf-width-i18n.c > new file mode 100644 > index 0000000000..2355f30d67 > --- /dev/null > +++ b/stdio-common/tst-printf-width-i18n.c > @@ -0,0 +1,95 @@ > +/* Test for width of non-ASCII digit sequences. > + Copyright (C) 2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +/* Behavior is currently inconsistent between %d and %f (bug 28943, > + bug 28944). This test intends to capture the status quo. */ > + > +#include <monetary.h> > +#include <stdio.h> > +#include <support/support.h> > +#include <support/check.h> > + > +static int > +do_test (void) > +{ > + char buf[40]; > + > + xsetlocale (LC_ALL, "hi_IN.UTF-8"); > + > + /* Ungrouped, not translated. */ > + TEST_COMPARE (sprintf (buf, "%7d", 12345), 7); > + TEST_COMPARE_STRING (buf, " 12345"); > + TEST_COMPARE (sprintf (buf, "%10.2f", 12345.67), 10); > + TEST_COMPARE_STRING (buf, " 12345.67"); > + TEST_COMPARE (strfmon (buf, sizeof (buf), "%^13i", 12345.67), 13); > + TEST_COMPARE_STRING (buf, " INR12345.67"); > + > + /* Grouped. */ > + TEST_COMPARE (sprintf (buf, "%'8d", 12345), 8); > + TEST_COMPARE_STRING (buf, " 12,345"); > + TEST_COMPARE (sprintf (buf, "%'11.2f", 12345.67), 11); > + TEST_COMPARE_STRING (buf, " 12,345.67"); > + TEST_COMPARE (strfmon (buf, sizeof (buf), "%13i", 12345.67), 13); > + TEST_COMPARE_STRING (buf, " INR12,345.67"); > + > + /* Translated. */ > + TEST_COMPARE (sprintf (buf, "%I16d", 12345), 16); > + TEST_COMPARE_STRING (buf, " १२३४५"); > + TEST_COMPARE (sprintf (buf, "%I12.2f", 12345.67), 26); > + TEST_COMPARE_STRING (buf, " १२३४५.६७"); > + > + /* Translated and grouped. */ > + TEST_COMPARE (sprintf (buf, "%'I17d", 12345), 17); > + TEST_COMPARE_STRING (buf, " १२,३४५"); > + TEST_COMPARE (sprintf (buf, "%'I12.2f", 12345.67), 26); > + TEST_COMPARE_STRING (buf, " १२,३४५.६७"); > + > + xsetlocale (LC_ALL, "ps_AF.UTF-8"); > + > + /* Ungrouped, not translated. */ > + TEST_COMPARE (sprintf (buf, "%7d", 12345), 7); > + TEST_COMPARE_STRING (buf, " 12345"); > + TEST_COMPARE (sprintf (buf, "%10.2f", 12345.67), 11); > + TEST_COMPARE_STRING (buf, " 12345٫67"); > + TEST_COMPARE (strfmon (buf, sizeof (buf), "%^13i", 12345.67), 13); > + TEST_COMPARE_STRING (buf, " 12346 AFN"); > + > + /* Grouped. */ > + TEST_COMPARE (sprintf (buf, "%'8d", 12345), 8); > + TEST_COMPARE_STRING (buf, " 12٬345"); > + TEST_COMPARE (sprintf (buf, "%'11.2f", 12345.67), 13); > + TEST_COMPARE_STRING (buf, " 12٬345٫67"); /* Counts characters. */ > + TEST_COMPARE (strfmon (buf, sizeof (buf), "%13i", 12345.67), 13); > + TEST_COMPARE_STRING (buf, " 12٬346 AFN"); /* Counts bytes. */ > + > + /* Translated. */ > + TEST_COMPARE (sprintf (buf, "%I11d", 12345), 11); > + TEST_COMPARE_STRING (buf, " ١٢٣۴٥"); > + TEST_COMPARE (sprintf (buf, "%I12.2f", 12345.67), 20); > + TEST_COMPARE_STRING (buf, " ١٢٣۴٥٫٦٧"); > + > + /* Translated and grouped. */ > + TEST_COMPARE (sprintf (buf, "%'I13d", 12345), 13); > + TEST_COMPARE_STRING (buf, " ١٢٬٣۴٥"); > + TEST_COMPARE (sprintf (buf, "%'I12.2f", 12345.67), 21); > + TEST_COMPARE_STRING (buf, " ١٢٬٣۴٥٫٦٧"); > + > + return 0; > +} > + > +#include <support/test-driver.c> Ok.
On 20/05/2022 10:22, Adhemerval Zanella wrote: > > > On 17/03/2022 16:28, Florian Weimer via Libc-alpha wrote: >> Related to bug 28943 and bug 28944. > > LGTM with the fix to enabled the test. > > Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> > >> --- >> stdio-common/Makefile | 1 + >> stdio-common/tst-printf-width-i18n.c | 95 ++++++++++++++++++++++++++++ >> 2 files changed, 96 insertions(+) >> create mode 100644 stdio-common/tst-printf-width-i18n.c >> >> diff --git a/stdio-common/Makefile b/stdio-common/Makefile >> index 435cd8904f..f0e65f0dcd 100644 >> --- a/stdio-common/Makefile >> +++ b/stdio-common/Makefile >> @@ -250,6 +250,7 @@ LOCALES := \ >> de_DE.ISO-8859-1 \ >> de_DE.UTF-8 \ >> en_US.ISO-8859-1 \ >> + hi_IN.UTF-8 \ >> ja_JP.EUC-JP \ >> ps_AF.UTF-8 \ >> # LOCALES > > The tests is not enabled since there is no entry in tests. And you will also need to add a rule to avoid the test fail in parallel builds: $(objpfx)/tst-printf-width-i18n.out: $(gen-locales)
* Adhemerval Zanella: > On 20/05/2022 10:22, Adhemerval Zanella wrote: >> >> >> On 17/03/2022 16:28, Florian Weimer via Libc-alpha wrote: >>> Related to bug 28943 and bug 28944. >> >> LGTM with the fix to enabled the test. >> >> Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> >> >>> --- >>> stdio-common/Makefile | 1 + >>> stdio-common/tst-printf-width-i18n.c | 95 ++++++++++++++++++++++++++++ >>> 2 files changed, 96 insertions(+) >>> create mode 100644 stdio-common/tst-printf-width-i18n.c >>> >>> diff --git a/stdio-common/Makefile b/stdio-common/Makefile >>> index 435cd8904f..f0e65f0dcd 100644 >>> --- a/stdio-common/Makefile >>> +++ b/stdio-common/Makefile >>> @@ -250,6 +250,7 @@ LOCALES := \ >>> de_DE.ISO-8859-1 \ >>> de_DE.UTF-8 \ >>> en_US.ISO-8859-1 \ >>> + hi_IN.UTF-8 \ >>> ja_JP.EUC-JP \ >>> ps_AF.UTF-8 \ >>> # LOCALES >> >> The tests is not enabled since there is no entry in tests. > > And you will also need to add a rule to avoid the test fail in parallel builds: > > $(objpfx)/tst-printf-width-i18n.out: $(gen-locales) Right, fixed both and renamed the test to tst-vfprintf-width-i18n, to be consistent with the other tests. Thanks, Florian
diff --git a/stdio-common/Makefile b/stdio-common/Makefile index 435cd8904f..f0e65f0dcd 100644 --- a/stdio-common/Makefile +++ b/stdio-common/Makefile @@ -250,6 +250,7 @@ LOCALES := \ de_DE.ISO-8859-1 \ de_DE.UTF-8 \ en_US.ISO-8859-1 \ + hi_IN.UTF-8 \ ja_JP.EUC-JP \ ps_AF.UTF-8 \ # LOCALES diff --git a/stdio-common/tst-printf-width-i18n.c b/stdio-common/tst-printf-width-i18n.c new file mode 100644 index 0000000000..2355f30d67 --- /dev/null +++ b/stdio-common/tst-printf-width-i18n.c @@ -0,0 +1,95 @@ +/* Test for width of non-ASCII digit sequences. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +/* Behavior is currently inconsistent between %d and %f (bug 28943, + bug 28944). This test intends to capture the status quo. */ + +#include <monetary.h> +#include <stdio.h> +#include <support/support.h> +#include <support/check.h> + +static int +do_test (void) +{ + char buf[40]; + + xsetlocale (LC_ALL, "hi_IN.UTF-8"); + + /* Ungrouped, not translated. */ + TEST_COMPARE (sprintf (buf, "%7d", 12345), 7); + TEST_COMPARE_STRING (buf, " 12345"); + TEST_COMPARE (sprintf (buf, "%10.2f", 12345.67), 10); + TEST_COMPARE_STRING (buf, " 12345.67"); + TEST_COMPARE (strfmon (buf, sizeof (buf), "%^13i", 12345.67), 13); + TEST_COMPARE_STRING (buf, " INR12345.67"); + + /* Grouped. */ + TEST_COMPARE (sprintf (buf, "%'8d", 12345), 8); + TEST_COMPARE_STRING (buf, " 12,345"); + TEST_COMPARE (sprintf (buf, "%'11.2f", 12345.67), 11); + TEST_COMPARE_STRING (buf, " 12,345.67"); + TEST_COMPARE (strfmon (buf, sizeof (buf), "%13i", 12345.67), 13); + TEST_COMPARE_STRING (buf, " INR12,345.67"); + + /* Translated. */ + TEST_COMPARE (sprintf (buf, "%I16d", 12345), 16); + TEST_COMPARE_STRING (buf, " १२३४५"); + TEST_COMPARE (sprintf (buf, "%I12.2f", 12345.67), 26); + TEST_COMPARE_STRING (buf, " १२३४५.६७"); + + /* Translated and grouped. */ + TEST_COMPARE (sprintf (buf, "%'I17d", 12345), 17); + TEST_COMPARE_STRING (buf, " १२,३४५"); + TEST_COMPARE (sprintf (buf, "%'I12.2f", 12345.67), 26); + TEST_COMPARE_STRING (buf, " १२,३४५.६७"); + + xsetlocale (LC_ALL, "ps_AF.UTF-8"); + + /* Ungrouped, not translated. */ + TEST_COMPARE (sprintf (buf, "%7d", 12345), 7); + TEST_COMPARE_STRING (buf, " 12345"); + TEST_COMPARE (sprintf (buf, "%10.2f", 12345.67), 11); + TEST_COMPARE_STRING (buf, " 12345٫67"); + TEST_COMPARE (strfmon (buf, sizeof (buf), "%^13i", 12345.67), 13); + TEST_COMPARE_STRING (buf, " 12346 AFN"); + + /* Grouped. */ + TEST_COMPARE (sprintf (buf, "%'8d", 12345), 8); + TEST_COMPARE_STRING (buf, " 12٬345"); + TEST_COMPARE (sprintf (buf, "%'11.2f", 12345.67), 13); + TEST_COMPARE_STRING (buf, " 12٬345٫67"); /* Counts characters. */ + TEST_COMPARE (strfmon (buf, sizeof (buf), "%13i", 12345.67), 13); + TEST_COMPARE_STRING (buf, " 12٬346 AFN"); /* Counts bytes. */ + + /* Translated. */ + TEST_COMPARE (sprintf (buf, "%I11d", 12345), 11); + TEST_COMPARE_STRING (buf, " ١٢٣۴٥"); + TEST_COMPARE (sprintf (buf, "%I12.2f", 12345.67), 20); + TEST_COMPARE_STRING (buf, " ١٢٣۴٥٫٦٧"); + + /* Translated and grouped. */ + TEST_COMPARE (sprintf (buf, "%'I13d", 12345), 13); + TEST_COMPARE_STRING (buf, " ١٢٬٣۴٥"); + TEST_COMPARE (sprintf (buf, "%'I12.2f", 12345.67), 21); + TEST_COMPARE_STRING (buf, " ١٢٬٣۴٥٫٦٧"); + + return 0; +} + +#include <support/test-driver.c>