| ... | ... | @@ -1657,6 +1657,85 @@ test "@byteSwap > 128 bits" { |
| 1657 | 1657 | try testByteSwap(i256, 1 << 120, 1 << 128); |
| 1658 | 1658 | } |
| 1659 | 1659 | |
| 1660 | fn testMax(comptime T: type, a: T, b: T, expected: T) !void { |
| 1661 | try expect(@max(a, b) == expected); |
| 1662 | } |
| 1663 | |
| 1664 | test "@max > 128 bits" { |
| 1665 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 1666 | |
| 1667 | try testMax(u140, 0, maxInt(u140), maxInt(u140)); |
| 1668 | try testMax(u140, 1 << 139, 1 << 138, 1 << 139); |
| 1669 | try testMax(u140, (1 << 100) + 7, (1 << 100) + 3, (1 << 100) + 7); |
| 1670 | try testMax(u140, maxInt(u140) - 1, maxInt(u140), maxInt(u140)); |
| 1671 | |
| 1672 | try testMax(u200, 1 << 199, 1 << 198, 1 << 199); |
| 1673 | try testMax(u200, (1 << 150) + (1 << 17), (1 << 150) + (1 << 18), (1 << 150) + (1 << 18)); |
| 1674 | try testMax(u200, 0, 1 << 123, 1 << 123); |
| 1675 | try testMax(u200, maxInt(u200), maxInt(u200) - 1, maxInt(u200)); |
| 1676 | |
| 1677 | try testMax(i140, -1, 0, 0); |
| 1678 | try testMax(i140, minInt(i140), maxInt(i140), maxInt(i140)); |
| 1679 | try testMax(i140, -1 << 70, -1 << 69, -1 << 69); |
| 1680 | try testMax(i140, (1 << 100) - 1, 1 << 100, 1 << 100); |
| 1681 | |
| 1682 | try testMax(i200, -1, minInt(i200), -1); |
| 1683 | try testMax(i200, -1 << 150, -1 << 149, -1 << 149); |
| 1684 | try testMax(i200, 1 << 198, (1 << 198) - 1, 1 << 198); |
| 1685 | try testMax(i200, maxInt(i200), 0, maxInt(i200)); |
| 1686 | } |
| 1687 | |
| 1688 | fn testMin(comptime T: type, a: T, b: T, expected: T) !void { |
| 1689 | try expect(@min(a, b) == expected); |
| 1690 | } |
| 1691 | |
| 1692 | test "@min > 128 bits" { |
| 1693 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 1694 | |
| 1695 | try testMin(u140, 0, maxInt(u140), 0); |
| 1696 | try testMin(u140, 1 << 139, 1 << 138, 1 << 138); |
| 1697 | try testMin(u140, (1 << 100) + 7, (1 << 100) + 3, (1 << 100) + 3); |
| 1698 | try testMin(u140, maxInt(u140) - 1, maxInt(u140), maxInt(u140) - 1); |
| 1699 | |
| 1700 | try testMin(u200, 1 << 199, 1 << 198, 1 << 198); |
| 1701 | try testMin(u200, (1 << 150) + (1 << 17), (1 << 150) + (1 << 18), (1 << 150) + (1 << 17)); |
| 1702 | try testMin(u200, 0, 1 << 123, 0); |
| 1703 | try testMin(u200, maxInt(u200), maxInt(u200) - 1, maxInt(u200) - 1); |
| 1704 | |
| 1705 | try testMin(i140, -1, 0, -1); |
| 1706 | try testMin(i140, minInt(i140), maxInt(i140), minInt(i140)); |
| 1707 | try testMin(i140, -1 << 70, -1 << 69, -1 << 70); |
| 1708 | try testMin(i140, (1 << 100) - 1, 1 << 100, (1 << 100) - 1); |
| 1709 | |
| 1710 | try testMin(i200, -1, minInt(i200), minInt(i200)); |
| 1711 | try testMin(i200, -1 << 150, -1 << 149, -1 << 150); |
| 1712 | try testMin(i200, 1 << 198, (1 << 198) - 1, (1 << 198) - 1); |
| 1713 | try testMin(i200, maxInt(i200), 0, 0); |
| 1714 | } |
| 1715 | |
| 1716 | fn testAbs(comptime T: type, a: T, expected: anytype) !void { |
| 1717 | try expect(@abs(a) == expected); |
| 1718 | } |
| 1719 | |
| 1720 | test "@abs > 128 bits" { |
| 1721 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 1722 | |
| 1723 | try testAbs(u140, 0, 0); |
| 1724 | try testAbs(u140, 1 << 139, 1 << 139); |
| 1725 | try testAbs(u200, 123456789, 123456789); |
| 1726 | try testAbs(u200, maxInt(u200), maxInt(u200)); |
| 1727 | |
| 1728 | try testAbs(i140, 0, 0); |
| 1729 | try testAbs(i140, 1, 1); |
| 1730 | try testAbs(i140, -1, 1); |
| 1731 | try testAbs(i140, minInt(i140), 1 << 139); |
| 1732 | |
| 1733 | try testAbs(i200, 1 << 198, 1 << 198); |
| 1734 | try testAbs(i200, -1 << 198, 1 << 198); |
| 1735 | try testAbs(i200, maxInt(i200), maxInt(i200)); |
| 1736 | try testAbs(i200, minInt(i200), 1 << 199); |
| 1737 | } |
| 1738 | |
| 1660 | 1739 | test "overflow arithmetic with u0 values" { |
| 1661 | 1740 | if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest; |
| 1662 | 1741 | |