Remove 'grp' and merge into 'nss' and 'posix'
[platform/upstream/glibc.git] / stdlib / tst-strtod1i.c
1 /* Basic tests for __strtod_internal.
2    Copyright (C) 1991-2023 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, see
17    <https://www.gnu.org/licenses/>.  */
18
19 #include <ctype.h>
20 #include <locale.h>
21 #include <stddef.h>
22 #include <stdio.h>
23 #include <stdlib.h>
24 #include <errno.h>
25 #include <string.h>
26 #include <math.h>
27
28 /* Perform a few tests in a locale with thousands separators.  */
29 static int
30 do_test (void)
31 {
32   static const struct
33   {
34     const char *loc;
35     const char *str;
36     double exp;
37     ptrdiff_t nread;
38   } tests[] =
39     {
40       { "de_DE.UTF-8", "1,5", 1.5, 3 },
41       { "de_DE.UTF-8", "1.5", 1.0, 1 },
42       { "de_DE.UTF-8", "1.500", 1500.0, 5 },
43       { "de_DE.UTF-8", "36.893.488.147.419.103.232", 0x1.0p65, 26 }
44     };
45 #define ntests (sizeof (tests) / sizeof (tests[0]))
46   size_t n;
47   int result = 0;
48
49   puts ("\nLocale tests");
50
51   for (n = 0; n < ntests; ++n)
52     {
53       double d;
54       char *endp;
55
56       if (setlocale (LC_ALL, tests[n].loc) == NULL)
57         {
58           printf ("cannot set locale %s\n", tests[n].loc);
59           result = 1;
60           continue;
61         }
62
63       d = __strtod_internal (tests[n].str, &endp, 1);
64       if (d != tests[n].exp)
65         {
66           printf ("strtod(\"%s\") returns %g and not %g\n",
67                   tests[n].str, d, tests[n].exp);
68           result = 1;
69         }
70       else if (endp - tests[n].str != tests[n].nread)
71         {
72           printf ("strtod(\"%s\") read %td bytes and not %td\n",
73                   tests[n].str, endp - tests[n].str, tests[n].nread);
74           result = 1;
75         }
76     }
77
78   if (result == 0)
79     puts ("all OK");
80
81   return result ? EXIT_FAILURE : EXIT_SUCCESS;
82 }
83
84 #include <support/test-driver.c>