(root)/
glibc-2.38/
stdlib/
tst-strtol-locale-main.c
       1  /* Test strtol functions work with all ASCII letters in Turkish
       2     locales (bug 19242).
       3     Copyright (C) 2015-2023 Free Software Foundation, Inc.
       4     This file is part of the GNU C Library.
       5  
       6     The GNU C Library is free software; you can redistribute it and/or
       7     modify it under the terms of the GNU Lesser General Public
       8     License as published by the Free Software Foundation; either
       9     version 2.1 of the License, or (at your option) any later version.
      10  
      11     The GNU C Library is distributed in the hope that it will be useful,
      12     but WITHOUT ANY WARRANTY; without even the implied warranty of
      13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      14     Lesser General Public License for more details.
      15  
      16     You should have received a copy of the GNU Lesser General Public
      17     License along with the GNU C Library; if not, see
      18     <https://www.gnu.org/licenses/>.  */
      19  
      20  #include <locale.h>
      21  #include <stdio.h>
      22  #include <stdlib.h>
      23  #include <wchar.h>
      24  
      25  #define STR_(X) #X
      26  #define STR(X) STR_(X)
      27  #define FNPFXS STR (FNPFX)
      28  #define CONCAT_(X, Y) X ## Y
      29  #define CONCAT(X, Y) CONCAT_ (X, Y)
      30  #define FNX(FN) CONCAT (FNPFX, FN)
      31  
      32  #define TEST(LOC, STR, EXP_VAL, FN, TYPE, FMT)				\
      33    do									\
      34      {									\
      35        CHAR *ep;								\
      36        TYPE val = FNX (FN) (STR, &ep, 36);				\
      37        printf ("%s: " FNPFXS #FN " (" SFMT ") == " FMT "\n", LOC, STR, val); \
      38        if (val == (TYPE) (EXP_VAL) && *ep == 0)				\
      39  	printf ("PASS: %s: " FNPFXS #FN " (" SFMT ")\n", LOC, STR);	\
      40        else								\
      41  	{								\
      42  	  printf ("FAIL: %s: " FNPFXS #FN " (" SFMT ")\n", LOC, STR);	\
      43  	  result = 1;							\
      44  	}								\
      45      }									\
      46    while (0)
      47  
      48  static int
      49  test_one_locale (const char *loc)
      50  {
      51    if (setlocale (LC_ALL, loc) == NULL)
      52      {
      53        printf ("setlocale (LC_ALL, \"%s\") failed\n", loc);
      54        return 1;
      55      }
      56    int result = 0;
      57    for (int i = 10; i < 36; i++)
      58      {
      59        CHAR s[2];
      60        s[0] = L_('A') + i - 10;
      61        s[1] = 0;
      62        TEST (loc, s, i, l, long int, "%ld");
      63        TEST (loc, s, i, ul, unsigned long int, "%lu");
      64        TEST (loc, s, i, ll, long long int, "%lld");
      65        TEST (loc, s, i, ull, unsigned long long int, "%llu");
      66        s[0] = L_('a') + i - 10;
      67        s[1] = 0;
      68        TEST (loc, s, i, l, long int, "%ld");
      69        TEST (loc, s, i, ul, unsigned long int, "%lu");
      70        TEST (loc, s, i, ll, long long int, "%lld");
      71        TEST (loc, s, i, ull, unsigned long long int, "%llu");
      72      }
      73    return result;
      74  }
      75  
      76  static int
      77  do_test (void)
      78  {
      79    int result = 0;
      80    result |= test_one_locale ("C");
      81    result |= test_one_locale ("tr_TR.UTF-8");
      82    result |= test_one_locale ("tr_TR.ISO-8859-9");
      83    return result;
      84  }
      85  
      86  #define TEST_FUNCTION do_test ()
      87  #include "../test-skeleton.c"