Mercurial > gnulib
annotate tests/test-ffsll.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 |
---|---|
15428 | 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. |
15428 | 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/>. */ |
15428 | 16 |
17 /* Written by Eric Blake. */ | |
18 #include <config.h> | |
19 | |
20 #include <string.h> | |
21 | |
22 #include "signature.h" | |
23 SIGNATURE_CHECK (ffsll, int, (long long int)); | |
24 | |
25 #include <limits.h> | |
26 | |
27 #include "macros.h" | |
28 | |
15429 | 29 #define NBITS (sizeof (long long int) * CHAR_BIT) |
30 | |
15428 | 31 static int |
32 naive (long long int i) | |
33 { | |
34 unsigned long long int j; | |
15429 | 35 for (j = 0; j < NBITS; j++) |
15428 | 36 if (i & (1ULL << j)) |
37 return j + 1; | |
38 return 0; | |
39 } | |
40 | |
41 int | |
42 main (int argc, char *argv[]) | |
43 { | |
15429 | 44 long long int x; |
45 int i; | |
15428 | 46 |
15429 | 47 for (x = -128; x <= 128; x++) |
48 ASSERT (ffsll (x) == naive (x)); | |
49 for (i = 0; i < NBITS; i++) | |
15428 | 50 { |
51 ASSERT (ffsll (1ULL << i) == naive (1ULL << i)); | |
52 ASSERT (ffsll (1ULL << i) == i + 1); | |
15429 | 53 ASSERT (ffsll (-1ULL << i) == i + 1); |
54 } | |
55 for (i = 0; i < NBITS - 1; i++) | |
56 { | |
57 ASSERT (ffsll (3ULL << i) == i + 1); | |
58 ASSERT (ffsll (-3ULL << i) == i + 1); | |
59 } | |
60 for (i = 0; i < NBITS - 2; i++) | |
61 { | |
62 ASSERT (ffsll (5ULL << i) == i + 1); | |
63 ASSERT (ffsll (-5ULL << i) == i + 1); | |
64 ASSERT (ffsll (7ULL << i) == i + 1); | |
65 ASSERT (ffsll (-7ULL << i) == i + 1); | |
15428 | 66 } |
67 return 0; | |
68 } |