diff options
author | Bruno Haible <bruno@clisp.org> | 2011-07-16 02:36:07 +0200 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2011-07-16 02:36:07 +0200 |
commit | f9c36381e1c5de5fcd6e46491ebd2f98a5e5c2ca (patch) | |
tree | f449793f8401c47a149e7be6ace73e42b37a08af /tests/test-ffsl.c | |
parent | 9c6e26caf1aeb2f0de445dc3fa568b6e82701bc2 (diff) | |
download | gnulib-f9c36381e1c5de5fcd6e46491ebd2f98a5e5c2ca.tar.gz |
ffs: More tests.
* tests/test-ffs.c (NBITS): New macro.
(main): Add more tests.
* tests/test-ffsl.c (NBITS): New macro.
(main): Add more tests.
* tests/test-ffsll.c (NBITS): New macro.
(main): Add more tests.
Diffstat (limited to 'tests/test-ffsl.c')
-rw-r--r-- | tests/test-ffsl.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/tests/test-ffsl.c b/tests/test-ffsl.c index 2da2f5c8ce..9c134c7bc1 100644 --- a/tests/test-ffsl.c +++ b/tests/test-ffsl.c @@ -26,11 +26,13 @@ SIGNATURE_CHECK (ffsl, int, (long int)); #include "macros.h" +#define NBITS (sizeof (long int) * CHAR_BIT) + static int naive (long int i) { unsigned long int j; - for (j = 0; j < CHAR_BIT * sizeof i; j++) + for (j = 0; j < NBITS; j++) if (i & (1UL << j)) return j + 1; return 0; @@ -39,14 +41,28 @@ naive (long int i) int main (int argc, char *argv[]) { - long int i; + long int x; + int i; for (i = -128; i <= 128; i++) ASSERT (ffsl (i) == naive (i)); - for (i = 0; i < CHAR_BIT * sizeof i; i++) + for (i = 0; i < NBITS; i++) { ASSERT (ffsl (1UL << i) == naive (1UL << i)); ASSERT (ffsl (1UL << i) == i + 1); + ASSERT (ffsl (-1UL << i) == i + 1); + } + for (i = 0; i < NBITS - 1; i++) + { + ASSERT (ffsl (3UL << i) == i + 1); + ASSERT (ffsl (-3UL << i) == i + 1); + } + for (i = 0; i < NBITS - 2; i++) + { + ASSERT (ffsl (5UL << i) == i + 1); + ASSERT (ffsl (-5UL << i) == i + 1); + ASSERT (ffsl (7UL << i) == i + 1); + ASSERT (ffsl (-7UL << i) == i + 1); } return 0; } |