xref: /minix3/minix/tests/test49.c (revision 433d6423c39e34ec4b79c950597bb2d236f886be)
1*433d6423SLionel Sambuc #include <assert.h>
2*433d6423SLionel Sambuc #include <inttypes.h>
3*433d6423SLionel Sambuc #include <stdint.h>
4*433d6423SLionel Sambuc #include <stdio.h>
5*433d6423SLionel Sambuc #include <stdlib.h>
6*433d6423SLionel Sambuc #include <string.h>
7*433d6423SLionel Sambuc #include <unistd.h>
8*433d6423SLionel Sambuc 
9*433d6423SLionel Sambuc #define TEST_64_BIT
10*433d6423SLionel Sambuc 
11*433d6423SLionel Sambuc #define ERR e(__LINE__)
12*433d6423SLionel Sambuc 
13*433d6423SLionel Sambuc int max_error = 4;
14*433d6423SLionel Sambuc #include "common.h"
15*433d6423SLionel Sambuc 
16*433d6423SLionel Sambuc 
17*433d6423SLionel Sambuc #define TEST_PRINTF(type, macro, value, result)				\
18*433d6423SLionel Sambuc {									\
19*433d6423SLionel Sambuc 	char buffer[256];						\
20*433d6423SLionel Sambuc 	snprintf(buffer, sizeof(buffer), "%" macro, (type) value);	\
21*433d6423SLionel Sambuc 	if (strcmp(buffer, result) != 0) ERR;			\
22*433d6423SLionel Sambuc }
23*433d6423SLionel Sambuc 
main(void)24*433d6423SLionel Sambuc int main(void)
25*433d6423SLionel Sambuc {
26*433d6423SLionel Sambuc 	start(49);
27*433d6423SLionel Sambuc 
28*433d6423SLionel Sambuc 	/* test integer sizes */
29*433d6423SLionel Sambuc 	if (sizeof(int8_t) != 1) ERR;
30*433d6423SLionel Sambuc 	if (sizeof(uint8_t) != 1) ERR;
31*433d6423SLionel Sambuc 	if (sizeof(int_fast8_t) < 1) ERR;
32*433d6423SLionel Sambuc 	if (sizeof(uint_fast8_t) < 1) ERR;
33*433d6423SLionel Sambuc 	if (sizeof(int_least8_t) < 1) ERR;
34*433d6423SLionel Sambuc 	if (sizeof(uint_least8_t) < 1) ERR;
35*433d6423SLionel Sambuc 	if (sizeof(int16_t) != 2) ERR;
36*433d6423SLionel Sambuc 	if (sizeof(uint16_t) != 2) ERR;
37*433d6423SLionel Sambuc 	if (sizeof(int_fast16_t) < 2) ERR;
38*433d6423SLionel Sambuc 	if (sizeof(uint_fast16_t) < 2) ERR;
39*433d6423SLionel Sambuc 	if (sizeof(int_least16_t) < 2) ERR;
40*433d6423SLionel Sambuc 	if (sizeof(uint_least16_t) < 2) ERR;
41*433d6423SLionel Sambuc 	if (sizeof(int32_t) != 4) ERR;
42*433d6423SLionel Sambuc 	if (sizeof(uint32_t) != 4) ERR;
43*433d6423SLionel Sambuc 	if (sizeof(int_fast32_t) < 4) ERR;
44*433d6423SLionel Sambuc 	if (sizeof(uint_fast32_t) < 4) ERR;
45*433d6423SLionel Sambuc 	if (sizeof(int_least32_t) < 4) ERR;
46*433d6423SLionel Sambuc 	if (sizeof(uint_least32_t) < 4) ERR;
47*433d6423SLionel Sambuc #ifdef TEST_64_BIT
48*433d6423SLionel Sambuc 	if (sizeof(int64_t) != 8) ERR;
49*433d6423SLionel Sambuc 	if (sizeof(uint64_t) != 8) ERR;
50*433d6423SLionel Sambuc 	if (sizeof(int_fast64_t) < 8) ERR;
51*433d6423SLionel Sambuc 	if (sizeof(uint_fast64_t) < 8) ERR;
52*433d6423SLionel Sambuc 	if (sizeof(int_least64_t) < 8) ERR;
53*433d6423SLionel Sambuc 	if (sizeof(uint_least64_t) < 8) ERR;
54*433d6423SLionel Sambuc #endif
55*433d6423SLionel Sambuc 	if (sizeof(intptr_t) != sizeof(void *)) ERR;
56*433d6423SLionel Sambuc 	if (sizeof(uintptr_t) != sizeof(void *)) ERR;
57*433d6423SLionel Sambuc #ifdef TEST_64_BIT
58*433d6423SLionel Sambuc 	if (sizeof(intmax_t) < 8) ERR;
59*433d6423SLionel Sambuc 	if (sizeof(uintmax_t) < 8) ERR;
60*433d6423SLionel Sambuc #else
61*433d6423SLionel Sambuc 	if (sizeof(intmax_t) < 4) ERR;
62*433d6423SLionel Sambuc 	if (sizeof(uintmax_t) < 4) ERR;
63*433d6423SLionel Sambuc #endif
64*433d6423SLionel Sambuc 
65*433d6423SLionel Sambuc 	/* test integer signedness */
66*433d6423SLionel Sambuc 	if ((int8_t) (-1) >= 0) ERR;
67*433d6423SLionel Sambuc 	if ((uint8_t) (-1) <= 0) ERR;
68*433d6423SLionel Sambuc 	if ((int_fast8_t) (-1) >= 0) ERR;
69*433d6423SLionel Sambuc 	if ((uint_fast8_t) (-1) <= 0) ERR;
70*433d6423SLionel Sambuc 	if ((int_least8_t) (-1) >= 0) ERR;
71*433d6423SLionel Sambuc 	if ((uint_least8_t) (-1) <= 0) ERR;
72*433d6423SLionel Sambuc 	if ((int16_t) (-1) >= 0) ERR;
73*433d6423SLionel Sambuc 	if ((uint16_t) (-1) <= 0) ERR;
74*433d6423SLionel Sambuc 	if ((int_fast16_t) (-1) >= 0) ERR;
75*433d6423SLionel Sambuc 	if ((uint_fast16_t) (-1) <= 0) ERR;
76*433d6423SLionel Sambuc 	if ((int_least16_t) (-1) >= 0) ERR;
77*433d6423SLionel Sambuc 	if ((uint_least16_t) (-1) <= 0) ERR;
78*433d6423SLionel Sambuc 	if ((int32_t) (-1) >= 0) ERR;
79*433d6423SLionel Sambuc 	if ((uint32_t) (-1) <= 0) ERR;
80*433d6423SLionel Sambuc 	if ((int_fast32_t) (-1) >= 0) ERR;
81*433d6423SLionel Sambuc 	if ((uint_fast32_t) (-1) <= 0) ERR;
82*433d6423SLionel Sambuc 	if ((int_least32_t) (-1) >= 0) ERR;
83*433d6423SLionel Sambuc 	if ((uint_least32_t) (-1) <= 0) ERR;
84*433d6423SLionel Sambuc #ifdef TEST_64_BIT
85*433d6423SLionel Sambuc 	if ((int64_t) (-1) >= 0) ERR;
86*433d6423SLionel Sambuc 	if ((uint64_t) (-1) <= 0) ERR;
87*433d6423SLionel Sambuc 	if ((int_fast64_t) (-1) >= 0) ERR;
88*433d6423SLionel Sambuc 	if ((uint_fast64_t) (-1) <= 0) ERR;
89*433d6423SLionel Sambuc 	if ((int_least64_t) (-1) >= 0) ERR;
90*433d6423SLionel Sambuc 	if ((uint_least64_t) (-1) <= 0) ERR;
91*433d6423SLionel Sambuc #endif
92*433d6423SLionel Sambuc 	if ((intptr_t) (-1) >= 0) ERR;
93*433d6423SLionel Sambuc 	if ((uintptr_t) (-1) <= 0) ERR;
94*433d6423SLionel Sambuc 	if ((intptr_t) (-1) >= 0) ERR;
95*433d6423SLionel Sambuc 	if ((uintptr_t) (-1) <= 0) ERR;
96*433d6423SLionel Sambuc 
97*433d6423SLionel Sambuc 	/* test printf */
98*433d6423SLionel Sambuc 	TEST_PRINTF(int32_t,  PRId32, INT32_MIN,  "-2147483648");
99*433d6423SLionel Sambuc 	TEST_PRINTF(int32_t,  PRId32, INT32_MAX,   "2147483647");
100*433d6423SLionel Sambuc 	TEST_PRINTF(int32_t,  PRIi32, INT32_MIN,  "-2147483648");
101*433d6423SLionel Sambuc 	TEST_PRINTF(int32_t,  PRIi32, INT32_MAX,   "2147483647");
102*433d6423SLionel Sambuc 	TEST_PRINTF(uint32_t, PRIu32, UINT32_MAX,  "4294967295");
103*433d6423SLionel Sambuc 	TEST_PRINTF(uint32_t, PRIX32, UINT32_MAX,    "FFFFFFFF");
104*433d6423SLionel Sambuc 	TEST_PRINTF(uint32_t, PRIx32, UINT32_MAX,    "ffffffff");
105*433d6423SLionel Sambuc 	TEST_PRINTF(uint32_t, PRIo32, UINT32_MAX, "37777777777");
106*433d6423SLionel Sambuc 
107*433d6423SLionel Sambuc 	TEST_PRINTF(int_fast32_t,  PRIdFAST32, INT32_MIN,  "-2147483648");
108*433d6423SLionel Sambuc 	TEST_PRINTF(int_fast32_t,  PRIdFAST32, INT32_MAX,   "2147483647");
109*433d6423SLionel Sambuc 	TEST_PRINTF(int_fast32_t,  PRIiFAST32, INT32_MIN,  "-2147483648");
110*433d6423SLionel Sambuc 	TEST_PRINTF(int_fast32_t,  PRIiFAST32, INT32_MAX,   "2147483647");
111*433d6423SLionel Sambuc 	TEST_PRINTF(uint_fast32_t, PRIuFAST32, UINT32_MAX,  "4294967295");
112*433d6423SLionel Sambuc 	TEST_PRINTF(uint_fast32_t, PRIXFAST32, UINT32_MAX,    "FFFFFFFF");
113*433d6423SLionel Sambuc 	TEST_PRINTF(uint_fast32_t, PRIxFAST32, UINT32_MAX,    "ffffffff");
114*433d6423SLionel Sambuc 	TEST_PRINTF(uint_fast32_t, PRIoFAST32, UINT32_MAX, "37777777777");
115*433d6423SLionel Sambuc 
116*433d6423SLionel Sambuc 	TEST_PRINTF(int_least32_t,  PRIdLEAST32, INT32_MIN,  "-2147483648");
117*433d6423SLionel Sambuc 	TEST_PRINTF(int_least32_t,  PRIdLEAST32, INT32_MAX,   "2147483647");
118*433d6423SLionel Sambuc 	TEST_PRINTF(int_least32_t,  PRIiLEAST32, INT32_MIN,  "-2147483648");
119*433d6423SLionel Sambuc 	TEST_PRINTF(int_least32_t,  PRIiLEAST32, INT32_MAX,   "2147483647");
120*433d6423SLionel Sambuc 	TEST_PRINTF(uint_least32_t, PRIuLEAST32, UINT32_MAX,  "4294967295");
121*433d6423SLionel Sambuc 	TEST_PRINTF(uint_least32_t, PRIXLEAST32, UINT32_MAX,    "FFFFFFFF");
122*433d6423SLionel Sambuc 	TEST_PRINTF(uint_least32_t, PRIxLEAST32, UINT32_MAX,    "ffffffff");
123*433d6423SLionel Sambuc 	TEST_PRINTF(uint_least32_t, PRIoLEAST32, UINT32_MAX, "37777777777");
124*433d6423SLionel Sambuc 
125*433d6423SLionel Sambuc #ifdef TEST_64_BIT
126*433d6423SLionel Sambuc 	TEST_PRINTF(int64_t,  PRId64, INT64_MIN,    "-9223372036854775808");
127*433d6423SLionel Sambuc 	TEST_PRINTF(int64_t,  PRId64, INT64_MAX,     "9223372036854775807");
128*433d6423SLionel Sambuc 	TEST_PRINTF(int64_t,  PRIi64, INT64_MIN,    "-9223372036854775808");
129*433d6423SLionel Sambuc 	TEST_PRINTF(int64_t,  PRIi64, INT64_MAX,     "9223372036854775807");
130*433d6423SLionel Sambuc 	TEST_PRINTF(uint64_t, PRIu64, UINT64_MAX,   "18446744073709551615");
131*433d6423SLionel Sambuc 	TEST_PRINTF(uint64_t, PRIX64, UINT64_MAX,       "FFFFFFFFFFFFFFFF");
132*433d6423SLionel Sambuc 	TEST_PRINTF(uint64_t, PRIx64, UINT64_MAX,       "ffffffffffffffff");
133*433d6423SLionel Sambuc 	TEST_PRINTF(uint64_t, PRIo64, UINT64_MAX, "1777777777777777777777");
134*433d6423SLionel Sambuc 
135*433d6423SLionel Sambuc 	TEST_PRINTF(int_fast64_t,  PRIdFAST64, INT64_MIN,    "-9223372036854775808");
136*433d6423SLionel Sambuc 	TEST_PRINTF(int_fast64_t,  PRIdFAST64, INT64_MAX,     "9223372036854775807");
137*433d6423SLionel Sambuc 	TEST_PRINTF(int_fast64_t,  PRIiFAST64, INT64_MIN,    "-9223372036854775808");
138*433d6423SLionel Sambuc 	TEST_PRINTF(int_fast64_t,  PRIiFAST64, INT64_MAX,     "9223372036854775807");
139*433d6423SLionel Sambuc 	TEST_PRINTF(uint_fast64_t, PRIuFAST64, UINT64_MAX,   "18446744073709551615");
140*433d6423SLionel Sambuc 	TEST_PRINTF(uint_fast64_t, PRIXFAST64, UINT64_MAX,       "FFFFFFFFFFFFFFFF");
141*433d6423SLionel Sambuc 	TEST_PRINTF(uint_fast64_t, PRIxFAST64, UINT64_MAX,       "ffffffffffffffff");
142*433d6423SLionel Sambuc 	TEST_PRINTF(uint_fast64_t, PRIoFAST64, UINT64_MAX, "1777777777777777777777");
143*433d6423SLionel Sambuc 
144*433d6423SLionel Sambuc 	TEST_PRINTF(int_least64_t,  PRIdLEAST64, INT64_MIN,    "-9223372036854775808");
145*433d6423SLionel Sambuc 	TEST_PRINTF(int_least64_t,  PRIdLEAST64, INT64_MAX,     "9223372036854775807");
146*433d6423SLionel Sambuc 	TEST_PRINTF(int_least64_t,  PRIiLEAST64, INT64_MIN,    "-9223372036854775808");
147*433d6423SLionel Sambuc 	TEST_PRINTF(int_least64_t,  PRIiLEAST64, INT64_MAX,     "9223372036854775807");
148*433d6423SLionel Sambuc 	TEST_PRINTF(uint_least64_t, PRIuLEAST64, UINT64_MAX,   "18446744073709551615");
149*433d6423SLionel Sambuc 	TEST_PRINTF(uint_least64_t, PRIXLEAST64, UINT64_MAX,       "FFFFFFFFFFFFFFFF");
150*433d6423SLionel Sambuc 	TEST_PRINTF(uint_least64_t, PRIxLEAST64, UINT64_MAX,       "ffffffffffffffff");
151*433d6423SLionel Sambuc 	TEST_PRINTF(uint_least64_t, PRIoLEAST64, UINT64_MAX, "1777777777777777777777");
152*433d6423SLionel Sambuc 
153*433d6423SLionel Sambuc 	TEST_PRINTF(intmax_t,  PRIdMAX, INT64_MIN,    "-9223372036854775808");
154*433d6423SLionel Sambuc 	TEST_PRINTF(intmax_t,  PRIdMAX, INT64_MAX,     "9223372036854775807");
155*433d6423SLionel Sambuc 	TEST_PRINTF(intmax_t,  PRIiMAX, INT64_MIN,    "-9223372036854775808");
156*433d6423SLionel Sambuc 	TEST_PRINTF(intmax_t,  PRIiMAX, INT64_MAX,     "9223372036854775807");
157*433d6423SLionel Sambuc 	TEST_PRINTF(uintmax_t, PRIuMAX, UINT64_MAX,   "18446744073709551615");
158*433d6423SLionel Sambuc 	TEST_PRINTF(uintmax_t, PRIXMAX, UINT64_MAX,       "FFFFFFFFFFFFFFFF");
159*433d6423SLionel Sambuc 	TEST_PRINTF(uintmax_t, PRIxMAX, UINT64_MAX,       "ffffffffffffffff");
160*433d6423SLionel Sambuc 	TEST_PRINTF(uintmax_t, PRIoMAX, UINT64_MAX, "1777777777777777777777");
161*433d6423SLionel Sambuc #else
162*433d6423SLionel Sambuc 	TEST_PRINTF(intmax_t,  PRIdMAX, INT32_MIN,  "-2147483648");
163*433d6423SLionel Sambuc 	TEST_PRINTF(intmax_t,  PRIdMAX, INT32_MAX,   "2147483647");
164*433d6423SLionel Sambuc 	TEST_PRINTF(intmax_t,  PRIiMAX, INT32_MIN,  "-2147483648");
165*433d6423SLionel Sambuc 	TEST_PRINTF(intmax_t,  PRIiMAX, INT32_MAX,   "2147483647");
166*433d6423SLionel Sambuc 	TEST_PRINTF(uintmax_t, PRIuMAX, UINT32_MAX,  "4294967295");
167*433d6423SLionel Sambuc 	TEST_PRINTF(uintmax_t, PRIXMAX, UINT32_MAX,    "FFFFFFFF");
168*433d6423SLionel Sambuc 	TEST_PRINTF(uintmax_t, PRIxMAX, UINT32_MAX,    "ffffffff");
169*433d6423SLionel Sambuc 	TEST_PRINTF(uintmax_t, PRIoMAX, UINT32_MAX, "37777777777");
170*433d6423SLionel Sambuc #endif
171*433d6423SLionel Sambuc 
172*433d6423SLionel Sambuc 	TEST_PRINTF(intptr_t,  PRIdPTR, INT32_MIN,  "-2147483648");
173*433d6423SLionel Sambuc 	TEST_PRINTF(intptr_t,  PRIdPTR, INT32_MAX,   "2147483647");
174*433d6423SLionel Sambuc 	TEST_PRINTF(intptr_t,  PRIiPTR, INT32_MIN,  "-2147483648");
175*433d6423SLionel Sambuc 	TEST_PRINTF(intptr_t,  PRIiPTR, INT32_MAX,   "2147483647");
176*433d6423SLionel Sambuc 	TEST_PRINTF(uintptr_t, PRIuPTR, UINT32_MAX,  "4294967295");
177*433d6423SLionel Sambuc 	TEST_PRINTF(uintptr_t, PRIXPTR, UINT32_MAX,    "FFFFFFFF");
178*433d6423SLionel Sambuc 	TEST_PRINTF(uintptr_t, PRIxPTR, UINT32_MAX,    "ffffffff");
179*433d6423SLionel Sambuc 	TEST_PRINTF(uintptr_t, PRIoPTR, UINT32_MAX, "37777777777");
180*433d6423SLionel Sambuc 
181*433d6423SLionel Sambuc 	/* done */
182*433d6423SLionel Sambuc 	quit();
183*433d6423SLionel Sambuc 	return -1;
184*433d6423SLionel Sambuc }
185