sigprocmask: Fix configuration failure on Solaris 10 (regr. 2020-07-25).
[gnulib.git] / tests / test-strtod1.c
blob47c693933c07d98e4fc7623bdba80c32d1b1b92f
1 /* Test of strtod() in a French locale.
2 Copyright (C) 2019-2020 Free Software Foundation, Inc.
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 3 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <https://www.gnu.org/licenses/>. */
17 #include <config.h>
19 #include <stdlib.h>
21 #include <errno.h>
22 #include <locale.h>
24 #include "macros.h"
26 int
27 main (int argc, char *argv[])
29 /* Try to set the locale by implicitly looking at the LC_ALL environment
30 variable.
31 configure should already have checked that the locale is supported. */
32 if (setlocale (LC_ALL, "") == NULL)
33 return 1;
36 const char input[] = "1,";
37 char *ptr;
38 double result;
39 errno = 0;
40 result = strtod (input, &ptr);
41 ASSERT (result == 1.0);
42 ASSERT (ptr == input + 2);
43 ASSERT (errno == 0);
46 const char input[] = ",5";
47 char *ptr;
48 double result;
49 errno = 0;
50 result = strtod (input, &ptr);
51 ASSERT (result == 0.5);
52 ASSERT (ptr == input + 2);
53 ASSERT (errno == 0);
56 const char input[] = "1,5";
57 char *ptr;
58 double result;
59 errno = 0;
60 result = strtod (input, &ptr);
61 ASSERT (result == 1.5);
62 ASSERT (ptr == input + 3);
63 ASSERT (errno == 0);
66 const char input[] = "1.5";
67 char *ptr;
68 double result;
69 errno = 0;
70 result = strtod (input, &ptr);
71 /* On AIX 7.2, in the French locale, '.' is recognized as an alternate
72 radix character. */
73 ASSERT ((ptr == input + 1 && result == 1.0)
74 || (ptr == input + 3 && result == 1.5));
75 ASSERT (errno == 0);
78 const char input[] = "123.456,789";
79 char *ptr;
80 double result;
81 errno = 0;
82 result = strtod (input, &ptr);
83 /* On AIX 7.2, in the French locale, '.' is recognized as an alternate
84 radix character. */
85 ASSERT ((ptr == input + 3 && result == 123.0)
86 || (ptr == input + 7 && result > 123.45 && result < 123.46));
87 ASSERT (errno == 0);
90 const char input[] = "123,456.789";
91 char *ptr;
92 double result;
93 errno = 0;
94 result = strtod (input, &ptr);
95 ASSERT (result > 123.45 && result < 123.46);
96 ASSERT (ptr == input + 7);
97 ASSERT (errno == 0);
100 return 0;