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}