Mercurial > gnulib
annotate tests/test-strtoimax.c @ 40231:9b3c79fdfe0b
strtod: fix clash with strtold
Problem reported for RHEL 5 by Jesse Caldwell (Bug#34817).
* lib/strtod.c (compute_minus_zero, minus_zero):
Simplify by remving the macro / external variable,
and having just a function. User changed. This avoids
the need for an external variable that might clash.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Mon, 11 Mar 2019 16:40:29 -0700 |
parents | b06060465f09 |
children |
rev | line source |
---|---|
15552 | 1 /* |
40057
b06060465f09
maint: Run 'make update-copyright'
Paul Eggert <eggert@cs.ucla.edu>
parents:
19484
diff
changeset
|
2 * Copyright (C) 2011-2019 Free Software Foundation, Inc. |
15552 | 3 * |
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. | |
8 * | |
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. | |
13 * | |
14 * You should have received a copy of the GNU General Public License | |
19190 | 15 * along with this program. If not, see <https://www.gnu.org/licenses/>. */ |
15552 | 16 |
17 #include <config.h> | |
18 | |
19 #include <inttypes.h> | |
20 | |
21 #include "signature.h" | |
22 #ifndef strtoimax | |
23 SIGNATURE_CHECK (strtoimax, intmax_t, (const char *, char **, int)); | |
24 #endif | |
25 | |
26 #include <errno.h> | |
27 | |
28 #include "macros.h" | |
29 | |
30 int | |
31 main (void) | |
32 { | |
33 /* Subject sequence empty or invalid. */ | |
34 { | |
35 const char input[] = ""; | |
36 char *ptr; | |
37 intmax_t result; | |
38 errno = 0; | |
39 result = strtoimax (input, &ptr, 10); | |
40 ASSERT (result == 0); | |
41 ASSERT (ptr == input); | |
42 ASSERT (errno == 0 || errno == EINVAL); | |
43 } | |
44 { | |
45 const char input[] = " "; | |
46 char *ptr; | |
47 intmax_t result; | |
48 errno = 0; | |
49 result = strtoimax (input, &ptr, 10); | |
50 ASSERT (result == 0); | |
51 ASSERT (ptr == input); | |
52 ASSERT (errno == 0 || errno == EINVAL); | |
53 } | |
54 { | |
55 const char input[] = " +"; | |
56 char *ptr; | |
57 intmax_t result; | |
58 errno = 0; | |
59 result = strtoimax (input, &ptr, 10); | |
60 ASSERT (result == 0); | |
61 ASSERT (ptr == input); | |
62 ASSERT (errno == 0 || errno == EINVAL); | |
63 } | |
64 { | |
65 const char input[] = " -"; | |
66 char *ptr; | |
67 intmax_t result; | |
68 errno = 0; | |
69 result = strtoimax (input, &ptr, 10); | |
70 ASSERT (result == 0); | |
71 ASSERT (ptr == input); | |
72 ASSERT (errno == 0 || errno == EINVAL); | |
73 } | |
74 | |
75 /* Simple integer values. */ | |
76 { | |
77 const char input[] = "0"; | |
78 char *ptr; | |
79 intmax_t result; | |
80 errno = 0; | |
81 result = strtoimax (input, &ptr, 10); | |
82 ASSERT (result == 0); | |
83 ASSERT (ptr == input + 1); | |
84 ASSERT (errno == 0); | |
85 } | |
86 { | |
87 const char input[] = "+0"; | |
88 char *ptr; | |
89 intmax_t result; | |
90 errno = 0; | |
91 result = strtoimax (input, &ptr, 10); | |
92 ASSERT (result == 0); | |
93 ASSERT (ptr == input + 2); | |
94 ASSERT (errno == 0); | |
95 } | |
96 { | |
97 const char input[] = "-0"; | |
98 char *ptr; | |
99 intmax_t result; | |
100 errno = 0; | |
101 result = strtoimax (input, &ptr, 10); | |
102 ASSERT (result == 0); | |
103 ASSERT (ptr == input + 2); | |
104 ASSERT (errno == 0); | |
105 } | |
106 { | |
107 const char input[] = "23"; | |
108 char *ptr; | |
109 intmax_t result; | |
110 errno = 0; | |
111 result = strtoimax (input, &ptr, 10); | |
112 ASSERT (result == 23); | |
113 ASSERT (ptr == input + 2); | |
114 ASSERT (errno == 0); | |
115 } | |
116 { | |
117 const char input[] = " 23"; | |
118 char *ptr; | |
119 intmax_t result; | |
120 errno = 0; | |
121 result = strtoimax (input, &ptr, 10); | |
122 ASSERT (result == 23); | |
123 ASSERT (ptr == input + 3); | |
124 ASSERT (errno == 0); | |
125 } | |
126 { | |
127 const char input[] = "+23"; | |
128 char *ptr; | |
129 intmax_t result; | |
130 errno = 0; | |
131 result = strtoimax (input, &ptr, 10); | |
132 ASSERT (result == 23); | |
133 ASSERT (ptr == input + 3); | |
134 ASSERT (errno == 0); | |
135 } | |
136 { | |
137 const char input[] = "-23"; | |
138 char *ptr; | |
139 intmax_t result; | |
140 errno = 0; | |
141 result = strtoimax (input, &ptr, 10); | |
142 ASSERT (result == -23); | |
143 ASSERT (ptr == input + 3); | |
144 ASSERT (errno == 0); | |
145 } | |
146 | |
16230
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
147 /* Large integer values. */ |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
148 { |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
149 const char input[] = "2147483647"; |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
150 char *ptr; |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
151 intmax_t result; |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
152 errno = 0; |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
153 result = strtoimax (input, &ptr, 10); |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
154 ASSERT (result == 2147483647); |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
155 ASSERT (ptr == input + 10); |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
156 ASSERT (errno == 0); |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
157 } |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
158 { |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
159 const char input[] = "-2147483648"; |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
160 char *ptr; |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
161 intmax_t result; |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
162 errno = 0; |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
163 result = strtoimax (input, &ptr, 10); |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
164 ASSERT (result == -2147483647 - 1); |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
165 ASSERT (ptr == input + 11); |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
166 ASSERT (errno == 0); |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
167 } |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
168 if (sizeof (intmax_t) > sizeof (int)) |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
169 { |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
170 const char input[] = "4294967295"; |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
171 char *ptr; |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
172 intmax_t result; |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
173 errno = 0; |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
174 result = strtoimax (input, &ptr, 10); |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
175 ASSERT (result == (intmax_t) 65535 * (intmax_t) 65537); |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
176 ASSERT (ptr == input + 10); |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
177 ASSERT (errno == 0); |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
178 } |
f9e137049132
strtoimax: Work around AIX 5.1 bug.
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
179 |
15552 | 180 return 0; |
181 } |