master
  1const std = @import("std");
  2const neg = @import("negXi2.zig");
  3const testing = std.testing;
  4
  5const print = std.debug.print;
  6
  7fn test__negsi2(a: i32, expected: i32) !void {
  8    const result = neg.__negsi2(a);
  9    try testing.expectEqual(expected, result);
 10}
 11
 12test "negsi2" {
 13    // TODO ensuring that math.minInt(i32); returns error
 14
 15    try test__negsi2(-3, 3);
 16    try test__negsi2(-2, 2);
 17    try test__negsi2(-1, 1);
 18    try test__negsi2(0, 0); // special case for 2s complement
 19    try test__negsi2(1, -1);
 20    try test__negsi2(2, -2);
 21    try test__negsi2(3, -3);
 22
 23    // max_usable == MAX(i32) == -MIN(i32) == 2147483647 == 7fffffff
 24    // divTrunc: max_usable / i, i=1,2,3,5,100
 25    // 7fffffff / i
 26    try test__negsi2(-715827882, 715827882);
 27    try test__negsi2(715827882, -715827882);
 28    try test__negsi2(-429496729, 429496729);
 29    try test__negsi2(429496729, -429496729);
 30    try test__negsi2(-214748364, 214748364);
 31    try test__negsi2(214748364, -214748364);
 32    // shifting: max_usable >> i, i=0..bitsize-4
 33    // 7fffffff >> i
 34    // 7fffffff >> i + 1
 35    // 7fffffff >> i + 3
 36    // 7fffffff >> i + 7
 37    try test__negsi2(-2147483647, 2147483647);
 38    try test__negsi2(2147483647, -2147483647);
 39    try test__negsi2(-2147483646, 2147483646);
 40    try test__negsi2(2147483646, -2147483646);
 41    try test__negsi2(-2147483644, 2147483644);
 42    try test__negsi2(2147483644, -2147483644);
 43    try test__negsi2(-2147483640, 2147483640);
 44    try test__negsi2(2147483640, -2147483640);
 45    try test__negsi2(-1073741823, 1073741823);
 46    try test__negsi2(1073741823, -1073741823);
 47    try test__negsi2(-1073741822, 1073741822);
 48    try test__negsi2(1073741822, -1073741822);
 49    try test__negsi2(-1073741820, 1073741820);
 50    try test__negsi2(1073741820, -1073741820);
 51    try test__negsi2(-1073741816, 1073741816);
 52    try test__negsi2(1073741816, -1073741816);
 53    try test__negsi2(-536870911, 536870911);
 54    try test__negsi2(536870911, -536870911);
 55    try test__negsi2(-536870910, 536870910);
 56    try test__negsi2(536870910, -536870910);
 57    try test__negsi2(-536870908, 536870908);
 58    try test__negsi2(536870908, -536870908);
 59    try test__negsi2(-536870904, 536870904);
 60    try test__negsi2(536870904, -536870904);
 61    try test__negsi2(-268435455, 268435455);
 62    try test__negsi2(268435455, -268435455);
 63    try test__negsi2(-268435454, 268435454);
 64    try test__negsi2(268435454, -268435454);
 65    try test__negsi2(-268435452, 268435452);
 66    try test__negsi2(268435452, -268435452);
 67    try test__negsi2(-268435448, 268435448);
 68    try test__negsi2(268435448, -268435448);
 69    try test__negsi2(-134217727, 134217727);
 70    try test__negsi2(134217727, -134217727);
 71    try test__negsi2(-134217726, 134217726);
 72    try test__negsi2(134217726, -134217726);
 73    try test__negsi2(-134217724, 134217724);
 74    try test__negsi2(134217724, -134217724);
 75    try test__negsi2(-134217720, 134217720);
 76    try test__negsi2(134217720, -134217720);
 77    try test__negsi2(-67108863, 67108863);
 78    try test__negsi2(67108863, -67108863);
 79    try test__negsi2(-67108862, 67108862);
 80    try test__negsi2(67108862, -67108862);
 81    try test__negsi2(-67108860, 67108860);
 82    try test__negsi2(67108860, -67108860);
 83    try test__negsi2(-67108856, 67108856);
 84    try test__negsi2(67108856, -67108856);
 85    try test__negsi2(-33554431, 33554431);
 86    try test__negsi2(33554431, -33554431);
 87    try test__negsi2(-33554430, 33554430);
 88    try test__negsi2(33554430, -33554430);
 89    try test__negsi2(-33554428, 33554428);
 90    try test__negsi2(33554428, -33554428);
 91    try test__negsi2(-33554424, 33554424);
 92    try test__negsi2(33554424, -33554424);
 93    try test__negsi2(-16777215, 16777215);
 94    try test__negsi2(16777215, -16777215);
 95    try test__negsi2(-16777214, 16777214);
 96    try test__negsi2(16777214, -16777214);
 97    try test__negsi2(-16777212, 16777212);
 98    try test__negsi2(16777212, -16777212);
 99    try test__negsi2(-16777208, 16777208);
100    try test__negsi2(16777208, -16777208);
101    try test__negsi2(-8388607, 8388607);
102    try test__negsi2(8388607, -8388607);
103    try test__negsi2(-8388606, 8388606);
104    try test__negsi2(8388606, -8388606);
105    try test__negsi2(-8388604, 8388604);
106    try test__negsi2(8388604, -8388604);
107    try test__negsi2(-8388600, 8388600);
108    try test__negsi2(8388600, -8388600);
109    try test__negsi2(-4194303, 4194303);
110    try test__negsi2(4194303, -4194303);
111    try test__negsi2(-4194302, 4194302);
112    try test__negsi2(4194302, -4194302);
113    try test__negsi2(-4194300, 4194300);
114    try test__negsi2(4194300, -4194300);
115    try test__negsi2(-4194296, 4194296);
116    try test__negsi2(4194296, -4194296);
117    try test__negsi2(-2097151, 2097151);
118    try test__negsi2(2097151, -2097151);
119    try test__negsi2(-2097150, 2097150);
120    try test__negsi2(2097150, -2097150);
121    try test__negsi2(-2097148, 2097148);
122    try test__negsi2(2097148, -2097148);
123    try test__negsi2(-2097144, 2097144);
124    try test__negsi2(2097144, -2097144);
125    try test__negsi2(-1048575, 1048575);
126    try test__negsi2(1048575, -1048575);
127    try test__negsi2(-1048574, 1048574);
128    try test__negsi2(1048574, -1048574);
129    try test__negsi2(-1048572, 1048572);
130    try test__negsi2(1048572, -1048572);
131    try test__negsi2(-1048568, 1048568);
132    try test__negsi2(1048568, -1048568);
133    try test__negsi2(-524287, 524287);
134    try test__negsi2(524287, -524287);
135    try test__negsi2(-524286, 524286);
136    try test__negsi2(524286, -524286);
137    try test__negsi2(-524284, 524284);
138    try test__negsi2(524284, -524284);
139    try test__negsi2(-524280, 524280);
140    try test__negsi2(524280, -524280);
141    try test__negsi2(-262143, 262143);
142    try test__negsi2(262143, -262143);
143    try test__negsi2(-262142, 262142);
144    try test__negsi2(262142, -262142);
145    try test__negsi2(-262140, 262140);
146    try test__negsi2(262140, -262140);
147    try test__negsi2(-262136, 262136);
148    try test__negsi2(262136, -262136);
149    try test__negsi2(-131071, 131071);
150    try test__negsi2(131071, -131071);
151    try test__negsi2(-131070, 131070);
152    try test__negsi2(131070, -131070);
153    try test__negsi2(-131068, 131068);
154    try test__negsi2(131068, -131068);
155    try test__negsi2(-131064, 131064);
156    try test__negsi2(131064, -131064);
157    try test__negsi2(-65535, 65535);
158    try test__negsi2(65535, -65535);
159    try test__negsi2(-65534, 65534);
160    try test__negsi2(65534, -65534);
161    try test__negsi2(-65532, 65532);
162    try test__negsi2(65532, -65532);
163    try test__negsi2(-65528, 65528);
164    try test__negsi2(65528, -65528);
165    try test__negsi2(-32767, 32767);
166    try test__negsi2(32767, -32767);
167    try test__negsi2(-32766, 32766);
168    try test__negsi2(32766, -32766);
169    try test__negsi2(-32764, 32764);
170    try test__negsi2(32764, -32764);
171    try test__negsi2(-32760, 32760);
172    try test__negsi2(32760, -32760);
173    try test__negsi2(-16383, 16383);
174    try test__negsi2(16383, -16383);
175    try test__negsi2(-16382, 16382);
176    try test__negsi2(16382, -16382);
177    try test__negsi2(-16380, 16380);
178    try test__negsi2(16380, -16380);
179    try test__negsi2(-16376, 16376);
180    try test__negsi2(16376, -16376);
181    try test__negsi2(-8191, 8191);
182    try test__negsi2(8191, -8191);
183    try test__negsi2(-8190, 8190);
184    try test__negsi2(8190, -8190);
185    try test__negsi2(-8188, 8188);
186    try test__negsi2(8188, -8188);
187    try test__negsi2(-8184, 8184);
188    try test__negsi2(8184, -8184);
189    try test__negsi2(-4095, 4095);
190    try test__negsi2(4095, -4095);
191    try test__negsi2(-4094, 4094);
192    try test__negsi2(4094, -4094);
193    try test__negsi2(-4092, 4092);
194    try test__negsi2(4092, -4092);
195    try test__negsi2(-4088, 4088);
196    try test__negsi2(4088, -4088);
197    try test__negsi2(-2047, 2047);
198    try test__negsi2(2047, -2047);
199    try test__negsi2(-2046, 2046);
200    try test__negsi2(2046, -2046);
201    try test__negsi2(-2044, 2044);
202    try test__negsi2(2044, -2044);
203    try test__negsi2(-2040, 2040);
204    try test__negsi2(2040, -2040);
205    try test__negsi2(-1023, 1023);
206    try test__negsi2(1023, -1023);
207    try test__negsi2(-1022, 1022);
208    try test__negsi2(1022, -1022);
209    try test__negsi2(-1020, 1020);
210    try test__negsi2(1020, -1020);
211    try test__negsi2(-1016, 1016);
212    try test__negsi2(1016, -1016);
213    try test__negsi2(-511, 511);
214    try test__negsi2(511, -511);
215    try test__negsi2(-510, 510);
216    try test__negsi2(510, -510);
217    try test__negsi2(-508, 508);
218    try test__negsi2(508, -508);
219    try test__negsi2(-504, 504);
220    try test__negsi2(504, -504);
221    try test__negsi2(-255, 255);
222    try test__negsi2(255, -255);
223    try test__negsi2(-254, 254);
224    try test__negsi2(254, -254);
225    try test__negsi2(-252, 252);
226    try test__negsi2(252, -252);
227    try test__negsi2(-248, 248);
228    try test__negsi2(248, -248);
229    try test__negsi2(-127, 127);
230    try test__negsi2(127, -127);
231    try test__negsi2(-126, 126);
232    try test__negsi2(126, -126);
233    try test__negsi2(-124, 124);
234    try test__negsi2(124, -124);
235    try test__negsi2(-120, 120);
236    try test__negsi2(120, -120);
237    try test__negsi2(-63, 63);
238    try test__negsi2(63, -63);
239    try test__negsi2(-62, 62);
240    try test__negsi2(62, -62);
241    try test__negsi2(-60, 60);
242    try test__negsi2(60, -60);
243    try test__negsi2(-56, 56);
244    try test__negsi2(56, -56);
245    try test__negsi2(-31, 31);
246    try test__negsi2(31, -31);
247    try test__negsi2(-30, 30);
248    try test__negsi2(30, -30);
249    try test__negsi2(-28, 28);
250    try test__negsi2(28, -28);
251    try test__negsi2(-24, 24);
252    try test__negsi2(24, -24);
253    try test__negsi2(-15, 15);
254    try test__negsi2(15, -15);
255    try test__negsi2(-14, 14);
256    try test__negsi2(14, -14);
257    try test__negsi2(-12, 12);
258    try test__negsi2(12, -12);
259    try test__negsi2(-8, 8);
260    try test__negsi2(8, -8);
261}