zig

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

blob 14a7d1cd (3626B) - Raw


      1 const std = @import("std");
      2 const expect = std.testing.expect;
      3 const minInt = std.math.minInt;
      4 
      5 test "@bitReverse" {
      6     comptime try testBitReverse();
      7     try testBitReverse();
      8 }
      9 
     10 fn testBitReverse() !void {
     11     // using comptime_ints, unsigned
     12     try expect(@bitReverse(u0, 0) == 0);
     13     try expect(@bitReverse(u5, 0x12) == 0x9);
     14     try expect(@bitReverse(u8, 0x12) == 0x48);
     15     try expect(@bitReverse(u16, 0x1234) == 0x2c48);
     16     try expect(@bitReverse(u24, 0x123456) == 0x6a2c48);
     17     try expect(@bitReverse(u32, 0x12345678) == 0x1e6a2c48);
     18     try expect(@bitReverse(u40, 0x123456789a) == 0x591e6a2c48);
     19     try expect(@bitReverse(u48, 0x123456789abc) == 0x3d591e6a2c48);
     20     try expect(@bitReverse(u56, 0x123456789abcde) == 0x7b3d591e6a2c48);
     21     try expect(@bitReverse(u64, 0x123456789abcdef1) == 0x8f7b3d591e6a2c48);
     22     try expect(@bitReverse(u128, 0x123456789abcdef11121314151617181) == 0x818e868a828c84888f7b3d591e6a2c48);
     23 
     24     // using runtime uints, unsigned
     25     var num0: u0 = 0;
     26     try expect(@bitReverse(u0, num0) == 0);
     27     var num5: u5 = 0x12;
     28     try expect(@bitReverse(u5, num5) == 0x9);
     29     var num8: u8 = 0x12;
     30     try expect(@bitReverse(u8, num8) == 0x48);
     31     var num16: u16 = 0x1234;
     32     try expect(@bitReverse(u16, num16) == 0x2c48);
     33     var num24: u24 = 0x123456;
     34     try expect(@bitReverse(u24, num24) == 0x6a2c48);
     35     var num32: u32 = 0x12345678;
     36     try expect(@bitReverse(u32, num32) == 0x1e6a2c48);
     37     var num40: u40 = 0x123456789a;
     38     try expect(@bitReverse(u40, num40) == 0x591e6a2c48);
     39     var num48: u48 = 0x123456789abc;
     40     try expect(@bitReverse(u48, num48) == 0x3d591e6a2c48);
     41     var num56: u56 = 0x123456789abcde;
     42     try expect(@bitReverse(u56, num56) == 0x7b3d591e6a2c48);
     43     var num64: u64 = 0x123456789abcdef1;
     44     try expect(@bitReverse(u64, num64) == 0x8f7b3d591e6a2c48);
     45     var num128: u128 = 0x123456789abcdef11121314151617181;
     46     try expect(@bitReverse(u128, num128) == 0x818e868a828c84888f7b3d591e6a2c48);
     47 
     48     // using comptime_ints, signed, positive
     49     try expect(@bitReverse(u8, @as(u8, 0)) == 0);
     50     try expect(@bitReverse(i8, @bitCast(i8, @as(u8, 0x92))) == @bitCast(i8, @as(u8, 0x49)));
     51     try expect(@bitReverse(i16, @bitCast(i16, @as(u16, 0x1234))) == @bitCast(i16, @as(u16, 0x2c48)));
     52     try expect(@bitReverse(i24, @bitCast(i24, @as(u24, 0x123456))) == @bitCast(i24, @as(u24, 0x6a2c48)));
     53     try expect(@bitReverse(i32, @bitCast(i32, @as(u32, 0x12345678))) == @bitCast(i32, @as(u32, 0x1e6a2c48)));
     54     try expect(@bitReverse(i40, @bitCast(i40, @as(u40, 0x123456789a))) == @bitCast(i40, @as(u40, 0x591e6a2c48)));
     55     try expect(@bitReverse(i48, @bitCast(i48, @as(u48, 0x123456789abc))) == @bitCast(i48, @as(u48, 0x3d591e6a2c48)));
     56     try expect(@bitReverse(i56, @bitCast(i56, @as(u56, 0x123456789abcde))) == @bitCast(i56, @as(u56, 0x7b3d591e6a2c48)));
     57     try expect(@bitReverse(i64, @bitCast(i64, @as(u64, 0x123456789abcdef1))) == @bitCast(i64, @as(u64, 0x8f7b3d591e6a2c48)));
     58     try expect(@bitReverse(i128, @bitCast(i128, @as(u128, 0x123456789abcdef11121314151617181))) == @bitCast(i128, @as(u128, 0x818e868a828c84888f7b3d591e6a2c48)));
     59 
     60     // using signed, negative. Compare to runtime ints returned from llvm.
     61     var neg8: i8 = -18;
     62     try expect(@bitReverse(i8, @as(i8, -18)) == @bitReverse(i8, neg8));
     63     var neg16: i16 = -32694;
     64     try expect(@bitReverse(i16, @as(i16, -32694)) == @bitReverse(i16, neg16));
     65     var neg24: i24 = -6773785;
     66     try expect(@bitReverse(i24, @as(i24, -6773785)) == @bitReverse(i24, neg24));
     67     var neg32: i32 = -16773785;
     68     try expect(@bitReverse(i32, @as(i32, -16773785)) == @bitReverse(i32, neg32));
     69 }