]>
Commit | Line | Data |
---|---|---|
8ae67009 UD |
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 | ||
29955b5d AS |
19 | static int |
20 | do_test (void) | |
8ae67009 UD |
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 ()); | |
6d6d7fde | 61 | #elif defined (PAGE_SIZE) |
8ae67009 UD |
62 | TEST (PAGE_SIZE, "d", getpagesize ()); |
63 | #endif | |
64 | ||
d347a4ab UD |
65 | TEST (WORD_BIT, "d", (int) sizeof (int) * CHAR_BIT); |
66 | TEST (LONG_BIT, "d", (int) sizeof (long int) * CHAR_BIT); | |
8ae67009 UD |
67 | |
68 | return result; | |
69 | } | |
29955b5d AS |
70 | |
71 | #define TEST_FUNCTION do_test () | |
72 | #include "../test-skeleton.c" |