1#include <limits.h> 2 3extern void abort (); 4 5int test1(int x) 6{ 7 return x ^ INT_MIN; 8} 9 10unsigned int test1u(unsigned int x) 11{ 12 return x ^ (unsigned int)INT_MIN; 13} 14 15int test2(int x) 16{ 17 return x + INT_MIN; 18} 19 20unsigned int test2u(unsigned int x) 21{ 22 return x + (unsigned int)INT_MIN; 23} 24 25int test3(int x) 26{ 27 return x - INT_MIN; 28} 29 30unsigned int test3u(unsigned int x) 31{ 32 return x - (unsigned int)INT_MIN; 33} 34 35int test4(int x) 36{ 37 int y = INT_MIN; 38 return x ^ y; 39} 40 41unsigned int test4u(unsigned int x) 42{ 43 unsigned int y = (unsigned int)INT_MIN; 44 return x ^ y; 45} 46 47int test5(int x) 48{ 49 int y = INT_MIN; 50 return x + y; 51} 52 53unsigned int test5u(unsigned int x) 54{ 55 unsigned int y = (unsigned int)INT_MIN; 56 return x + y; 57} 58 59int test6(int x) 60{ 61 int y = INT_MIN; 62 return x - y; 63} 64 65unsigned int test6u(unsigned int x) 66{ 67 unsigned int y = (unsigned int)INT_MIN; 68 return x - y; 69} 70 71 72 73void test(int a, int b) 74{ 75 if (test1(a) != b) 76 abort(); 77 if (test2(a) != b) 78 abort(); 79 if (test3(a) != b) 80 abort(); 81 if (test4(a) != b) 82 abort(); 83 if (test5(a) != b) 84 abort(); 85 if (test6(a) != b) 86 abort(); 87} 88 89void testu(unsigned int a, unsigned int b) 90{ 91 if (test1u(a) != b) 92 abort(); 93 if (test2u(a) != b) 94 abort(); 95 if (test3u(a) != b) 96 abort(); 97 if (test4u(a) != b) 98 abort(); 99 if (test5u(a) != b) 100 abort(); 101 if (test6u(a) != b) 102 abort(); 103} 104 105 106int main() 107{ 108#if INT_MAX == 2147483647 109 test(0x00000000,0x80000000); 110 test(0x80000000,0x00000000); 111 test(0x12345678,0x92345678); 112 test(0x92345678,0x12345678); 113 test(0x7fffffff,0xffffffff); 114 test(0xffffffff,0x7fffffff); 115 116 testu(0x00000000,0x80000000); 117 testu(0x80000000,0x00000000); 118 testu(0x12345678,0x92345678); 119 testu(0x92345678,0x12345678); 120 testu(0x7fffffff,0xffffffff); 121 testu(0xffffffff,0x7fffffff); 122#endif 123 124#if INT_MAX == 32767 125 test(0x0000,0x8000); 126 test(0x8000,0x0000); 127 test(0x1234,0x9234); 128 test(0x9234,0x1234); 129 test(0x7fff,0xffff); 130 test(0xffff,0x7fff); 131 132 testu(0x0000,0x8000); 133 testu(0x8000,0x0000); 134 testu(0x1234,0x9234); 135 testu(0x9234,0x1234); 136 testu(0x7fff,0xffff); 137 testu(0xffff,0x7fff); 138#endif 139 140 return 0; 141} 142 143