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