scc

A fork of https://git.simple-cc.org/scc/ for Qute

git clone https://git.8pit.net/scc.git

  1#include <limits.h>
  2#include <stdio.h>
  3
  4/*
  5 * This test assumes that CHAR_BIT is the size of every
  6 * unit returned by sizeof. It also assumes 2 complement.
  7 */
  8
  9/*
 10output:
 11test1
 12test2
 13test3
 14end:
 15*/
 16
 17void
 18test1()
 19{
 20	puts("test1");
 21
 22	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");
 26
 27	if (SCHAR_MAX < 127 || CHAR_MIN > -127)
 28		puts("wrong signed char definition");
 29
 30	if (UCHAR_MAX < 255 || UCHAR_MAX <= 0)
 31		puts("wrong unsigned char definition");
 32
 33	if (SHRT_MAX < 32767 ||
 34	    SHRT_MIN > -32767 ||
 35	    USHRT_MAX < 65535 || USHRT_MAX <= 0)
 36		puts("wrong short definition");
 37
 38	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");
 46
 47	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");
 57
 58	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");
 68
 69	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");
 79
 80	if (MB_LEN_MAX < sizeof(char))
 81		puts("wrong value for MB_LEN_MAX");
 82}
 83
 84
 85void
 86test2()
 87{
 88	char c;
 89	int i;
 90
 91	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}
113
114#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;}
116
117void
118test3()
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;
128
129	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);
136
137	UMAX(uc);
138	if (uc != UCHAR_MAX)
139		printf("wrong unsigned char max %u %u\n", uc, UCHAR_MAX);
140
141	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);
147
148	UMAX(u);
149	if (u != UINT_MAX)
150		printf("wrong unsigned int max %u %u\n", u, UINT_MAX);
151
152	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);
158
159	UMAX(ul);
160	if (ul != ULONG_MAX)
161		printf("wrong int max %lu %lu\n", ul, (unsigned long) ULONG_MAX);
162
163	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);
169
170	UMAX(ull);
171	if (ull != ULLONG_MAX)
172		printf("wrong ullong max %llu %llu\n", ull, (unsigned long long) ULLONG_MAX);
173}
174
175int
176main()
177{
178	test1();
179	test2();
180	test3();
181
182	return 0;
183}