1#include <limits.h>2#include <stdio.h>34/*5 * This test assumes that CHAR_BIT is the size of every6 * unit returned by sizeof. It also assumes 2 complement.7 */89/*10output:11test112test213test314end:15*/1617void18test1()19{20 puts("test1");2122 if (CHAR_BIT < 8 ||23 CHAR_MAX < 127 || CHAR_MIN > 0 ||24 CHAR_MAX != SCHAR_MAX && CHAR_MAX != UCHAR_MAX)25 puts("wrong char definition");2627 if (SCHAR_MAX < 127 || CHAR_MIN > -127)28 puts("wrong signed char definition");2930 if (UCHAR_MAX < 255 || UCHAR_MAX <= 0)31 puts("wrong unsigned char definition");3233 if (SHRT_MAX < 32767 ||34 SHRT_MIN > -32767 ||35 USHRT_MAX < 65535 || USHRT_MAX <= 0)36 puts("wrong short definition");3738 if (INT_MAX < 32767 ||39 INT_MIN > -32767 ||40 UINT_MAX < 65535 || UINT_MAX <= 0 ||41 INT_MAX < SCHAR_MAX || INT_MIN > SCHAR_MIN ||42 UINT_MAX < UCHAR_MAX ||43 INT_MAX < SHRT_MAX || INT_MIN > SHRT_MIN ||44 UINT_MAX < USHRT_MAX)45 puts("wrong int definition");4647 if (LONG_MAX < 2147483647 ||48 LONG_MIN > -2147483647 ||49 ULONG_MAX < 4294967295 || ULONG_MAX <= 0 ||50 LONG_MAX < SCHAR_MAX || LONG_MIN > SCHAR_MIN ||51 ULONG_MAX < UCHAR_MAX ||52 LONG_MAX < SHRT_MAX || LONG_MIN > SHRT_MIN ||53 ULONG_MAX < USHRT_MAX ||54 LONG_MAX < INT_MAX || LONG_MIN > INT_MIN ||55 ULONG_MAX < UINT_MAX)56 puts("wrong long definition");5758 if (LONG_MAX < 9223372036854775807 ||59 LONG_MIN > -9223372036854775807 ||60 ULONG_MAX < 18446744073709551615u || ULONG_MAX <= 0 ||61 LONG_MAX < SCHAR_MAX || LONG_MIN > SCHAR_MIN ||62 ULONG_MAX < UCHAR_MAX ||63 LONG_MAX < SHRT_MAX || LONG_MIN > SHRT_MIN ||64 ULONG_MAX < USHRT_MAX ||65 LONG_MAX < LONG_MAX || LONG_MIN > LONG_MIN ||66 ULONG_MAX < ULONG_MAX)67 puts("wrong long definition");6869 if (LLONG_MAX < 9223372036854775807 ||70 LLONG_MIN > -9223372036854775807 ||71 ULLONG_MAX < 18446744073709551615u || ULLONG_MAX <= 0 ||72 LLONG_MAX < SCHAR_MAX || LLONG_MIN > SCHAR_MIN ||73 ULLONG_MAX < UCHAR_MAX ||74 LLONG_MAX < SHRT_MAX || LLONG_MIN > SHRT_MIN ||75 ULLONG_MAX < USHRT_MAX ||76 LLONG_MAX < LONG_MAX || LLONG_MIN > LONG_MIN ||77 ULLONG_MAX < ULONG_MAX)78 puts("wrong long long definition");7980 if (MB_LEN_MAX < sizeof(char))81 puts("wrong value for MB_LEN_MAX");82}838485void86test2()87{88 char c;89 int i;9091 puts("test2");92 if ('\xff' > 0) {93 for (c = i = 0; i < CHAR_BIT; i++) {94 c <<= 1;95 c |= 1;96 }97 if (c != CHAR_MAX)98 printf("wrong char max %d %d\n", c, CHAR_MAX);99 if (CHAR_MIN != 0)100 printf("wrong char min %d %d\n", c, CHAR_MIN);101 } else {102 for (c = i = 0; i < CHAR_BIT -1; i++) {103 c <<= 1;104 c |= 1;105 }106 if (c != CHAR_MAX)107 printf("wrong char max %d %d\n", c, CHAR_MAX);108 c = -c - 1;109 if (c != CHAR_MIN)110 printf("wrong char min %d %d\n", c, CHAR_MIN);111 }112}113114#define SMAX(t) for (t = n = 0; n < sizeof(t)*CHAR_BIT -1; n++) {t <<= 1; t |= 1;}115#define UMAX(t) for (t = n = 0; n < sizeof(t)*CHAR_BIT; n++) {t <<= 1; t |= 1;}116117void118test3()119{120 signed char sc;121 unsigned char uc;122 int i, n;123 unsigned u;124 long l;125 unsigned long ul;126 long long ll;127 unsigned long long ull;128129 puts("test3");130 SMAX(sc);131 if (sc != SCHAR_MAX)132 printf("wrong signed char max %d %d\n", sc, SCHAR_MAX);133 sc = -sc - 1;134 if (sc != SCHAR_MIN)135 printf("wrong signed char min %d %d\n", sc, SCHAR_MIN);136137 UMAX(uc);138 if (uc != UCHAR_MAX)139 printf("wrong unsigned char max %u %u\n", uc, UCHAR_MAX);140141 SMAX(i);142 if (i != INT_MAX)143 printf("wrong int max %d %d\n", i, INT_MAX);144 i = -i - 1;145 if (i != INT_MIN)146 printf("wrong int min %d %d\n", i, INT_MIN);147148 UMAX(u);149 if (u != UINT_MAX)150 printf("wrong unsigned int max %u %u\n", u, UINT_MAX);151152 SMAX(l);153 if (l != LONG_MAX)154 printf("wrong long max %ld %ld\n", l, (long) LONG_MAX);155 l = -l - 1;156 if (l != LONG_MIN)157 printf("wrong long max %ld %ld\n", l, (long) LONG_MIN);158159 UMAX(ul);160 if (ul != ULONG_MAX)161 printf("wrong int max %lu %lu\n", ul, (unsigned long) ULONG_MAX);162163 SMAX(ll);164 if (ll != LLONG_MAX)165 printf("wrong llong max %lld %lld\n", ll, (long long) LLONG_MAX);166 ll = -ll - 1;167 if (ll != LLONG_MIN)168 printf("wrong llong min %lld %lld\n", ll, (long long) LLONG_MIN);169170 UMAX(ull);171 if (ull != ULLONG_MAX)172 printf("wrong ullong max %llu %llu\n", ull, (unsigned long long) ULLONG_MAX);173}174175int176main()177{178 test1();179 test2();180 test3();181182 return 0;183}