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