1 #include <limits.h>
2 
3 extern void abort ();
4 
test1(int x)5 int test1(int x)
6 {
7   return (x ^ INT_MIN) ^ 0x1234;
8 }
9 
test1u(unsigned int x)10 unsigned int test1u(unsigned int x)
11 {
12   return (x ^ (unsigned int)INT_MIN) ^ 0x1234;
13 }
14 
test2(int x)15 int test2(int x)
16 {
17   return (x ^ 0x1234) ^ INT_MIN;
18 }
19 
test2u(unsigned int x)20 unsigned int test2u(unsigned int x)
21 {
22   return (x ^ 0x1234) ^ (unsigned int)INT_MIN;
23 }
24 
test3u(unsigned int x)25 unsigned int test3u(unsigned int x)
26 {
27   return (x + (unsigned int)INT_MIN) ^ 0x1234;
28 }
29 
test4u(unsigned int x)30 unsigned int test4u(unsigned int x)
31 {
32   return (x ^ 0x1234) + (unsigned int)INT_MIN;
33 }
34 
test5u(unsigned int x)35 unsigned int test5u(unsigned int x)
36 {
37   return (x - (unsigned int)INT_MIN) ^ 0x1234;
38 }
39 
test6u(unsigned int x)40 unsigned int test6u(unsigned int x)
41 {
42   return (x ^ 0x1234) - (unsigned int)INT_MIN;
43 }
44 
test7(int x)45 int test7(int x)
46 {
47   int y = INT_MIN;
48   int z = 0x1234;
49   return (x ^ y) ^ z;
50 }
51 
test7u(unsigned int x)52 unsigned int test7u(unsigned int x)
53 {
54   unsigned int y = (unsigned int)INT_MIN;
55   unsigned int z = 0x1234;
56   return (x ^ y) ^ z;
57 }
58 
test8(int x)59 int test8(int x)
60 {
61   int y = 0x1234;
62   int z = INT_MIN;
63   return (x ^ y) ^ z;
64 }
65 
test8u(unsigned int x)66 unsigned int test8u(unsigned int x)
67 {
68   unsigned int y = 0x1234;
69   unsigned int z = (unsigned int)INT_MIN;
70   return (x ^ y) ^ z;
71 }
72 
test9u(unsigned int x)73 unsigned int test9u(unsigned int x)
74 {
75   unsigned int y = (unsigned int)INT_MIN;
76   unsigned int z = 0x1234;
77   return (x + y) ^ z;
78 }
79 
test10u(unsigned int x)80 unsigned int test10u(unsigned int x)
81 {
82   unsigned int y = 0x1234;
83   unsigned int z = (unsigned int)INT_MIN;
84   return (x ^ y) + z;
85 }
86 
test11u(unsigned int x)87 unsigned int test11u(unsigned int x)
88 {
89   unsigned int y = (unsigned int)INT_MIN;
90   unsigned int z = 0x1234;
91   return (x - y) ^ z;
92 }
93 
test12u(unsigned int x)94 unsigned int test12u(unsigned int x)
95 {
96   unsigned int y = 0x1234;
97   unsigned int z = (unsigned int)INT_MIN;
98   return (x ^ y) - z;
99 }
100 
101 
test(int a,int b)102 void test(int a, int b)
103 {
104   if (test1(a) != b)
105     abort();
106   if (test2(a) != b)
107     abort();
108   if (test7(a) != b)
109     abort();
110   if (test8(a) != b)
111     abort();
112 }
113 
testu(unsigned int a,unsigned int b)114 void testu(unsigned int a, unsigned int b)
115 {
116   if (test1u(a) != b)
117     abort();
118   if (test2u(a) != b)
119     abort();
120   if (test3u(a) != b)
121     abort();
122   if (test4u(a) != b)
123     abort();
124   if (test5u(a) != b)
125     abort();
126   if (test6u(a) != b)
127     abort();
128   if (test7u(a) != b)
129     abort();
130   if (test8u(a) != b)
131     abort();
132   if (test9u(a) != b)
133     abort();
134   if (test10u(a) != b)
135     abort();
136   if (test11u(a) != b)
137     abort();
138   if (test12u(a) != b)
139     abort();
140 }
141 
142 
main()143 int main()
144 {
145 #if INT_MAX == 2147483647
146   test(0x00000000,0x80001234);
147   test(0x00001234,0x80000000);
148   test(0x80000000,0x00001234);
149   test(0x80001234,0x00000000);
150   test(0x7fffffff,0xffffedcb);
151   test(0xffffffff,0x7fffedcb);
152 
153   testu(0x00000000,0x80001234);
154   testu(0x00001234,0x80000000);
155   testu(0x80000000,0x00001234);
156   testu(0x80001234,0x00000000);
157   testu(0x7fffffff,0xffffedcb);
158   testu(0xffffffff,0x7fffedcb);
159 #endif
160 
161 #if INT_MAX == 32767
162   test(0x0000,0x9234);
163   test(0x1234,0x8000);
164   test(0x8000,0x1234);
165   test(0x9234,0x0000);
166   test(0x7fff,0xedcb);
167   test(0xffff,0x6dcb);
168 
169   testu(0x0000,0x9234);
170   testu(0x8000,0x1234);
171   testu(0x1234,0x8000);
172   testu(0x9234,0x0000);
173   testu(0x7fff,0xedcb);
174   testu(0xffff,0x6dcb);
175 #endif
176 
177   return 0;
178 }
179 
180