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