master
  1// ported from https://github.com/llvm-mirror/compiler-rt/blob/release_80/test/builtins/Unit/
  2// powisf2_test.c, powidf2_test.c, powitf2_test.c, powixf2_test.c
  3// powihf2 adapted from powisf2 tests
  4
  5const powiXf2 = @import("powiXf2.zig");
  6const std = @import("std");
  7const builtin = @import("builtin");
  8const testing = std.testing;
  9const math = std.math;
 10
 11fn test__powihf2(a: f16, b: i32, expected: f16) !void {
 12    const result = powiXf2.__powihf2(a, b);
 13    try testing.expectEqual(expected, result);
 14}
 15
 16fn test__powisf2(a: f32, b: i32, expected: f32) !void {
 17    const result = powiXf2.__powisf2(a, b);
 18    try testing.expectEqual(expected, result);
 19}
 20
 21fn test__powidf2(a: f64, b: i32, expected: f64) !void {
 22    const result = powiXf2.__powidf2(a, b);
 23    try testing.expectEqual(expected, result);
 24}
 25
 26fn test__powitf2(a: f128, b: i32, expected: f128) !void {
 27    const result = powiXf2.__powitf2(a, b);
 28    try testing.expectEqual(expected, result);
 29}
 30
 31fn test__powixf2(a: f80, b: i32, expected: f80) !void {
 32    const result = powiXf2.__powixf2(a, b);
 33    try testing.expectEqual(expected, result);
 34}
 35
 36test "powihf2" {
 37    const inf_f16 = math.inf(f16);
 38    try test__powisf2(0, 0, 1);
 39    try test__powihf2(1, 0, 1);
 40    try test__powihf2(1.5, 0, 1);
 41    try test__powihf2(2, 0, 1);
 42    try test__powihf2(inf_f16, 0, 1);
 43
 44    try test__powihf2(-0.0, 0, 1);
 45    try test__powihf2(-1, 0, 1);
 46    try test__powihf2(-1.5, 0, 1);
 47    try test__powihf2(-2, 0, 1);
 48    try test__powihf2(-inf_f16, 0, 1);
 49
 50    try test__powihf2(0, 1, 0);
 51    try test__powihf2(0, 2, 0);
 52    try test__powihf2(0, 3, 0);
 53    try test__powihf2(0, 4, 0);
 54    try test__powihf2(0, @as(i32, @bitCast(@as(u32, 0x7FFFFFFE))), 0);
 55    try test__powihf2(0, @as(i32, @bitCast(@as(u32, 0x7FFFFFFF))), 0);
 56
 57    try test__powihf2(-0.0, 1, -0.0);
 58    try test__powihf2(-0.0, 2, 0);
 59    try test__powihf2(-0.0, 3, -0.0);
 60    try test__powihf2(-0.0, 4, 0);
 61    try test__powihf2(-0.0, @as(i32, @bitCast(@as(u32, 0x7FFFFFFE))), 0);
 62    try test__powihf2(-0.0, @as(i32, @bitCast(@as(u32, 0x7FFFFFFF))), -0.0);
 63
 64    try test__powihf2(1, 1, 1);
 65    try test__powihf2(1, 2, 1);
 66    try test__powihf2(1, 3, 1);
 67    try test__powihf2(1, 4, 1);
 68    try test__powihf2(1, @as(i32, @bitCast(@as(u32, 0x7FFFFFFE))), 1);
 69    try test__powihf2(1, @as(i32, @bitCast(@as(u32, 0x7FFFFFFF))), 1);
 70
 71    try test__powihf2(inf_f16, 1, inf_f16);
 72    try test__powihf2(inf_f16, 2, inf_f16);
 73    try test__powihf2(inf_f16, 3, inf_f16);
 74    try test__powihf2(inf_f16, 4, inf_f16);
 75    try test__powihf2(inf_f16, @as(i32, @bitCast(@as(u32, 0x7FFFFFFE))), inf_f16);
 76    try test__powihf2(inf_f16, @as(i32, @bitCast(@as(u32, 0x7FFFFFFF))), inf_f16);
 77
 78    try test__powihf2(-inf_f16, 1, -inf_f16);
 79    try test__powihf2(-inf_f16, 2, inf_f16);
 80    try test__powihf2(-inf_f16, 3, -inf_f16);
 81    try test__powihf2(-inf_f16, 4, inf_f16);
 82    try test__powihf2(-inf_f16, @as(i32, @bitCast(@as(u32, 0x7FFFFFFE))), inf_f16);
 83    try test__powihf2(-inf_f16, @as(i32, @bitCast(@as(u32, 0x7FFFFFFF))), -inf_f16);
 84    //
 85    try test__powihf2(0, -1, inf_f16);
 86    try test__powihf2(0, -2, inf_f16);
 87    try test__powihf2(0, -3, inf_f16);
 88    try test__powihf2(0, -4, inf_f16);
 89    try test__powihf2(0, @as(i32, @bitCast(@as(u32, 0x80000002))), inf_f16); // 0 ^ anything = +inf
 90    try test__powihf2(0, @as(i32, @bitCast(@as(u32, 0x80000001))), inf_f16);
 91    try test__powihf2(0, @as(i32, @bitCast(@as(u32, 0x80000000))), inf_f16);
 92
 93    try test__powihf2(-0.0, -1, -inf_f16);
 94    try test__powihf2(-0.0, -2, inf_f16);
 95    try test__powihf2(-0.0, -3, -inf_f16);
 96    try test__powihf2(-0.0, -4, inf_f16);
 97    try test__powihf2(-0.0, @as(i32, @bitCast(@as(u32, 0x80000002))), inf_f16); // -0 ^ anything even = +inf
 98    try test__powihf2(-0.0, @as(i32, @bitCast(@as(u32, 0x80000001))), -inf_f16); // -0 ^ anything odd = -inf
 99    try test__powihf2(-0.0, @as(i32, @bitCast(@as(u32, 0x80000000))), inf_f16);
100
101    try test__powihf2(1, -1, 1);
102    try test__powihf2(1, -2, 1);
103    try test__powihf2(1, -3, 1);
104    try test__powihf2(1, -4, 1);
105    try test__powihf2(1, @as(i32, @bitCast(@as(u32, 0x80000002))), 1); // 1.0 ^ anything = 1
106    try test__powihf2(1, @as(i32, @bitCast(@as(u32, 0x80000001))), 1);
107    try test__powihf2(1, @as(i32, @bitCast(@as(u32, 0x80000000))), 1);
108
109    try test__powihf2(inf_f16, -1, 0);
110    try test__powihf2(inf_f16, -2, 0);
111    try test__powihf2(inf_f16, -3, 0);
112    try test__powihf2(inf_f16, -4, 0);
113    try test__powihf2(inf_f16, @as(i32, @bitCast(@as(u32, 0x80000002))), 0);
114    try test__powihf2(inf_f16, @as(i32, @bitCast(@as(u32, 0x80000001))), 0);
115    try test__powihf2(inf_f16, @as(i32, @bitCast(@as(u32, 0x80000000))), 0);
116    //
117    try test__powihf2(-inf_f16, -1, -0.0);
118    try test__powihf2(-inf_f16, -2, 0);
119    try test__powihf2(-inf_f16, -3, -0.0);
120    try test__powihf2(-inf_f16, -4, 0);
121    try test__powihf2(-inf_f16, @as(i32, @bitCast(@as(u32, 0x80000002))), 0);
122    try test__powihf2(-inf_f16, @as(i32, @bitCast(@as(u32, 0x80000001))), -0.0);
123    try test__powihf2(-inf_f16, @as(i32, @bitCast(@as(u32, 0x80000000))), 0);
124
125    try test__powihf2(2, 10, 1024.0);
126    try test__powihf2(-2, 10, 1024.0);
127    try test__powihf2(2, -10, 1.0 / 1024.0);
128    try test__powihf2(-2, -10, 1.0 / 1024.0);
129
130    try test__powihf2(2, 14, 16384.0);
131    try test__powihf2(-2, 14, 16384.0);
132    try test__powihf2(2, 15, 32768.0);
133    try test__powihf2(-2, 15, -32768.0);
134    try test__powihf2(2, 16, inf_f16);
135    try test__powihf2(-2, 16, inf_f16);
136
137    try test__powihf2(2, -13, 1.0 / 8192.0);
138    try test__powihf2(-2, -13, -1.0 / 8192.0);
139    try test__powihf2(2, -15, 1.0 / 32768.0);
140    try test__powihf2(-2, -15, -1.0 / 32768.0);
141    try test__powihf2(2, -16, 0.0); // expected = 0.0 = 1/(-2**16)
142    try test__powihf2(-2, -16, 0.0); // expected = 0.0 = 1/(2**16)
143}
144
145test "powisf2" {
146    const inf_f32 = math.inf(f32);
147    try test__powisf2(0, 0, 1);
148    try test__powisf2(1, 0, 1);
149    try test__powisf2(1.5, 0, 1);
150    try test__powisf2(2, 0, 1);
151    try test__powisf2(inf_f32, 0, 1);
152
153    try test__powisf2(-0.0, 0, 1);
154    try test__powisf2(-1, 0, 1);
155    try test__powisf2(-1.5, 0, 1);
156    try test__powisf2(-2, 0, 1);
157    try test__powisf2(-inf_f32, 0, 1);
158
159    try test__powisf2(0, 1, 0);
160    try test__powisf2(0, 2, 0);
161    try test__powisf2(0, 3, 0);
162    try test__powisf2(0, 4, 0);
163    try test__powisf2(0, @as(i32, @bitCast(@as(u32, 0x7FFFFFFE))), 0);
164    try test__powisf2(0, @as(i32, @bitCast(@as(u32, 0x7FFFFFFF))), 0);
165
166    try test__powisf2(-0.0, 1, -0.0);
167    try test__powisf2(-0.0, 2, 0);
168    try test__powisf2(-0.0, 3, -0.0);
169    try test__powisf2(-0.0, 4, 0);
170    try test__powisf2(-0.0, @as(i32, @bitCast(@as(u32, 0x7FFFFFFE))), 0);
171    try test__powisf2(-0.0, @as(i32, @bitCast(@as(u32, 0x7FFFFFFF))), -0.0);
172
173    try test__powisf2(1, 1, 1);
174    try test__powisf2(1, 2, 1);
175    try test__powisf2(1, 3, 1);
176    try test__powisf2(1, 4, 1);
177    try test__powisf2(1, @as(i32, @bitCast(@as(u32, 0x7FFFFFFE))), 1);
178    try test__powisf2(1, @as(i32, @bitCast(@as(u32, 0x7FFFFFFF))), 1);
179
180    try test__powisf2(inf_f32, 1, inf_f32);
181    try test__powisf2(inf_f32, 2, inf_f32);
182    try test__powisf2(inf_f32, 3, inf_f32);
183    try test__powisf2(inf_f32, 4, inf_f32);
184    try test__powisf2(inf_f32, @as(i32, @bitCast(@as(u32, 0x7FFFFFFE))), inf_f32);
185    try test__powisf2(inf_f32, @as(i32, @bitCast(@as(u32, 0x7FFFFFFF))), inf_f32);
186
187    try test__powisf2(-inf_f32, 1, -inf_f32);
188    try test__powisf2(-inf_f32, 2, inf_f32);
189    try test__powisf2(-inf_f32, 3, -inf_f32);
190    try test__powisf2(-inf_f32, 4, inf_f32);
191    try test__powisf2(-inf_f32, @as(i32, @bitCast(@as(u32, 0x7FFFFFFE))), inf_f32);
192    try test__powisf2(-inf_f32, @as(i32, @bitCast(@as(u32, 0x7FFFFFFF))), -inf_f32);
193
194    try test__powisf2(0, -1, inf_f32);
195    try test__powisf2(0, -2, inf_f32);
196    try test__powisf2(0, -3, inf_f32);
197    try test__powisf2(0, -4, inf_f32);
198    try test__powisf2(0, @as(i32, @bitCast(@as(u32, 0x80000002))), inf_f32);
199    try test__powisf2(0, @as(i32, @bitCast(@as(u32, 0x80000001))), inf_f32);
200    try test__powisf2(0, @as(i32, @bitCast(@as(u32, 0x80000000))), inf_f32);
201
202    try test__powisf2(-0.0, -1, -inf_f32);
203    try test__powisf2(-0.0, -2, inf_f32);
204    try test__powisf2(-0.0, -3, -inf_f32);
205    try test__powisf2(-0.0, -4, inf_f32);
206    try test__powisf2(-0.0, @as(i32, @bitCast(@as(u32, 0x80000002))), inf_f32);
207    try test__powisf2(-0.0, @as(i32, @bitCast(@as(u32, 0x80000001))), -inf_f32);
208    try test__powisf2(-0.0, @as(i32, @bitCast(@as(u32, 0x80000000))), inf_f32);
209
210    try test__powisf2(1, -1, 1);
211    try test__powisf2(1, -2, 1);
212    try test__powisf2(1, -3, 1);
213    try test__powisf2(1, -4, 1);
214    try test__powisf2(1, @as(i32, @bitCast(@as(u32, 0x80000002))), 1);
215    try test__powisf2(1, @as(i32, @bitCast(@as(u32, 0x80000001))), 1);
216    try test__powisf2(1, @as(i32, @bitCast(@as(u32, 0x80000000))), 1);
217
218    try test__powisf2(inf_f32, -1, 0);
219    try test__powisf2(inf_f32, -2, 0);
220    try test__powisf2(inf_f32, -3, 0);
221    try test__powisf2(inf_f32, -4, 0);
222    try test__powisf2(inf_f32, @as(i32, @bitCast(@as(u32, 0x80000002))), 0);
223    try test__powisf2(inf_f32, @as(i32, @bitCast(@as(u32, 0x80000001))), 0);
224    try test__powisf2(inf_f32, @as(i32, @bitCast(@as(u32, 0x80000000))), 0);
225
226    try test__powisf2(-inf_f32, -1, -0.0);
227    try test__powisf2(-inf_f32, -2, 0);
228    try test__powisf2(-inf_f32, -3, -0.0);
229    try test__powisf2(-inf_f32, -4, 0);
230    try test__powisf2(-inf_f32, @as(i32, @bitCast(@as(u32, 0x80000002))), 0);
231    try test__powisf2(-inf_f32, @as(i32, @bitCast(@as(u32, 0x80000001))), -0.0);
232    try test__powisf2(-inf_f32, @as(i32, @bitCast(@as(u32, 0x80000000))), 0);
233
234    try test__powisf2(2.0, 10, 1024.0);
235    try test__powisf2(-2, 10, 1024.0);
236    try test__powisf2(2, -10, 1.0 / 1024.0);
237    try test__powisf2(-2, -10, 1.0 / 1024.0);
238    //
239    try test__powisf2(2, 19, 524288.0);
240    try test__powisf2(-2, 19, -524288.0);
241    try test__powisf2(2, -19, 1.0 / 524288.0);
242    try test__powisf2(-2, -19, -1.0 / 524288.0);
243
244    try test__powisf2(2, 31, 2147483648.0);
245    try test__powisf2(-2, 31, -2147483648.0);
246    try test__powisf2(2, -31, 1.0 / 2147483648.0);
247    try test__powisf2(-2, -31, -1.0 / 2147483648.0);
248}
249
250test "powidf2" {
251    const inf_f64 = math.inf(f64);
252    try test__powidf2(0, 0, 1);
253    try test__powidf2(1, 0, 1);
254    try test__powidf2(1.5, 0, 1);
255    try test__powidf2(2, 0, 1);
256    try test__powidf2(inf_f64, 0, 1);
257
258    try test__powidf2(-0.0, 0, 1);
259    try test__powidf2(-1, 0, 1);
260    try test__powidf2(-1.5, 0, 1);
261    try test__powidf2(-2, 0, 1);
262    try test__powidf2(-inf_f64, 0, 1);
263
264    try test__powidf2(0, 1, 0);
265    try test__powidf2(0, 2, 0);
266    try test__powidf2(0, 3, 0);
267    try test__powidf2(0, 4, 0);
268    try test__powidf2(0, @as(i32, @bitCast(@as(u32, 0x7FFFFFFE))), 0);
269    try test__powidf2(0, @as(i32, @bitCast(@as(u32, 0x7FFFFFFF))), 0);
270
271    try test__powidf2(-0.0, 1, -0.0);
272    try test__powidf2(-0.0, 2, 0);
273    try test__powidf2(-0.0, 3, -0.0);
274    try test__powidf2(-0.0, 4, 0);
275    try test__powidf2(-0.0, @as(i32, @bitCast(@as(u32, 0x7FFFFFFE))), 0);
276    try test__powidf2(-0.0, @as(i32, @bitCast(@as(u32, 0x7FFFFFFF))), -0.0);
277
278    try test__powidf2(1, 1, 1);
279    try test__powidf2(1, 2, 1);
280    try test__powidf2(1, 3, 1);
281    try test__powidf2(1, 4, 1);
282    try test__powidf2(1, @as(i32, @bitCast(@as(u32, 0x7FFFFFFE))), 1);
283    try test__powidf2(1, @as(i32, @bitCast(@as(u32, 0x7FFFFFFF))), 1);
284
285    try test__powidf2(inf_f64, 1, inf_f64);
286    try test__powidf2(inf_f64, 2, inf_f64);
287    try test__powidf2(inf_f64, 3, inf_f64);
288    try test__powidf2(inf_f64, 4, inf_f64);
289    try test__powidf2(inf_f64, @as(i32, @bitCast(@as(u32, 0x7FFFFFFE))), inf_f64);
290    try test__powidf2(inf_f64, @as(i32, @bitCast(@as(u32, 0x7FFFFFFF))), inf_f64);
291
292    try test__powidf2(-inf_f64, 1, -inf_f64);
293    try test__powidf2(-inf_f64, 2, inf_f64);
294    try test__powidf2(-inf_f64, 3, -inf_f64);
295    try test__powidf2(-inf_f64, 4, inf_f64);
296    try test__powidf2(-inf_f64, @as(i32, @bitCast(@as(u32, 0x7FFFFFFE))), inf_f64);
297    try test__powidf2(-inf_f64, @as(i32, @bitCast(@as(u32, 0x7FFFFFFF))), -inf_f64);
298
299    try test__powidf2(0, -1, inf_f64);
300    try test__powidf2(0, -2, inf_f64);
301    try test__powidf2(0, -3, inf_f64);
302    try test__powidf2(0, -4, inf_f64);
303    try test__powidf2(0, @as(i32, @bitCast(@as(u32, 0x80000002))), inf_f64);
304    try test__powidf2(0, @as(i32, @bitCast(@as(u32, 0x80000001))), inf_f64);
305    try test__powidf2(0, @as(i32, @bitCast(@as(u32, 0x80000000))), inf_f64);
306
307    try test__powidf2(-0.0, -1, -inf_f64);
308    try test__powidf2(-0.0, -2, inf_f64);
309    try test__powidf2(-0.0, -3, -inf_f64);
310    try test__powidf2(-0.0, -4, inf_f64);
311    try test__powidf2(-0.0, @as(i32, @bitCast(@as(u32, 0x80000002))), inf_f64);
312    try test__powidf2(-0.0, @as(i32, @bitCast(@as(u32, 0x80000001))), -inf_f64);
313    try test__powidf2(-0.0, @as(i32, @bitCast(@as(u32, 0x80000000))), inf_f64);
314
315    try test__powidf2(1, -1, 1);
316    try test__powidf2(1, -2, 1);
317    try test__powidf2(1, -3, 1);
318    try test__powidf2(1, -4, 1);
319    try test__powidf2(1, @as(i32, @bitCast(@as(u32, 0x80000002))), 1);
320    try test__powidf2(1, @as(i32, @bitCast(@as(u32, 0x80000001))), 1);
321    try test__powidf2(1, @as(i32, @bitCast(@as(u32, 0x80000000))), 1);
322
323    try test__powidf2(inf_f64, -1, 0);
324    try test__powidf2(inf_f64, -2, 0);
325    try test__powidf2(inf_f64, -3, 0);
326    try test__powidf2(inf_f64, -4, 0);
327    try test__powidf2(inf_f64, @as(i32, @bitCast(@as(u32, 0x80000002))), 0);
328    try test__powidf2(inf_f64, @as(i32, @bitCast(@as(u32, 0x80000001))), 0);
329    try test__powidf2(inf_f64, @as(i32, @bitCast(@as(u32, 0x80000000))), 0);
330
331    try test__powidf2(-inf_f64, -1, -0.0);
332    try test__powidf2(-inf_f64, -2, 0);
333    try test__powidf2(-inf_f64, -3, -0.0);
334    try test__powidf2(-inf_f64, -4, 0);
335    try test__powidf2(-inf_f64, @as(i32, @bitCast(@as(u32, 0x80000002))), 0);
336    try test__powidf2(-inf_f64, @as(i32, @bitCast(@as(u32, 0x80000001))), -0.0);
337    try test__powidf2(-inf_f64, @as(i32, @bitCast(@as(u32, 0x80000000))), 0);
338
339    try test__powidf2(2, 10, 1024.0);
340    try test__powidf2(-2, 10, 1024.0);
341    try test__powidf2(2, -10, 1.0 / 1024.0);
342    try test__powidf2(-2, -10, 1.0 / 1024.0);
343
344    try test__powidf2(2, 19, 524288.0);
345    try test__powidf2(-2, 19, -524288.0);
346    try test__powidf2(2, -19, 1.0 / 524288.0);
347    try test__powidf2(-2, -19, -1.0 / 524288.0);
348
349    try test__powidf2(2, 31, 2147483648.0);
350    try test__powidf2(-2, 31, -2147483648.0);
351    try test__powidf2(2, -31, 1.0 / 2147483648.0);
352    try test__powidf2(-2, -31, -1.0 / 2147483648.0);
353}
354
355test "powitf2" {
356    const inf_f128 = math.inf(f128);
357    try test__powitf2(0, 0, 1);
358    try test__powitf2(1, 0, 1);
359    try test__powitf2(1.5, 0, 1);
360    try test__powitf2(2, 0, 1);
361    try test__powitf2(inf_f128, 0, 1);
362
363    try test__powitf2(-0.0, 0, 1);
364    try test__powitf2(-1, 0, 1);
365    try test__powitf2(-1.5, 0, 1);
366    try test__powitf2(-2, 0, 1);
367    try test__powitf2(-inf_f128, 0, 1);
368
369    try test__powitf2(0, 1, 0);
370    try test__powitf2(0, 2, 0);
371    try test__powitf2(0, 3, 0);
372    try test__powitf2(0, 4, 0);
373    try test__powitf2(0, @as(i32, @bitCast(@as(u32, 0x7FFFFFFE))), 0);
374    try test__powitf2(0, 0x7FFFFFFF, 0);
375
376    try test__powitf2(-0.0, 1, -0.0);
377    try test__powitf2(-0.0, 2, 0);
378    try test__powitf2(-0.0, 3, -0.0);
379    try test__powitf2(-0.0, 4, 0);
380    try test__powitf2(-0.0, @as(i32, @bitCast(@as(u32, 0x7FFFFFFE))), 0);
381    try test__powitf2(-0.0, @as(i32, @bitCast(@as(u32, 0x7FFFFFFF))), -0.0);
382
383    try test__powitf2(1, 1, 1);
384    try test__powitf2(1, 2, 1);
385    try test__powitf2(1, 3, 1);
386    try test__powitf2(1, 4, 1);
387    try test__powitf2(1, @as(i32, @bitCast(@as(u32, 0x7FFFFFFE))), 1);
388    try test__powitf2(1, @as(i32, @bitCast(@as(u32, 0x7FFFFFFF))), 1);
389
390    try test__powitf2(inf_f128, 1, inf_f128);
391    try test__powitf2(inf_f128, 2, inf_f128);
392    try test__powitf2(inf_f128, 3, inf_f128);
393    try test__powitf2(inf_f128, 4, inf_f128);
394    try test__powitf2(inf_f128, @as(i32, @bitCast(@as(u32, 0x7FFFFFFE))), inf_f128);
395    try test__powitf2(inf_f128, @as(i32, @bitCast(@as(u32, 0x7FFFFFFF))), inf_f128);
396
397    try test__powitf2(-inf_f128, 1, -inf_f128);
398    try test__powitf2(-inf_f128, 2, inf_f128);
399    try test__powitf2(-inf_f128, 3, -inf_f128);
400    try test__powitf2(-inf_f128, 4, inf_f128);
401    try test__powitf2(-inf_f128, @as(i32, @bitCast(@as(u32, 0x7FFFFFFE))), inf_f128);
402    try test__powitf2(-inf_f128, @as(i32, @bitCast(@as(u32, 0x7FFFFFFF))), -inf_f128);
403
404    try test__powitf2(0, -1, inf_f128);
405    try test__powitf2(0, -2, inf_f128);
406    try test__powitf2(0, -3, inf_f128);
407    try test__powitf2(0, -4, inf_f128);
408    try test__powitf2(0, @as(i32, @bitCast(@as(u32, 0x80000002))), inf_f128);
409    try test__powitf2(0, @as(i32, @bitCast(@as(u32, 0x80000001))), inf_f128);
410    try test__powitf2(0, @as(i32, @bitCast(@as(u32, 0x80000000))), inf_f128);
411
412    try test__powitf2(-0.0, -1, -inf_f128);
413    try test__powitf2(-0.0, -2, inf_f128);
414    try test__powitf2(-0.0, -3, -inf_f128);
415    try test__powitf2(-0.0, -4, inf_f128);
416    try test__powitf2(-0.0, @as(i32, @bitCast(@as(u32, 0x80000002))), inf_f128);
417    try test__powitf2(-0.0, @as(i32, @bitCast(@as(u32, 0x80000001))), -inf_f128);
418    try test__powitf2(-0.0, @as(i32, @bitCast(@as(u32, 0x80000000))), inf_f128);
419
420    try test__powitf2(1, -1, 1);
421    try test__powitf2(1, -2, 1);
422    try test__powitf2(1, -3, 1);
423    try test__powitf2(1, -4, 1);
424    try test__powitf2(1, @as(i32, @bitCast(@as(u32, 0x80000002))), 1);
425    try test__powitf2(1, @as(i32, @bitCast(@as(u32, 0x80000001))), 1);
426    try test__powitf2(1, @as(i32, @bitCast(@as(u32, 0x80000000))), 1);
427
428    try test__powitf2(inf_f128, -1, 0);
429    try test__powitf2(inf_f128, -2, 0);
430    try test__powitf2(inf_f128, -3, 0);
431    try test__powitf2(inf_f128, -4, 0);
432    try test__powitf2(inf_f128, @as(i32, @bitCast(@as(u32, 0x80000002))), 0);
433    try test__powitf2(inf_f128, @as(i32, @bitCast(@as(u32, 0x80000001))), 0);
434    try test__powitf2(inf_f128, @as(i32, @bitCast(@as(u32, 0x80000000))), 0);
435
436    try test__powitf2(-inf_f128, -1, -0.0);
437    try test__powitf2(-inf_f128, -2, 0);
438    try test__powitf2(-inf_f128, -3, -0.0);
439    try test__powitf2(-inf_f128, -4, 0);
440    try test__powitf2(-inf_f128, @as(i32, @bitCast(@as(u32, 0x80000002))), 0);
441    try test__powitf2(-inf_f128, @as(i32, @bitCast(@as(u32, 0x80000001))), -0.0);
442    try test__powitf2(-inf_f128, @as(i32, @bitCast(@as(u32, 0x80000000))), 0);
443
444    try test__powitf2(2, 10, 1024.0);
445    try test__powitf2(-2, 10, 1024.0);
446    try test__powitf2(2, -10, 1.0 / 1024.0);
447    try test__powitf2(-2, -10, 1.0 / 1024.0);
448
449    try test__powitf2(2, 19, 524288.0);
450    try test__powitf2(-2, 19, -524288.0);
451    try test__powitf2(2, -19, 1.0 / 524288.0);
452    try test__powitf2(-2, -19, -1.0 / 524288.0);
453
454    try test__powitf2(2, 31, 2147483648.0);
455    try test__powitf2(-2, 31, -2147483648.0);
456    try test__powitf2(2, -31, 1.0 / 2147483648.0);
457    try test__powitf2(-2, -31, -1.0 / 2147483648.0);
458}
459
460test "powixf2" {
461    const inf_f80 = math.inf(f80);
462    try test__powixf2(0, 0, 1);
463    try test__powixf2(1, 0, 1);
464    try test__powixf2(1.5, 0, 1);
465    try test__powixf2(2, 0, 1);
466    try test__powixf2(inf_f80, 0, 1);
467
468    try test__powixf2(-0.0, 0, 1);
469    try test__powixf2(-1, 0, 1);
470    try test__powixf2(-1.5, 0, 1);
471    try test__powixf2(-2, 0, 1);
472    try test__powixf2(-inf_f80, 0, 1);
473
474    try test__powixf2(0, 1, 0);
475    try test__powixf2(0, 2, 0);
476    try test__powixf2(0, 3, 0);
477    try test__powixf2(0, 4, 0);
478    try test__powixf2(0, @as(i32, @bitCast(@as(u32, 0x7FFFFFFE))), 0);
479    try test__powixf2(0, @as(i32, @bitCast(@as(u32, 0x7FFFFFFF))), 0);
480
481    try test__powixf2(-0.0, 1, -0.0);
482    try test__powixf2(-0.0, 2, 0);
483    try test__powixf2(-0.0, 3, -0.0);
484    try test__powixf2(-0.0, 4, 0);
485    try test__powixf2(-0.0, @as(i32, @bitCast(@as(u32, 0x7FFFFFFE))), 0);
486    try test__powixf2(-0.0, @as(i32, @bitCast(@as(u32, 0x7FFFFFFF))), -0.0);
487
488    try test__powixf2(1, 1, 1);
489    try test__powixf2(1, 2, 1);
490    try test__powixf2(1, 3, 1);
491    try test__powixf2(1, 4, 1);
492    try test__powixf2(1, @as(i32, @bitCast(@as(u32, 0x7FFFFFFE))), 1);
493    try test__powixf2(1, @as(i32, @bitCast(@as(u32, 0x7FFFFFFF))), 1);
494
495    try test__powixf2(inf_f80, 1, inf_f80);
496    try test__powixf2(inf_f80, 2, inf_f80);
497    try test__powixf2(inf_f80, 3, inf_f80);
498    try test__powixf2(inf_f80, 4, inf_f80);
499    try test__powixf2(inf_f80, @as(i32, @bitCast(@as(u32, 0x7FFFFFFE))), inf_f80);
500    try test__powixf2(inf_f80, @as(i32, @bitCast(@as(u32, 0x7FFFFFFF))), inf_f80);
501
502    try test__powixf2(-inf_f80, 1, -inf_f80);
503    try test__powixf2(-inf_f80, 2, inf_f80);
504    try test__powixf2(-inf_f80, 3, -inf_f80);
505    try test__powixf2(-inf_f80, 4, inf_f80);
506    try test__powixf2(-inf_f80, @as(i32, @bitCast(@as(u32, 0x7FFFFFFE))), inf_f80);
507    try test__powixf2(-inf_f80, @as(i32, @bitCast(@as(u32, 0x7FFFFFFF))), -inf_f80);
508
509    try test__powixf2(0, -1, inf_f80);
510    try test__powixf2(0, -2, inf_f80);
511    try test__powixf2(0, -3, inf_f80);
512    try test__powixf2(0, -4, inf_f80);
513    try test__powixf2(0, @as(i32, @bitCast(@as(u32, 0x80000002))), inf_f80);
514    try test__powixf2(0, @as(i32, @bitCast(@as(u32, 0x80000001))), inf_f80);
515    try test__powixf2(0, @as(i32, @bitCast(@as(u32, 0x80000000))), inf_f80);
516
517    try test__powixf2(-0.0, -1, -inf_f80);
518    try test__powixf2(-0.0, -2, inf_f80);
519    try test__powixf2(-0.0, -3, -inf_f80);
520    try test__powixf2(-0.0, -4, inf_f80);
521    try test__powixf2(-0.0, @as(i32, @bitCast(@as(u32, 0x80000002))), inf_f80);
522    try test__powixf2(-0.0, @as(i32, @bitCast(@as(u32, 0x80000001))), -inf_f80);
523    try test__powixf2(-0.0, @as(i32, @bitCast(@as(u32, 0x80000000))), inf_f80);
524
525    try test__powixf2(1, -1, 1);
526    try test__powixf2(1, -2, 1);
527    try test__powixf2(1, -3, 1);
528    try test__powixf2(1, -4, 1);
529    try test__powixf2(1, @as(i32, @bitCast(@as(u32, 0x80000002))), 1);
530    try test__powixf2(1, @as(i32, @bitCast(@as(u32, 0x80000001))), 1);
531    try test__powixf2(1, @as(i32, @bitCast(@as(u32, 0x80000000))), 1);
532
533    try test__powixf2(inf_f80, -1, 0);
534    try test__powixf2(inf_f80, -2, 0);
535    try test__powixf2(inf_f80, -3, 0);
536    try test__powixf2(inf_f80, -4, 0);
537    try test__powixf2(inf_f80, @as(i32, @bitCast(@as(u32, 0x80000002))), 0);
538    try test__powixf2(inf_f80, @as(i32, @bitCast(@as(u32, 0x80000001))), 0);
539    try test__powixf2(inf_f80, @as(i32, @bitCast(@as(u32, 0x80000000))), 0);
540
541    try test__powixf2(-inf_f80, -1, -0.0);
542    try test__powixf2(-inf_f80, -2, 0);
543    try test__powixf2(-inf_f80, -3, -0.0);
544    try test__powixf2(-inf_f80, -4, 0);
545    try test__powixf2(-inf_f80, @as(i32, @bitCast(@as(u32, 0x80000002))), 0);
546    try test__powixf2(-inf_f80, @as(i32, @bitCast(@as(u32, 0x80000001))), -0.0);
547    try test__powixf2(-inf_f80, @as(i32, @bitCast(@as(u32, 0x80000000))), 0);
548
549    try test__powixf2(2, 10, 1024.0);
550    try test__powixf2(-2, 10, 1024.0);
551    try test__powixf2(2, -10, 1.0 / 1024.0);
552    try test__powixf2(-2, -10, 1.0 / 1024.0);
553
554    try test__powixf2(2, 19, 524288.0);
555    try test__powixf2(-2, 19, -524288.0);
556    try test__powixf2(2, -19, 1.0 / 524288.0);
557    try test__powixf2(-2, -19, -1.0 / 524288.0);
558
559    try test__powixf2(2, 31, 2147483648.0);
560    try test__powixf2(-2, 31, -2147483648.0);
561    try test__powixf2(2, -31, 1.0 / 2147483648.0);
562    try test__powixf2(-2, -31, -1.0 / 2147483648.0);
563}