1struct
2  {
3    int input;
4    int output;
5  }
6ffstesttab[] =
7  {
8#if __INT_MAX__ >= 2147483647
9    /* at least 32-bit integers */
10    { 0x80000000, 32 },
11    { 0xa5a5a5a5, 1 },
12    { 0x5a5a5a5a, 2 },
13    { 0xcafe0000, 18 },
14#endif
15#if __INT_MAX__ >= 32767
16    /* at least 16-bit integers */
17    { 0x8000, 16 },
18    { 0xa5a5, 1 },
19    { 0x5a5a, 2 },
20    { 0x0ca0, 6 },
21#endif
22#if __INT_MAX__ < 32767
23#error integers are too small
24#endif
25  };
26
27#define NFFSTESTS (sizeof (ffstesttab) / sizeof (ffstesttab[0]))
28
29extern void abort (void);
30extern void exit (int);
31
32int
33main (void)
34{
35  int i;
36
37  for (i = 0; i < NFFSTESTS; i++)
38    {
39      if (__builtin_ffs (ffstesttab[i].input) != ffstesttab[i].output)
40	abort ();
41    }
42
43  exit (0);
44}
45