summaryrefslogtreecommitdiff
path: root/tests/test-ffsl.c
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2011-07-16 02:36:07 +0200
committerBruno Haible <bruno@clisp.org>2011-07-16 02:36:07 +0200
commitf9c36381e1c5de5fcd6e46491ebd2f98a5e5c2ca (patch)
treef449793f8401c47a149e7be6ace73e42b37a08af /tests/test-ffsl.c
parent9c6e26caf1aeb2f0de445dc3fa568b6e82701bc2 (diff)
downloadgnulib-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.c22
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;
}