| ... | ... | @@ -24,6 +24,8 @@ const __fixdfdi = @import("fixdfdi.zig").__fixdfdi; |
| 24 | 24 | const __fixunsdfdi = @import("fixunsdfdi.zig").__fixunsdfdi; |
| 25 | 25 | const __fixdfti = @import("fixdfti.zig").__fixdfti; |
| 26 | 26 | const __fixunsdfti = @import("fixunsdfti.zig").__fixunsdfti; |
| 27 | const __fixdfei = @import("fixdfei.zig").__fixdfei; |
| 28 | const __fixunsdfei = @import("fixunsdfei.zig").__fixunsdfei; |
| 27 | 29 | |
| 28 | 30 | // Conversion from f128 |
| 29 | 31 | const __fixtfsi = @import("fixtfsi.zig").__fixtfsi; |
| ... | ... | @@ -681,6 +683,44 @@ test "fixunsdfti" { |
| 681 | 683 | try test__fixunsdfti(-0x1.FFFFFFFFFFFFEp+62, 0); |
| 682 | 684 | } |
| 683 | 685 | |
| 686 | fn test_fixdfei(comptime T: type, expected: T, a: f64) !void { |
| 687 | const int = @typeInfo(T).int; |
| 688 | var expected_buf: [@divExact(int.bits, 32)]u32 = undefined; |
| 689 | std.mem.writeInt(T, std.mem.asBytes(&expected_buf), expected, endian); |
| 690 | var actual_buf: [@divExact(int.bits, 32)]u32 = undefined; |
| 691 | _ = switch (int.signedness) { |
| 692 | .signed => __fixdfei, |
| 693 | .unsigned => __fixunsdfei, |
| 694 | }(&actual_buf, int.bits, a); |
| 695 | try testing.expect(std.mem.eql(u32, &expected_buf, &actual_buf)); |
| 696 | } |
| 697 | |
| 698 | test "fixdfei" { |
| 699 | try test_fixdfei(i256, -1 << 255, -0x1p255); |
| 700 | try test_fixdfei(i256, -1 << 127, -0x1p127); |
| 701 | try test_fixdfei(i256, -1 << 100, -0x1p100); |
| 702 | try test_fixdfei(i256, -1 << 50, -0x1p50); |
| 703 | try test_fixdfei(i256, -1 << 1, -0x1p1); |
| 704 | try test_fixdfei(i256, -1 << 0, -0x1p0); |
| 705 | try test_fixdfei(i256, 0, 0); |
| 706 | try test_fixdfei(i256, 1 << 0, 0x1p0); |
| 707 | try test_fixdfei(i256, 1 << 1, 0x1p1); |
| 708 | try test_fixdfei(i256, 1 << 50, 0x1p50); |
| 709 | try test_fixdfei(i256, 1 << 100, 0x1p100); |
| 710 | try test_fixdfei(i256, 1 << 127, 0x1p127); |
| 711 | try test_fixdfei(i256, 1 << 254, 0x1p254); |
| 712 | } |
| 713 | |
| 714 | test "fixundfei" { |
| 715 | try test_fixdfei(u256, 0, 0); |
| 716 | try test_fixdfei(u256, 1 << 0, 0x1p0); |
| 717 | try test_fixdfei(u256, 1 << 1, 0x1p1); |
| 718 | try test_fixdfei(u256, 1 << 50, 0x1p50); |
| 719 | try test_fixdfei(u256, 1 << 100, 0x1p100); |
| 720 | try test_fixdfei(u256, 1 << 127, 0x1p127); |
| 721 | try test_fixdfei(u256, 1 << 255, 0x1p255); |
| 722 | } |
| 723 | |
| 684 | 724 | fn test__fixtfsi(a: f128, expected: i32) !void { |
| 685 | 725 | const x = __fixtfsi(a); |
| 686 | 726 | try testing.expect(x == expected); |