X-Git-Url: https://erislabs.net/gitweb/?a=blobdiff_plain;f=tests%2Ftest-ffs.c;h=5c04d2dddd556311d0125376093ef90d8729d4f7;hb=8e0f64e4cd12f7779113bc438afd106dad3e1f1a;hp=cfc4d0ec5330f49ab5e96d0acc06696cae1d84ee;hpb=d767af3634fa49b048bf073327092be19c7c7fd1;p=gnulib.git diff --git a/tests/test-ffs.c b/tests/test-ffs.c index cfc4d0ec5..5c04d2ddd 100644 --- a/tests/test-ffs.c +++ b/tests/test-ffs.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011 Free Software Foundation, Inc. + * Copyright (C) 2011-2013 Free Software Foundation, Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,11 +26,13 @@ SIGNATURE_CHECK (ffs, int, (int)); #include "macros.h" +#define NBITS (sizeof (int) * CHAR_BIT) + static int naive (int i) { unsigned int j; - for (j = 0; j < CHAR_BIT * sizeof i; 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 (5U << i) == i + 1); + ASSERT (ffs (-5U << i) == i + 1); + ASSERT (ffs (7U << i) == i + 1); + ASSERT (ffs (-7U << i) == i + 1); } return 0; }