zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

powiXf2_test.zig (23516B) - Raw


      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 
      5 const powiXf2 = @import("powiXf2.zig");
      6 const std = @import("std");
      7 const builtin = @import("builtin");
      8 const testing = std.testing;
      9 const math = std.math;
     10 
     11 fn test__powihf2(a: f16, b: i32, expected: f16) !void {
     12     const result = powiXf2.__powihf2(a, b);
     13     try testing.expectEqual(expected, result);
     14 }
     15 
     16 fn test__powisf2(a: f32, b: i32, expected: f32) !void {
     17     const result = powiXf2.__powisf2(a, b);
     18     try testing.expectEqual(expected, result);
     19 }
     20 
     21 fn test__powidf2(a: f64, b: i32, expected: f64) !void {
     22     const result = powiXf2.__powidf2(a, b);
     23     try testing.expectEqual(expected, result);
     24 }
     25 
     26 fn test__powitf2(a: f128, b: i32, expected: f128) !void {
     27     const result = powiXf2.__powitf2(a, b);
     28     try testing.expectEqual(expected, result);
     29 }
     30 
     31 fn test__powixf2(a: f80, b: i32, expected: f80) !void {
     32     const result = powiXf2.__powixf2(a, b);
     33     try testing.expectEqual(expected, result);
     34 }
     35 
     36 test "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 
    145 test "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 
    250 test "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 
    355 test "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 
    460 test "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 }