| ... | ... | @@ -732,157 +732,157 @@ assume_usize_width! { |
| 732 | 732 | } |
| 733 | 733 | |
| 734 | 734 | macro_rules! test_float { |
| 735 | | ($modname: ident, $fty: ty, $inf: expr, $neginf: expr, $nan: expr, $min: expr, $max: expr, $min_pos: expr, $max_exp:expr) => { |
| 735 | ($modname: ident, $fassert: ident, $fty: ty, $inf: expr, $neginf: expr, $nan: expr, $min: expr, $max: expr, $min_pos: expr, $max_exp:expr) => { |
| 736 | 736 | mod $modname { |
| 737 | 737 | #[test] |
| 738 | 738 | fn min() { |
| 739 | | assert_eq!((0.0 as $fty).min(0.0), 0.0); |
| 740 | | assert!((0.0 as $fty).min(0.0).is_sign_positive()); |
| 741 | | assert_eq!((-0.0 as $fty).min(-0.0), -0.0); |
| 742 | | assert!((-0.0 as $fty).min(-0.0).is_sign_negative()); |
| 743 | | assert_eq!((9.0 as $fty).min(9.0), 9.0); |
| 744 | | assert_eq!((-9.0 as $fty).min(0.0), -9.0); |
| 745 | | assert_eq!((0.0 as $fty).min(9.0), 0.0); |
| 746 | | assert!((0.0 as $fty).min(9.0).is_sign_positive()); |
| 747 | | assert_eq!((-0.0 as $fty).min(9.0), -0.0); |
| 748 | | assert!((-0.0 as $fty).min(9.0).is_sign_negative()); |
| 749 | | assert_eq!((-0.0 as $fty).min(-9.0), -9.0); |
| 750 | | assert_eq!(($inf as $fty).min(9.0), 9.0); |
| 751 | | assert_eq!((9.0 as $fty).min($inf), 9.0); |
| 752 | | assert_eq!(($inf as $fty).min(-9.0), -9.0); |
| 753 | | assert_eq!((-9.0 as $fty).min($inf), -9.0); |
| 754 | | assert_eq!(($neginf as $fty).min(9.0), $neginf); |
| 755 | | assert_eq!((9.0 as $fty).min($neginf), $neginf); |
| 756 | | assert_eq!(($neginf as $fty).min(-9.0), $neginf); |
| 757 | | assert_eq!((-9.0 as $fty).min($neginf), $neginf); |
| 758 | | assert_eq!(($nan as $fty).min(9.0), 9.0); |
| 759 | | assert_eq!(($nan as $fty).min(-9.0), -9.0); |
| 760 | | assert_eq!((9.0 as $fty).min($nan), 9.0); |
| 761 | | assert_eq!((-9.0 as $fty).min($nan), -9.0); |
| 762 | | assert!(($nan as $fty).min($nan).is_nan()); |
| 739 | $fassert!((0.0 as $fty).min(0.0), 0.0); |
| 740 | $fassert!((0.0 as $fty).min(0.0).is_sign_positive()); |
| 741 | $fassert!((-0.0 as $fty).min(-0.0), -0.0); |
| 742 | $fassert!((-0.0 as $fty).min(-0.0).is_sign_negative()); |
| 743 | $fassert!((9.0 as $fty).min(9.0), 9.0); |
| 744 | $fassert!((-9.0 as $fty).min(0.0), -9.0); |
| 745 | $fassert!((0.0 as $fty).min(9.0), 0.0); |
| 746 | $fassert!((0.0 as $fty).min(9.0).is_sign_positive()); |
| 747 | $fassert!((-0.0 as $fty).min(9.0), -0.0); |
| 748 | $fassert!((-0.0 as $fty).min(9.0).is_sign_negative()); |
| 749 | $fassert!((-0.0 as $fty).min(-9.0), -9.0); |
| 750 | $fassert!(($inf as $fty).min(9.0), 9.0); |
| 751 | $fassert!((9.0 as $fty).min($inf), 9.0); |
| 752 | $fassert!(($inf as $fty).min(-9.0), -9.0); |
| 753 | $fassert!((-9.0 as $fty).min($inf), -9.0); |
| 754 | $fassert!(($neginf as $fty).min(9.0), $neginf); |
| 755 | $fassert!((9.0 as $fty).min($neginf), $neginf); |
| 756 | $fassert!(($neginf as $fty).min(-9.0), $neginf); |
| 757 | $fassert!((-9.0 as $fty).min($neginf), $neginf); |
| 758 | $fassert!(($nan as $fty).min(9.0), 9.0); |
| 759 | $fassert!(($nan as $fty).min(-9.0), -9.0); |
| 760 | $fassert!((9.0 as $fty).min($nan), 9.0); |
| 761 | $fassert!((-9.0 as $fty).min($nan), -9.0); |
| 762 | $fassert!(($nan as $fty).min($nan).is_nan()); |
| 763 | 763 | } |
| 764 | 764 | #[test] |
| 765 | 765 | fn max() { |
| 766 | | assert_eq!((0.0 as $fty).max(0.0), 0.0); |
| 767 | | assert!((0.0 as $fty).max(0.0).is_sign_positive()); |
| 768 | | assert_eq!((-0.0 as $fty).max(-0.0), -0.0); |
| 769 | | assert!((-0.0 as $fty).max(-0.0).is_sign_negative()); |
| 770 | | assert_eq!((9.0 as $fty).max(9.0), 9.0); |
| 771 | | assert_eq!((-9.0 as $fty).max(0.0), 0.0); |
| 772 | | assert!((-9.0 as $fty).max(0.0).is_sign_positive()); |
| 773 | | assert_eq!((-9.0 as $fty).max(-0.0), -0.0); |
| 774 | | assert!((-9.0 as $fty).max(-0.0).is_sign_negative()); |
| 775 | | assert_eq!((0.0 as $fty).max(9.0), 9.0); |
| 776 | | assert_eq!((0.0 as $fty).max(-9.0), 0.0); |
| 777 | | assert!((0.0 as $fty).max(-9.0).is_sign_positive()); |
| 778 | | assert_eq!((-0.0 as $fty).max(-9.0), -0.0); |
| 779 | | assert!((-0.0 as $fty).max(-9.0).is_sign_negative()); |
| 780 | | assert_eq!(($inf as $fty).max(9.0), $inf); |
| 781 | | assert_eq!((9.0 as $fty).max($inf), $inf); |
| 782 | | assert_eq!(($inf as $fty).max(-9.0), $inf); |
| 783 | | assert_eq!((-9.0 as $fty).max($inf), $inf); |
| 784 | | assert_eq!(($neginf as $fty).max(9.0), 9.0); |
| 785 | | assert_eq!((9.0 as $fty).max($neginf), 9.0); |
| 786 | | assert_eq!(($neginf as $fty).max(-9.0), -9.0); |
| 787 | | assert_eq!((-9.0 as $fty).max($neginf), -9.0); |
| 788 | | assert_eq!(($nan as $fty).max(9.0), 9.0); |
| 789 | | assert_eq!(($nan as $fty).max(-9.0), -9.0); |
| 790 | | assert_eq!((9.0 as $fty).max($nan), 9.0); |
| 791 | | assert_eq!((-9.0 as $fty).max($nan), -9.0); |
| 792 | | assert!(($nan as $fty).max($nan).is_nan()); |
| 766 | $fassert!((0.0 as $fty).max(0.0), 0.0); |
| 767 | $fassert!((0.0 as $fty).max(0.0).is_sign_positive()); |
| 768 | $fassert!((-0.0 as $fty).max(-0.0), -0.0); |
| 769 | $fassert!((-0.0 as $fty).max(-0.0).is_sign_negative()); |
| 770 | $fassert!((9.0 as $fty).max(9.0), 9.0); |
| 771 | $fassert!((-9.0 as $fty).max(0.0), 0.0); |
| 772 | $fassert!((-9.0 as $fty).max(0.0).is_sign_positive()); |
| 773 | $fassert!((-9.0 as $fty).max(-0.0), -0.0); |
| 774 | $fassert!((-9.0 as $fty).max(-0.0).is_sign_negative()); |
| 775 | $fassert!((0.0 as $fty).max(9.0), 9.0); |
| 776 | $fassert!((0.0 as $fty).max(-9.0), 0.0); |
| 777 | $fassert!((0.0 as $fty).max(-9.0).is_sign_positive()); |
| 778 | $fassert!((-0.0 as $fty).max(-9.0), -0.0); |
| 779 | $fassert!((-0.0 as $fty).max(-9.0).is_sign_negative()); |
| 780 | $fassert!(($inf as $fty).max(9.0), $inf); |
| 781 | $fassert!((9.0 as $fty).max($inf), $inf); |
| 782 | $fassert!(($inf as $fty).max(-9.0), $inf); |
| 783 | $fassert!((-9.0 as $fty).max($inf), $inf); |
| 784 | $fassert!(($neginf as $fty).max(9.0), 9.0); |
| 785 | $fassert!((9.0 as $fty).max($neginf), 9.0); |
| 786 | $fassert!(($neginf as $fty).max(-9.0), -9.0); |
| 787 | $fassert!((-9.0 as $fty).max($neginf), -9.0); |
| 788 | $fassert!(($nan as $fty).max(9.0), 9.0); |
| 789 | $fassert!(($nan as $fty).max(-9.0), -9.0); |
| 790 | $fassert!((9.0 as $fty).max($nan), 9.0); |
| 791 | $fassert!((-9.0 as $fty).max($nan), -9.0); |
| 792 | $fassert!(($nan as $fty).max($nan).is_nan()); |
| 793 | 793 | } |
| 794 | 794 | #[test] |
| 795 | 795 | fn minimum() { |
| 796 | | assert_eq!((0.0 as $fty).minimum(0.0), 0.0); |
| 797 | | assert!((0.0 as $fty).minimum(0.0).is_sign_positive()); |
| 798 | | assert_eq!((-0.0 as $fty).minimum(0.0), -0.0); |
| 799 | | assert!((-0.0 as $fty).minimum(0.0).is_sign_negative()); |
| 800 | | assert_eq!((-0.0 as $fty).minimum(-0.0), -0.0); |
| 801 | | assert!((-0.0 as $fty).minimum(-0.0).is_sign_negative()); |
| 802 | | assert_eq!((9.0 as $fty).minimum(9.0), 9.0); |
| 803 | | assert_eq!((-9.0 as $fty).minimum(0.0), -9.0); |
| 804 | | assert_eq!((0.0 as $fty).minimum(9.0), 0.0); |
| 805 | | assert!((0.0 as $fty).minimum(9.0).is_sign_positive()); |
| 806 | | assert_eq!((-0.0 as $fty).minimum(9.0), -0.0); |
| 807 | | assert!((-0.0 as $fty).minimum(9.0).is_sign_negative()); |
| 808 | | assert_eq!((-0.0 as $fty).minimum(-9.0), -9.0); |
| 809 | | assert_eq!(($inf as $fty).minimum(9.0), 9.0); |
| 810 | | assert_eq!((9.0 as $fty).minimum($inf), 9.0); |
| 811 | | assert_eq!(($inf as $fty).minimum(-9.0), -9.0); |
| 812 | | assert_eq!((-9.0 as $fty).minimum($inf), -9.0); |
| 813 | | assert_eq!(($neginf as $fty).minimum(9.0), $neginf); |
| 814 | | assert_eq!((9.0 as $fty).minimum($neginf), $neginf); |
| 815 | | assert_eq!(($neginf as $fty).minimum(-9.0), $neginf); |
| 816 | | assert_eq!((-9.0 as $fty).minimum($neginf), $neginf); |
| 817 | | assert!(($nan as $fty).minimum(9.0).is_nan()); |
| 818 | | assert!(($nan as $fty).minimum(-9.0).is_nan()); |
| 819 | | assert!((9.0 as $fty).minimum($nan).is_nan()); |
| 820 | | assert!((-9.0 as $fty).minimum($nan).is_nan()); |
| 821 | | assert!(($nan as $fty).minimum($nan).is_nan()); |
| 796 | $fassert!((0.0 as $fty).minimum(0.0), 0.0); |
| 797 | $fassert!((0.0 as $fty).minimum(0.0).is_sign_positive()); |
| 798 | $fassert!((-0.0 as $fty).minimum(0.0), -0.0); |
| 799 | $fassert!((-0.0 as $fty).minimum(0.0).is_sign_negative()); |
| 800 | $fassert!((-0.0 as $fty).minimum(-0.0), -0.0); |
| 801 | $fassert!((-0.0 as $fty).minimum(-0.0).is_sign_negative()); |
| 802 | $fassert!((9.0 as $fty).minimum(9.0), 9.0); |
| 803 | $fassert!((-9.0 as $fty).minimum(0.0), -9.0); |
| 804 | $fassert!((0.0 as $fty).minimum(9.0), 0.0); |
| 805 | $fassert!((0.0 as $fty).minimum(9.0).is_sign_positive()); |
| 806 | $fassert!((-0.0 as $fty).minimum(9.0), -0.0); |
| 807 | $fassert!((-0.0 as $fty).minimum(9.0).is_sign_negative()); |
| 808 | $fassert!((-0.0 as $fty).minimum(-9.0), -9.0); |
| 809 | $fassert!(($inf as $fty).minimum(9.0), 9.0); |
| 810 | $fassert!((9.0 as $fty).minimum($inf), 9.0); |
| 811 | $fassert!(($inf as $fty).minimum(-9.0), -9.0); |
| 812 | $fassert!((-9.0 as $fty).minimum($inf), -9.0); |
| 813 | $fassert!(($neginf as $fty).minimum(9.0), $neginf); |
| 814 | $fassert!((9.0 as $fty).minimum($neginf), $neginf); |
| 815 | $fassert!(($neginf as $fty).minimum(-9.0), $neginf); |
| 816 | $fassert!((-9.0 as $fty).minimum($neginf), $neginf); |
| 817 | $fassert!(($nan as $fty).minimum(9.0).is_nan()); |
| 818 | $fassert!(($nan as $fty).minimum(-9.0).is_nan()); |
| 819 | $fassert!((9.0 as $fty).minimum($nan).is_nan()); |
| 820 | $fassert!((-9.0 as $fty).minimum($nan).is_nan()); |
| 821 | $fassert!(($nan as $fty).minimum($nan).is_nan()); |
| 822 | 822 | } |
| 823 | 823 | #[test] |
| 824 | 824 | fn maximum() { |
| 825 | | assert_eq!((0.0 as $fty).maximum(0.0), 0.0); |
| 826 | | assert!((0.0 as $fty).maximum(0.0).is_sign_positive()); |
| 827 | | assert_eq!((-0.0 as $fty).maximum(0.0), 0.0); |
| 828 | | assert!((-0.0 as $fty).maximum(0.0).is_sign_positive()); |
| 829 | | assert_eq!((-0.0 as $fty).maximum(-0.0), -0.0); |
| 830 | | assert!((-0.0 as $fty).maximum(-0.0).is_sign_negative()); |
| 831 | | assert_eq!((9.0 as $fty).maximum(9.0), 9.0); |
| 832 | | assert_eq!((-9.0 as $fty).maximum(0.0), 0.0); |
| 833 | | assert!((-9.0 as $fty).maximum(0.0).is_sign_positive()); |
| 834 | | assert_eq!((-9.0 as $fty).maximum(-0.0), -0.0); |
| 835 | | assert!((-9.0 as $fty).maximum(-0.0).is_sign_negative()); |
| 836 | | assert_eq!((0.0 as $fty).maximum(9.0), 9.0); |
| 837 | | assert_eq!((0.0 as $fty).maximum(-9.0), 0.0); |
| 838 | | assert!((0.0 as $fty).maximum(-9.0).is_sign_positive()); |
| 839 | | assert_eq!((-0.0 as $fty).maximum(-9.0), -0.0); |
| 840 | | assert!((-0.0 as $fty).maximum(-9.0).is_sign_negative()); |
| 841 | | assert_eq!(($inf as $fty).maximum(9.0), $inf); |
| 842 | | assert_eq!((9.0 as $fty).maximum($inf), $inf); |
| 843 | | assert_eq!(($inf as $fty).maximum(-9.0), $inf); |
| 844 | | assert_eq!((-9.0 as $fty).maximum($inf), $inf); |
| 845 | | assert_eq!(($neginf as $fty).maximum(9.0), 9.0); |
| 846 | | assert_eq!((9.0 as $fty).maximum($neginf), 9.0); |
| 847 | | assert_eq!(($neginf as $fty).maximum(-9.0), -9.0); |
| 848 | | assert_eq!((-9.0 as $fty).maximum($neginf), -9.0); |
| 849 | | assert!(($nan as $fty).maximum(9.0).is_nan()); |
| 850 | | assert!(($nan as $fty).maximum(-9.0).is_nan()); |
| 851 | | assert!((9.0 as $fty).maximum($nan).is_nan()); |
| 852 | | assert!((-9.0 as $fty).maximum($nan).is_nan()); |
| 853 | | assert!(($nan as $fty).maximum($nan).is_nan()); |
| 825 | $fassert!((0.0 as $fty).maximum(0.0), 0.0); |
| 826 | $fassert!((0.0 as $fty).maximum(0.0).is_sign_positive()); |
| 827 | $fassert!((-0.0 as $fty).maximum(0.0), 0.0); |
| 828 | $fassert!((-0.0 as $fty).maximum(0.0).is_sign_positive()); |
| 829 | $fassert!((-0.0 as $fty).maximum(-0.0), -0.0); |
| 830 | $fassert!((-0.0 as $fty).maximum(-0.0).is_sign_negative()); |
| 831 | $fassert!((9.0 as $fty).maximum(9.0), 9.0); |
| 832 | $fassert!((-9.0 as $fty).maximum(0.0), 0.0); |
| 833 | $fassert!((-9.0 as $fty).maximum(0.0).is_sign_positive()); |
| 834 | $fassert!((-9.0 as $fty).maximum(-0.0), -0.0); |
| 835 | $fassert!((-9.0 as $fty).maximum(-0.0).is_sign_negative()); |
| 836 | $fassert!((0.0 as $fty).maximum(9.0), 9.0); |
| 837 | $fassert!((0.0 as $fty).maximum(-9.0), 0.0); |
| 838 | $fassert!((0.0 as $fty).maximum(-9.0).is_sign_positive()); |
| 839 | $fassert!((-0.0 as $fty).maximum(-9.0), -0.0); |
| 840 | $fassert!((-0.0 as $fty).maximum(-9.0).is_sign_negative()); |
| 841 | $fassert!(($inf as $fty).maximum(9.0), $inf); |
| 842 | $fassert!((9.0 as $fty).maximum($inf), $inf); |
| 843 | $fassert!(($inf as $fty).maximum(-9.0), $inf); |
| 844 | $fassert!((-9.0 as $fty).maximum($inf), $inf); |
| 845 | $fassert!(($neginf as $fty).maximum(9.0), 9.0); |
| 846 | $fassert!((9.0 as $fty).maximum($neginf), 9.0); |
| 847 | $fassert!(($neginf as $fty).maximum(-9.0), -9.0); |
| 848 | $fassert!((-9.0 as $fty).maximum($neginf), -9.0); |
| 849 | $fassert!(($nan as $fty).maximum(9.0).is_nan()); |
| 850 | $fassert!(($nan as $fty).maximum(-9.0).is_nan()); |
| 851 | $fassert!((9.0 as $fty).maximum($nan).is_nan()); |
| 852 | $fassert!((-9.0 as $fty).maximum($nan).is_nan()); |
| 853 | $fassert!(($nan as $fty).maximum($nan).is_nan()); |
| 854 | 854 | } |
| 855 | 855 | #[test] |
| 856 | 856 | fn midpoint() { |
| 857 | | assert_eq!((0.5 as $fty).midpoint(0.5), 0.5); |
| 858 | | assert_eq!((0.5 as $fty).midpoint(2.5), 1.5); |
| 859 | | assert_eq!((3.0 as $fty).midpoint(4.0), 3.5); |
| 860 | | assert_eq!((-3.0 as $fty).midpoint(4.0), 0.5); |
| 861 | | assert_eq!((3.0 as $fty).midpoint(-4.0), -0.5); |
| 862 | | assert_eq!((-3.0 as $fty).midpoint(-4.0), -3.5); |
| 863 | | assert_eq!((0.0 as $fty).midpoint(0.0), 0.0); |
| 864 | | assert_eq!((-0.0 as $fty).midpoint(-0.0), -0.0); |
| 865 | | assert_eq!((-5.0 as $fty).midpoint(5.0), 0.0); |
| 866 | | assert_eq!(($max as $fty).midpoint($min), 0.0); |
| 867 | | assert_eq!(($min as $fty).midpoint($max), -0.0); |
| 868 | | assert_eq!(($max as $fty).midpoint($min_pos), $max / 2.); |
| 869 | | assert_eq!((-$max as $fty).midpoint($min_pos), -$max / 2.); |
| 870 | | assert_eq!(($max as $fty).midpoint(-$min_pos), $max / 2.); |
| 871 | | assert_eq!((-$max as $fty).midpoint(-$min_pos), -$max / 2.); |
| 872 | | assert_eq!(($min_pos as $fty).midpoint($max), $max / 2.); |
| 873 | | assert_eq!(($min_pos as $fty).midpoint(-$max), -$max / 2.); |
| 874 | | assert_eq!((-$min_pos as $fty).midpoint($max), $max / 2.); |
| 875 | | assert_eq!((-$min_pos as $fty).midpoint(-$max), -$max / 2.); |
| 876 | | assert_eq!(($max as $fty).midpoint($max), $max); |
| 877 | | assert_eq!(($min_pos as $fty).midpoint($min_pos), $min_pos); |
| 878 | | assert_eq!((-$min_pos as $fty).midpoint(-$min_pos), -$min_pos); |
| 879 | | assert_eq!(($max as $fty).midpoint(5.0), $max / 2.0 + 2.5); |
| 880 | | assert_eq!(($max as $fty).midpoint(-5.0), $max / 2.0 - 2.5); |
| 881 | | assert_eq!(($inf as $fty).midpoint($inf), $inf); |
| 882 | | assert_eq!(($neginf as $fty).midpoint($neginf), $neginf); |
| 883 | | assert!(($nan as $fty).midpoint(1.0).is_nan()); |
| 884 | | assert!((1.0 as $fty).midpoint($nan).is_nan()); |
| 885 | | assert!(($nan as $fty).midpoint($nan).is_nan()); |
| 857 | $fassert!((0.5 as $fty).midpoint(0.5), 0.5); |
| 858 | $fassert!((0.5 as $fty).midpoint(2.5), 1.5); |
| 859 | $fassert!((3.0 as $fty).midpoint(4.0), 3.5); |
| 860 | $fassert!((-3.0 as $fty).midpoint(4.0), 0.5); |
| 861 | $fassert!((3.0 as $fty).midpoint(-4.0), -0.5); |
| 862 | $fassert!((-3.0 as $fty).midpoint(-4.0), -3.5); |
| 863 | $fassert!((0.0 as $fty).midpoint(0.0), 0.0); |
| 864 | $fassert!((-0.0 as $fty).midpoint(-0.0), -0.0); |
| 865 | $fassert!((-5.0 as $fty).midpoint(5.0), 0.0); |
| 866 | $fassert!(($max as $fty).midpoint($min), 0.0); |
| 867 | $fassert!(($min as $fty).midpoint($max), -0.0); |
| 868 | $fassert!(($max as $fty).midpoint($min_pos), $max / 2.); |
| 869 | $fassert!((-$max as $fty).midpoint($min_pos), -$max / 2.); |
| 870 | $fassert!(($max as $fty).midpoint(-$min_pos), $max / 2.); |
| 871 | $fassert!((-$max as $fty).midpoint(-$min_pos), -$max / 2.); |
| 872 | $fassert!(($min_pos as $fty).midpoint($max), $max / 2.); |
| 873 | $fassert!(($min_pos as $fty).midpoint(-$max), -$max / 2.); |
| 874 | $fassert!((-$min_pos as $fty).midpoint($max), $max / 2.); |
| 875 | $fassert!((-$min_pos as $fty).midpoint(-$max), -$max / 2.); |
| 876 | $fassert!(($max as $fty).midpoint($max), $max); |
| 877 | $fassert!(($min_pos as $fty).midpoint($min_pos), $min_pos); |
| 878 | $fassert!((-$min_pos as $fty).midpoint(-$min_pos), -$min_pos); |
| 879 | $fassert!(($max as $fty).midpoint(5.0), $max / 2.0 + 2.5); |
| 880 | $fassert!(($max as $fty).midpoint(-5.0), $max / 2.0 - 2.5); |
| 881 | $fassert!(($inf as $fty).midpoint($inf), $inf); |
| 882 | $fassert!(($neginf as $fty).midpoint($neginf), $neginf); |
| 883 | $fassert!(($nan as $fty).midpoint(1.0).is_nan()); |
| 884 | $fassert!((1.0 as $fty).midpoint($nan).is_nan()); |
| 885 | $fassert!(($nan as $fty).midpoint($nan).is_nan()); |
| 886 | 886 | |
| 887 | 887 | // test if large differences in magnitude are still correctly computed. |
| 888 | 888 | // NOTE: that because of how small x and y are, x + y can never overflow |
| ... | ... | @@ -907,19 +907,19 @@ macro_rules! test_float { |
| 907 | 907 | } |
| 908 | 908 | #[test] |
| 909 | 909 | fn rem_euclid() { |
| 910 | | let a: $fty = 42.0; |
| 911 | | assert!($inf.rem_euclid(a).is_nan()); |
| 912 | | assert_eq!(a.rem_euclid($inf), a); |
| 913 | | assert!(a.rem_euclid($nan).is_nan()); |
| 910 | // FIXME: Use $fassert when rem_euclid becomes const |
| 911 | assert!($inf.rem_euclid((42.0 as $fty)).is_nan()); |
| 912 | assert_eq!((42.0 as $fty).rem_euclid($inf), (42.0 as $fty)); |
| 913 | assert!((42.0 as $fty).rem_euclid($nan).is_nan()); |
| 914 | 914 | assert!($inf.rem_euclid($inf).is_nan()); |
| 915 | 915 | assert!($inf.rem_euclid($nan).is_nan()); |
| 916 | 916 | assert!($nan.rem_euclid($inf).is_nan()); |
| 917 | 917 | } |
| 918 | 918 | #[test] |
| 919 | 919 | fn div_euclid() { |
| 920 | | let a: $fty = 42.0; |
| 921 | | assert_eq!(a.div_euclid($inf), 0.0); |
| 922 | | assert!(a.div_euclid($nan).is_nan()); |
| 920 | // FIXME: Use $fassert when div_euclid becomes const |
| 921 | assert_eq!((42.0 as $fty).div_euclid($inf), 0.0); |
| 922 | assert!((42.0 as $fty).div_euclid($nan).is_nan()); |
| 923 | 923 | assert!($inf.div_euclid($inf).is_nan()); |
| 924 | 924 | assert!($inf.div_euclid($nan).is_nan()); |
| 925 | 925 | assert!($nan.div_euclid($inf).is_nan()); |
| ... | ... | @@ -928,8 +928,41 @@ macro_rules! test_float { |
| 928 | 928 | }; |
| 929 | 929 | } |
| 930 | 930 | |
| 931 | // Custom assert macro that distribute between assert! and assert_eq! in a non-const context |
| 932 | macro_rules! float_assert { |
| 933 | ($b:expr) => { |
| 934 | assert!($b); |
| 935 | }; |
| 936 | ($left:expr, $right:expr) => { |
| 937 | assert_eq!($left, $right); |
| 938 | }; |
| 939 | } |
| 940 | |
| 941 | // Custom assert macro that only uses assert! in a const context |
| 942 | macro_rules! float_const_assert { |
| 943 | ($b:expr) => { |
| 944 | assert!(const { $b }); |
| 945 | }; |
| 946 | ($left:expr, $right:expr) => { |
| 947 | assert!(const { $left == $right }); |
| 948 | }; |
| 949 | } |
| 950 | |
| 931 | 951 | test_float!( |
| 932 | 952 | f32, |
| 953 | float_assert, |
| 954 | f32, |
| 955 | f32::INFINITY, |
| 956 | f32::NEG_INFINITY, |
| 957 | f32::NAN, |
| 958 | f32::MIN, |
| 959 | f32::MAX, |
| 960 | f32::MIN_POSITIVE, |
| 961 | f32::MAX_EXP |
| 962 | ); |
| 963 | test_float!( |
| 964 | f32_const, |
| 965 | float_const_assert, |
| 933 | 966 | f32, |
| 934 | 967 | f32::INFINITY, |
| 935 | 968 | f32::NEG_INFINITY, |
| ... | ... | @@ -941,6 +974,19 @@ test_float!( |
| 941 | 974 | ); |
| 942 | 975 | test_float!( |
| 943 | 976 | f64, |
| 977 | float_assert, |
| 978 | f64, |
| 979 | f64::INFINITY, |
| 980 | f64::NEG_INFINITY, |
| 981 | f64::NAN, |
| 982 | f64::MIN, |
| 983 | f64::MAX, |
| 984 | f64::MIN_POSITIVE, |
| 985 | f64::MAX_EXP |
| 986 | ); |
| 987 | test_float!( |
| 988 | f64_const, |
| 989 | float_const_assert, |
| 944 | 990 | f64, |
| 945 | 991 | f64::INFINITY, |
| 946 | 992 | f64::NEG_INFINITY, |