@@ -210,22 +210,6 @@ impl Eq for f32 {
210
210
fn ne ( & self , other : & f32 ) -> bool { ( * self ) != ( * other) }
211
211
}
212
212
213
- #[ cfg( notest) ]
214
- impl ApproxEq < f32 > for f32 {
215
- #[ inline( always) ]
216
- fn approx_epsilon ( ) -> f32 { 1.0e-6 }
217
-
218
- #[ inline( always) ]
219
- fn approx_eq ( & self , other : & f32 ) -> bool {
220
- self . approx_eq_eps ( other, & ApproxEq :: approx_epsilon :: < f32 , f32 > ( ) )
221
- }
222
-
223
- #[ inline( always) ]
224
- fn approx_eq_eps ( & self , other : & f32 , approx_epsilon : & f32 ) -> bool {
225
- ( * self - * other) . abs ( ) < * approx_epsilon
226
- }
227
- }
228
-
229
213
#[ cfg( notest) ]
230
214
impl Ord for f32 {
231
215
#[ inline( always) ]
@@ -826,6 +810,15 @@ mod tests {
826
810
use super::*;
827
811
use prelude::*;
828
812
813
+ macro_rules! assert_fuzzy_eq(
814
+ ($a:expr, $b:expr) => ({
815
+ let a = $a, b = $b;
816
+ if !((a - b).abs() < 1.0e-6) {
817
+ fail!(fmt!(" The values were not approximately equal. Found : %? and %?" , a, b) ) ;
818
+ }
819
+ } )
820
+ )
821
+
829
822
#[ test]
830
823
fn test_num ( ) {
831
824
num:: test_num ( 10f32 , 2f32 ) ;
@@ -855,91 +848,91 @@ mod tests {
855
848
856
849
#[ test]
857
850
fn test_floor ( ) {
858
- assert_approx_eq ! ( 1.0f32 . floor( ) , 1.0f32 ) ;
859
- assert_approx_eq ! ( 1.3f32 . floor( ) , 1.0f32 ) ;
860
- assert_approx_eq ! ( 1.5f32 . floor( ) , 1.0f32 ) ;
861
- assert_approx_eq ! ( 1.7f32 . floor( ) , 1.0f32 ) ;
862
- assert_approx_eq ! ( 0.0f32 . floor( ) , 0.0f32 ) ;
863
- assert_approx_eq ! ( ( -0.0f32 ) . floor( ) , -0.0f32 ) ;
864
- assert_approx_eq ! ( ( -1.0f32 ) . floor( ) , -1.0f32 ) ;
865
- assert_approx_eq ! ( ( -1.3f32 ) . floor( ) , -2.0f32 ) ;
866
- assert_approx_eq ! ( ( -1.5f32 ) . floor( ) , -2.0f32 ) ;
867
- assert_approx_eq ! ( ( -1.7f32 ) . floor( ) , -2.0f32 ) ;
851
+ assert_fuzzy_eq ! ( 1.0f32 . floor( ) , 1.0f32 ) ;
852
+ assert_fuzzy_eq ! ( 1.3f32 . floor( ) , 1.0f32 ) ;
853
+ assert_fuzzy_eq ! ( 1.5f32 . floor( ) , 1.0f32 ) ;
854
+ assert_fuzzy_eq ! ( 1.7f32 . floor( ) , 1.0f32 ) ;
855
+ assert_fuzzy_eq ! ( 0.0f32 . floor( ) , 0.0f32 ) ;
856
+ assert_fuzzy_eq ! ( ( -0.0f32 ) . floor( ) , -0.0f32 ) ;
857
+ assert_fuzzy_eq ! ( ( -1.0f32 ) . floor( ) , -1.0f32 ) ;
858
+ assert_fuzzy_eq ! ( ( -1.3f32 ) . floor( ) , -2.0f32 ) ;
859
+ assert_fuzzy_eq ! ( ( -1.5f32 ) . floor( ) , -2.0f32 ) ;
860
+ assert_fuzzy_eq ! ( ( -1.7f32 ) . floor( ) , -2.0f32 ) ;
868
861
}
869
862
870
863
#[ test]
871
864
fn test_ceil ( ) {
872
- assert_approx_eq ! ( 1.0f32 . ceil( ) , 1.0f32 ) ;
873
- assert_approx_eq ! ( 1.3f32 . ceil( ) , 2.0f32 ) ;
874
- assert_approx_eq ! ( 1.5f32 . ceil( ) , 2.0f32 ) ;
875
- assert_approx_eq ! ( 1.7f32 . ceil( ) , 2.0f32 ) ;
876
- assert_approx_eq ! ( 0.0f32 . ceil( ) , 0.0f32 ) ;
877
- assert_approx_eq ! ( ( -0.0f32 ) . ceil( ) , -0.0f32 ) ;
878
- assert_approx_eq ! ( ( -1.0f32 ) . ceil( ) , -1.0f32 ) ;
879
- assert_approx_eq ! ( ( -1.3f32 ) . ceil( ) , -1.0f32 ) ;
880
- assert_approx_eq ! ( ( -1.5f32 ) . ceil( ) , -1.0f32 ) ;
881
- assert_approx_eq ! ( ( -1.7f32 ) . ceil( ) , -1.0f32 ) ;
865
+ assert_fuzzy_eq ! ( 1.0f32 . ceil( ) , 1.0f32 ) ;
866
+ assert_fuzzy_eq ! ( 1.3f32 . ceil( ) , 2.0f32 ) ;
867
+ assert_fuzzy_eq ! ( 1.5f32 . ceil( ) , 2.0f32 ) ;
868
+ assert_fuzzy_eq ! ( 1.7f32 . ceil( ) , 2.0f32 ) ;
869
+ assert_fuzzy_eq ! ( 0.0f32 . ceil( ) , 0.0f32 ) ;
870
+ assert_fuzzy_eq ! ( ( -0.0f32 ) . ceil( ) , -0.0f32 ) ;
871
+ assert_fuzzy_eq ! ( ( -1.0f32 ) . ceil( ) , -1.0f32 ) ;
872
+ assert_fuzzy_eq ! ( ( -1.3f32 ) . ceil( ) , -1.0f32 ) ;
873
+ assert_fuzzy_eq ! ( ( -1.5f32 ) . ceil( ) , -1.0f32 ) ;
874
+ assert_fuzzy_eq ! ( ( -1.7f32 ) . ceil( ) , -1.0f32 ) ;
882
875
}
883
876
884
877
#[ test]
885
878
fn test_round ( ) {
886
- assert_approx_eq ! ( 1.0f32 . round( ) , 1.0f32 ) ;
887
- assert_approx_eq ! ( 1.3f32 . round( ) , 1.0f32 ) ;
888
- assert_approx_eq ! ( 1.5f32 . round( ) , 2.0f32 ) ;
889
- assert_approx_eq ! ( 1.7f32 . round( ) , 2.0f32 ) ;
890
- assert_approx_eq ! ( 0.0f32 . round( ) , 0.0f32 ) ;
891
- assert_approx_eq ! ( ( -0.0f32 ) . round( ) , -0.0f32 ) ;
892
- assert_approx_eq ! ( ( -1.0f32 ) . round( ) , -1.0f32 ) ;
893
- assert_approx_eq ! ( ( -1.3f32 ) . round( ) , -1.0f32 ) ;
894
- assert_approx_eq ! ( ( -1.5f32 ) . round( ) , -2.0f32 ) ;
895
- assert_approx_eq ! ( ( -1.7f32 ) . round( ) , -2.0f32 ) ;
879
+ assert_fuzzy_eq ! ( 1.0f32 . round( ) , 1.0f32 ) ;
880
+ assert_fuzzy_eq ! ( 1.3f32 . round( ) , 1.0f32 ) ;
881
+ assert_fuzzy_eq ! ( 1.5f32 . round( ) , 2.0f32 ) ;
882
+ assert_fuzzy_eq ! ( 1.7f32 . round( ) , 2.0f32 ) ;
883
+ assert_fuzzy_eq ! ( 0.0f32 . round( ) , 0.0f32 ) ;
884
+ assert_fuzzy_eq ! ( ( -0.0f32 ) . round( ) , -0.0f32 ) ;
885
+ assert_fuzzy_eq ! ( ( -1.0f32 ) . round( ) , -1.0f32 ) ;
886
+ assert_fuzzy_eq ! ( ( -1.3f32 ) . round( ) , -1.0f32 ) ;
887
+ assert_fuzzy_eq ! ( ( -1.5f32 ) . round( ) , -2.0f32 ) ;
888
+ assert_fuzzy_eq ! ( ( -1.7f32 ) . round( ) , -2.0f32 ) ;
896
889
}
897
890
898
891
#[ test]
899
892
fn test_trunc ( ) {
900
- assert_approx_eq ! ( 1.0f32 . trunc( ) , 1.0f32 ) ;
901
- assert_approx_eq ! ( 1.3f32 . trunc( ) , 1.0f32 ) ;
902
- assert_approx_eq ! ( 1.5f32 . trunc( ) , 1.0f32 ) ;
903
- assert_approx_eq ! ( 1.7f32 . trunc( ) , 1.0f32 ) ;
904
- assert_approx_eq ! ( 0.0f32 . trunc( ) , 0.0f32 ) ;
905
- assert_approx_eq ! ( ( -0.0f32 ) . trunc( ) , -0.0f32 ) ;
906
- assert_approx_eq ! ( ( -1.0f32 ) . trunc( ) , -1.0f32 ) ;
907
- assert_approx_eq ! ( ( -1.3f32 ) . trunc( ) , -1.0f32 ) ;
908
- assert_approx_eq ! ( ( -1.5f32 ) . trunc( ) , -1.0f32 ) ;
909
- assert_approx_eq ! ( ( -1.7f32 ) . trunc( ) , -1.0f32 ) ;
893
+ assert_fuzzy_eq ! ( 1.0f32 . trunc( ) , 1.0f32 ) ;
894
+ assert_fuzzy_eq ! ( 1.3f32 . trunc( ) , 1.0f32 ) ;
895
+ assert_fuzzy_eq ! ( 1.5f32 . trunc( ) , 1.0f32 ) ;
896
+ assert_fuzzy_eq ! ( 1.7f32 . trunc( ) , 1.0f32 ) ;
897
+ assert_fuzzy_eq ! ( 0.0f32 . trunc( ) , 0.0f32 ) ;
898
+ assert_fuzzy_eq ! ( ( -0.0f32 ) . trunc( ) , -0.0f32 ) ;
899
+ assert_fuzzy_eq ! ( ( -1.0f32 ) . trunc( ) , -1.0f32 ) ;
900
+ assert_fuzzy_eq ! ( ( -1.3f32 ) . trunc( ) , -1.0f32 ) ;
901
+ assert_fuzzy_eq ! ( ( -1.5f32 ) . trunc( ) , -1.0f32 ) ;
902
+ assert_fuzzy_eq ! ( ( -1.7f32 ) . trunc( ) , -1.0f32 ) ;
910
903
}
911
904
912
905
#[ test]
913
906
fn test_fract ( ) {
914
- assert_approx_eq ! ( 1.0f32 . fract( ) , 0.0f32 ) ;
915
- assert_approx_eq ! ( 1.3f32 . fract( ) , 0.3f32 ) ;
916
- assert_approx_eq ! ( 1.5f32 . fract( ) , 0.5f32 ) ;
917
- assert_approx_eq ! ( 1.7f32 . fract( ) , 0.7f32 ) ;
918
- assert_approx_eq ! ( 0.0f32 . fract( ) , 0.0f32 ) ;
919
- assert_approx_eq ! ( ( -0.0f32 ) . fract( ) , -0.0f32 ) ;
920
- assert_approx_eq ! ( ( -1.0f32 ) . fract( ) , -0.0f32 ) ;
921
- assert_approx_eq ! ( ( -1.3f32 ) . fract( ) , -0.3f32 ) ;
922
- assert_approx_eq ! ( ( -1.5f32 ) . fract( ) , -0.5f32 ) ;
923
- assert_approx_eq ! ( ( -1.7f32 ) . fract( ) , -0.7f32 ) ;
907
+ assert_fuzzy_eq ! ( 1.0f32 . fract( ) , 0.0f32 ) ;
908
+ assert_fuzzy_eq ! ( 1.3f32 . fract( ) , 0.3f32 ) ;
909
+ assert_fuzzy_eq ! ( 1.5f32 . fract( ) , 0.5f32 ) ;
910
+ assert_fuzzy_eq ! ( 1.7f32 . fract( ) , 0.7f32 ) ;
911
+ assert_fuzzy_eq ! ( 0.0f32 . fract( ) , 0.0f32 ) ;
912
+ assert_fuzzy_eq ! ( ( -0.0f32 ) . fract( ) , -0.0f32 ) ;
913
+ assert_fuzzy_eq ! ( ( -1.0f32 ) . fract( ) , -0.0f32 ) ;
914
+ assert_fuzzy_eq ! ( ( -1.3f32 ) . fract( ) , -0.3f32 ) ;
915
+ assert_fuzzy_eq ! ( ( -1.5f32 ) . fract( ) , -0.5f32 ) ;
916
+ assert_fuzzy_eq ! ( ( -1.7f32 ) . fract( ) , -0.7f32 ) ;
924
917
}
925
918
926
919
#[ test]
927
920
fn test_real_consts ( ) {
928
- assert_approx_eq ! ( Real :: two_pi:: <f32 >( ) , 2f32 * Real :: pi:: <f32 >( ) ) ;
929
- assert_approx_eq ! ( Real :: frac_pi_2:: <f32 >( ) , Real :: pi:: <f32 >( ) / 2f32 ) ;
930
- assert_approx_eq ! ( Real :: frac_pi_3:: <f32 >( ) , Real :: pi:: <f32 >( ) / 3f32 ) ;
931
- assert_approx_eq ! ( Real :: frac_pi_4:: <f32 >( ) , Real :: pi:: <f32 >( ) / 4f32 ) ;
932
- assert_approx_eq ! ( Real :: frac_pi_6:: <f32 >( ) , Real :: pi:: <f32 >( ) / 6f32 ) ;
933
- assert_approx_eq ! ( Real :: frac_pi_8:: <f32 >( ) , Real :: pi:: <f32 >( ) / 8f32 ) ;
934
- assert_approx_eq ! ( Real :: frac_1_pi:: <f32 >( ) , 1f32 / Real :: pi:: <f32 >( ) ) ;
935
- assert_approx_eq ! ( Real :: frac_2_pi:: <f32 >( ) , 2f32 / Real :: pi:: <f32 >( ) ) ;
936
- assert_approx_eq ! ( Real :: frac_2_sqrtpi:: <f32 >( ) , 2f32 / Real :: pi:: <f32 >( ) . sqrt( ) ) ;
937
- assert_approx_eq ! ( Real :: sqrt2:: <f32 >( ) , 2f32 . sqrt( ) ) ;
938
- assert_approx_eq ! ( Real :: frac_1_sqrt2:: <f32 >( ) , 1f32 / 2f32 . sqrt( ) ) ;
939
- assert_approx_eq ! ( Real :: log2_e:: <f32 >( ) , Real :: e:: <f32 >( ) . log2( ) ) ;
940
- assert_approx_eq ! ( Real :: log10_e:: <f32 >( ) , Real :: e:: <f32 >( ) . log10( ) ) ;
941
- assert_approx_eq ! ( Real :: log_2:: <f32 >( ) , 2f32 . log( ) ) ;
942
- assert_approx_eq ! ( Real :: log_10:: <f32 >( ) , 10f32 . log( ) ) ;
921
+ assert_fuzzy_eq ! ( Real :: two_pi:: <f32 >( ) , 2f32 * Real :: pi:: <f32 >( ) ) ;
922
+ assert_fuzzy_eq ! ( Real :: frac_pi_2:: <f32 >( ) , Real :: pi:: <f32 >( ) / 2f32 ) ;
923
+ assert_fuzzy_eq ! ( Real :: frac_pi_3:: <f32 >( ) , Real :: pi:: <f32 >( ) / 3f32 ) ;
924
+ assert_fuzzy_eq ! ( Real :: frac_pi_4:: <f32 >( ) , Real :: pi:: <f32 >( ) / 4f32 ) ;
925
+ assert_fuzzy_eq ! ( Real :: frac_pi_6:: <f32 >( ) , Real :: pi:: <f32 >( ) / 6f32 ) ;
926
+ assert_fuzzy_eq ! ( Real :: frac_pi_8:: <f32 >( ) , Real :: pi:: <f32 >( ) / 8f32 ) ;
927
+ assert_fuzzy_eq ! ( Real :: frac_1_pi:: <f32 >( ) , 1f32 / Real :: pi:: <f32 >( ) ) ;
928
+ assert_fuzzy_eq ! ( Real :: frac_2_pi:: <f32 >( ) , 2f32 / Real :: pi:: <f32 >( ) ) ;
929
+ assert_fuzzy_eq ! ( Real :: frac_2_sqrtpi:: <f32 >( ) , 2f32 / Real :: pi:: <f32 >( ) . sqrt( ) ) ;
930
+ assert_fuzzy_eq ! ( Real :: sqrt2:: <f32 >( ) , 2f32 . sqrt( ) ) ;
931
+ assert_fuzzy_eq ! ( Real :: frac_1_sqrt2:: <f32 >( ) , 1f32 / 2f32 . sqrt( ) ) ;
932
+ assert_fuzzy_eq ! ( Real :: log2_e:: <f32 >( ) , Real :: e:: <f32 >( ) . log2( ) ) ;
933
+ assert_fuzzy_eq ! ( Real :: log10_e:: <f32 >( ) , Real :: e:: <f32 >( ) . log10( ) ) ;
934
+ assert_fuzzy_eq ! ( Real :: log_2:: <f32 >( ) , 2f32 . log( ) ) ;
935
+ assert_fuzzy_eq ! ( Real :: log_10:: <f32 >( ) , 10f32 . log( ) ) ;
943
936
}
944
937
945
938
#[ test]
@@ -981,15 +974,6 @@ mod tests {
981
974
assert ! ( !NaN . is_negative( ) ) ;
982
975
}
983
976
984
- #[ test]
985
- fn test_approx_eq ( ) {
986
- assert ! ( 1.0f32 . approx_eq( & 1f32 ) ) ;
987
- assert ! ( 0.9999999f32 . approx_eq( & 1f32 ) ) ;
988
- assert ! ( 1.000001f32 . approx_eq_eps( & 1f32 , & 1.0e-5 ) ) ;
989
- assert ! ( 1.0000001f32 . approx_eq_eps( & 1f32 , & 1.0e-6 ) ) ;
990
- assert ! ( !1.0000001f32 . approx_eq_eps( & 1f32 , & 1.0e-7 ) ) ;
991
- }
992
-
993
977
#[ test]
994
978
fn test_primitive ( ) {
995
979
assert_eq ! ( Primitive :: bits:: <f32 >( ) , sys:: size_of:: <f32 >( ) * 8 ) ;
0 commit comments