[04/26] stdio-common: Add tst-printf-width-i18n to cover numeric field width

Message ID f0f166cc7b0b3bef7cd51cdf1788ff429e560396.1647544751.git.fweimer@redhat.com
State Committed
Headers
Series vfprintf rework to remove vtables |

Checks

Context Check Description
dj/TryBot-apply_patch success Patch applied to master at the time it was sent

Commit Message

Florian Weimer March 17, 2022, 7:28 p.m. UTC
  Related to bug 28943 and bug 28944.
---
 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
  

Comments

Adhemerval Zanella May 20, 2022, 1:22 p.m. UTC | #1
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.
  
Adhemerval Zanella May 20, 2022, 1:33 p.m. UTC | #2
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)
  
Florian Weimer May 23, 2022, 6:39 a.m. UTC | #3
* 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
  

Patch

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>