| struct |
| { |
| int input; |
| int output; |
| } |
| ffstesttab[] = |
| { |
| #if __INT_MAX__ >= 2147483647 |
| /* at least 32-bit integers */ |
| { 0x80000000, 32 }, |
| { 0xa5a5a5a5, 1 }, |
| { 0x5a5a5a5a, 2 }, |
| { 0xcafe0000, 18 }, |
| #endif |
| #if __INT_MAX__ >= 32767 |
| /* at least 16-bit integers */ |
| { 0x8000, 16 }, |
| { 0xa5a5, 1 }, |
| { 0x5a5a, 2 }, |
| { 0x0ca0, 6 }, |
| #endif |
| #if __INT_MAX__ < 32767 |
| #error integers are too small |
| #endif |
| }; |
| |
| #define NFFSTESTS (sizeof (ffstesttab) / sizeof (ffstesttab[0])) |
| |
| extern void abort (void); |
| extern void exit (int); |
| |
| int |
| main (void) |
| { |
| int i; |
| |
| for (i = 0; i < NFFSTESTS; i++) |
| { |
| if (__builtin_ffs (ffstesttab[i].input) != ffstesttab[i].output) |
| abort (); |
| } |
| |
| exit (0); |
| } |