| ... | @@ -777,3 +777,92 @@ test "max value type" { | ... | @@ -777,3 +777,92 @@ test "max value type" { |
| 777 | const x: u32 = maxInt(i32); | 777 | const x: u32 = maxInt(i32); |
| 778 | assert(x == 2147483647); | 778 | assert(x == 2147483647); |
| 779 | } | 779 | } |
| | 780 | |
| | 781 | pub fn maxFloat(comptime T: type) T { |
| | 782 | return switch (T) { |
| | 783 | f16 => f16_max, |
| | 784 | f32 => f32_max, |
| | 785 | f64 => f64_max, |
| | 786 | else => @compileError("Expecting type to be a float"), |
| | 787 | }; |
| | 788 | } |
| | 789 | |
| | 790 | test "math.maxFloat" { |
| | 791 | assert(maxFloat(f16) == f16_max); |
| | 792 | assert(maxFloat(f32) == f32_max); |
| | 793 | assert(maxFloat(f64) == f64_max); |
| | 794 | } |
| | 795 | |
| | 796 | pub fn minFloat(comptime T: type) T { |
| | 797 | return switch (T) { |
| | 798 | f16 => f16_min, |
| | 799 | f32 => f32_min, |
| | 800 | f64 => f64_min, |
| | 801 | else => @compileError("Expecting type to be a float"), |
| | 802 | }; |
| | 803 | } |
| | 804 | |
| | 805 | test "math.minFloat" { |
| | 806 | assert(minFloat(f16) == f16_min); |
| | 807 | assert(minFloat(f32) == f32_min); |
| | 808 | assert(minFloat(f64) == f64_min); |
| | 809 | } |
| | 810 | |
| | 811 | pub fn maxValue(comptime T: type) T { |
| | 812 | return switch (@typeId(T)) { |
| | 813 | TypeId.Int => maxInt(T), |
| | 814 | TypeId.Float => maxFloat(T), |
| | 815 | else => @compileError("Expecting type to be a float or int"), |
| | 816 | }; |
| | 817 | } |
| | 818 | |
| | 819 | test "math.maxValue" { |
| | 820 | assert(maxValue(u0) == 0); |
| | 821 | assert(maxValue(u1) == 1); |
| | 822 | assert(maxValue(u8) == 255); |
| | 823 | assert(maxValue(u16) == 65535); |
| | 824 | assert(maxValue(u32) == 4294967295); |
| | 825 | assert(maxValue(u64) == 18446744073709551615); |
| | 826 | |
| | 827 | assert(maxValue(i0) == 0); |
| | 828 | assert(maxValue(i1) == 0); |
| | 829 | assert(maxValue(i8) == 127); |
| | 830 | assert(maxValue(i16) == 32767); |
| | 831 | assert(maxValue(i32) == 2147483647); |
| | 832 | assert(maxValue(i63) == 4611686018427387903); |
| | 833 | assert(maxValue(i64) == 9223372036854775807); |
| | 834 | |
| | 835 | assert(maxValue(f16) == f16_max); |
| | 836 | assert(maxValue(f32) == f32_max); |
| | 837 | assert(maxValue(f64) == f64_max); |
| | 838 | } |
| | 839 | |
| | 840 | pub fn minValue(comptime T: type) T { |
| | 841 | return switch (@typeId(T)) { |
| | 842 | TypeId.Int => minInt(T), |
| | 843 | TypeId.Float => minFloat(T), |
| | 844 | else => @compileError("Expecting type to be a float or int"), |
| | 845 | }; |
| | 846 | } |
| | 847 | |
| | 848 | test "math.minValue" { |
| | 849 | assert(minValue(u0) == 0); |
| | 850 | assert(minValue(u1) == 0); |
| | 851 | assert(minValue(u8) == 0); |
| | 852 | assert(minValue(u16) == 0); |
| | 853 | assert(minValue(u32) == 0); |
| | 854 | assert(minValue(u63) == 0); |
| | 855 | assert(minValue(u64) == 0); |
| | 856 | |
| | 857 | assert(minValue(i0) == 0); |
| | 858 | assert(minValue(i1) == -1); |
| | 859 | assert(minValue(i8) == -128); |
| | 860 | assert(minValue(i16) == -32768); |
| | 861 | assert(minValue(i32) == -2147483648); |
| | 862 | assert(minValue(i63) == -4611686018427387904); |
| | 863 | assert(minValue(i64) == -9223372036854775808); |
| | 864 | |
| | 865 | assert(minValue(f16) == f16_min); |
| | 866 | assert(minValue(f32) == f32_min); |
| | 867 | assert(minValue(f64) == f64_min); |
| | 868 | } |