X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=tests%2Ftest-ffs.c;h=fb37f202ee2ce35cbf66d73ead7b82d28cb9986b;hb=4f6a7ef5f2097b501ddeac9db94d02306e4546d0;hp=a7c615e1cf733b9c783b66466b140853ae594d31;hpb=a918da4d61d28be61a12605c9d35e2cf3966d866;p=gnulib.git diff --git a/tests/test-ffs.c b/tests/test-ffs.c index a7c615e1c..fb37f202e 100644 --- a/tests/test-ffs.c +++ b/tests/test-ffs.c @@ -26,12 +26,14 @@ SIGNATURE_CHECK (ffs, int, (int)); #include "macros.h" +#define NBITS (sizeof (int) * CHAR_BIT) + static int naive (int i) { - int j; - for (j = 0; j < CHAR_BIT * sizeof i; j++) - if (i & (1 << j)) + unsigned int j; + for (j = 0; j < NBITS; j++) + if (i & (1U << j)) return j + 1; return 0; } @@ -39,14 +41,28 @@ naive (int i) int main (int argc, char *argv[]) { + int x; int i; - for (i = -128; i <= 128; i++) - ASSERT (ffs (i) == naive (i)); - for (i = 0; i < CHAR_BIT * sizeof i; i++) + for (x = -128; x <= 128; x++) + ASSERT (ffs (x) == naive (x)); + for (i = 0; i < NBITS; i++) + { + ASSERT (ffs (1U << i) == naive (1U << i)); + ASSERT (ffs (1U << i) == i + 1); + ASSERT (ffs (-1U << i) == i + 1); + } + for (i = 0; i < NBITS - 1; i++) + { + ASSERT (ffs (3U << i) == i + 1); + ASSERT (ffs (-3U << i) == i + 1); + } + for (i = 0; i < NBITS - 2; i++) { - ASSERT (ffs (1 << i) == naive (1 << i)); - ASSERT (ffs (1 << i) == i + 1); + ASSERT (ffs (5U << i) == i + 1); + ASSERT (ffs (-5U << i) == i + 1); + ASSERT (ffs (7U << i) == i + 1); + ASSERT (ffs (-7U << i) == i + 1); } return 0; }