1 | /* It is important that this comes first to not hide effects introduced |
2 | by other headers. */ |
3 | #include <limits.h> |
4 | |
5 | #include <inttypes.h> |
6 | #include <stdio.h> |
7 | |
8 | |
9 | static long long int |
10 | bitval (int bits) |
11 | { |
12 | long long int val = 0; |
13 | while (bits-- > 0) |
14 | val |= 1ll << bits; |
15 | return val; |
16 | } |
17 | |
18 | |
19 | static int |
20 | do_test (void) |
21 | { |
22 | int result = 0; |
23 | |
24 | #define TEST(name, format, expected) \ |
25 | printf ("%-12s expected = %-20" format " actual = %" format "\n", \ |
26 | #name ":", expected, name); \ |
27 | result |= name != expected |
28 | |
29 | /* The limits from ISO C99. */ |
30 | |
31 | /* We cannot support anything but 8-bit chars. */ |
32 | TEST (CHAR_BIT, "d" , 8); |
33 | TEST (SCHAR_MIN, "d" , -128); |
34 | TEST (SCHAR_MAX, "d" , 127); |
35 | TEST (UCHAR_MAX, "d" , 255); |
36 | |
37 | TEST (SHRT_MIN, "d" , -(1 << (sizeof (short int) * CHAR_BIT - 1))); |
38 | TEST (SHRT_MAX, "d" , (1 << (sizeof (short int) * CHAR_BIT - 1)) - 1); |
39 | TEST (USHRT_MAX, "d" , (1 << sizeof (short int) * CHAR_BIT) - 1); |
40 | |
41 | TEST (INT_MIN, "d" , (int) -bitval (sizeof (int) * CHAR_BIT - 1) - 1); |
42 | TEST (INT_MAX, "d" , (int) bitval (sizeof (int) * CHAR_BIT - 1)); |
43 | TEST (UINT_MAX, "u" , |
44 | (unsigned int) bitval (sizeof (unsigned int) * CHAR_BIT)); |
45 | |
46 | TEST (LONG_MIN, "ld" , |
47 | (long int) -bitval (sizeof (long int) * CHAR_BIT - 1) - 1); |
48 | TEST (LONG_MAX, "ld" , (long int) bitval (sizeof (long int) * CHAR_BIT - 1)); |
49 | TEST (ULONG_MAX, "lu" , |
50 | (unsigned long int) bitval (sizeof (unsigned long int) * CHAR_BIT)); |
51 | |
52 | TEST (LLONG_MIN, "lld" , -bitval (sizeof (long long int) * CHAR_BIT - 1) - 1); |
53 | TEST (LLONG_MAX, "lld" , bitval (sizeof (long long int) * CHAR_BIT - 1)); |
54 | TEST (ULLONG_MAX, "llu" , |
55 | (unsigned long long int) bitval (sizeof (unsigned long long int) |
56 | * CHAR_BIT)); |
57 | |
58 | /* Values from POSIX and Unix. */ |
59 | #ifdef PAGESIZE |
60 | TEST (PAGESIZE, "d" , getpagesize ()); |
61 | #elif defined (PAGE_SIZE) |
62 | TEST (PAGE_SIZE, "d" , getpagesize ()); |
63 | #endif |
64 | |
65 | TEST (WORD_BIT, "d" , (int) sizeof (int) * CHAR_BIT); |
66 | TEST (LONG_BIT, "d" , (int) sizeof (long int) * CHAR_BIT); |
67 | |
68 | return result; |
69 | } |
70 | |
71 | #define TEST_FUNCTION do_test () |
72 | #include "../test-skeleton.c" |
73 | |