1 #include <limits.h>
2
3 extern void abort ();
4
test1(int x)5 int test1(int x)
6 {
7 return x ^ INT_MIN;
8 }
9
test1u(unsigned int x)10 unsigned int test1u(unsigned int x)
11 {
12 return x ^ (unsigned int)INT_MIN;
13 }
14
test2(int x)15 int test2(int x)
16 {
17 return x + INT_MIN;
18 }
19
test2u(unsigned int x)20 unsigned int test2u(unsigned int x)
21 {
22 return x + (unsigned int)INT_MIN;
23 }
24
test3(int x)25 int test3(int x)
26 {
27 return x - INT_MIN;
28 }
29
test3u(unsigned int x)30 unsigned int test3u(unsigned int x)
31 {
32 return x - (unsigned int)INT_MIN;
33 }
34
test4(int x)35 int test4(int x)
36 {
37 int y = INT_MIN;
38 return x ^ y;
39 }
40
test4u(unsigned int x)41 unsigned int test4u(unsigned int x)
42 {
43 unsigned int y = (unsigned int)INT_MIN;
44 return x ^ y;
45 }
46
test5(int x)47 int test5(int x)
48 {
49 int y = INT_MIN;
50 return x + y;
51 }
52
test5u(unsigned int x)53 unsigned int test5u(unsigned int x)
54 {
55 unsigned int y = (unsigned int)INT_MIN;
56 return x + y;
57 }
58
test6(int x)59 int test6(int x)
60 {
61 int y = INT_MIN;
62 return x - y;
63 }
64
test6u(unsigned int x)65 unsigned int test6u(unsigned int x)
66 {
67 unsigned int y = (unsigned int)INT_MIN;
68 return x - y;
69 }
70
71
72
test(int a,int b)73 void 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
testu(unsigned int a,unsigned int b)89 void 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
main()106 int 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