Skip to content

Commit 4e6b364

Browse files
committed
coretests: simplify test_float macro to derive more things from the type name
1 parent 83164fc commit 4e6b364

File tree

1 file changed

+106
-159
lines changed
  • library/coretests/tests/num

1 file changed

+106
-159
lines changed

library/coretests/tests/num/mod.rs

Lines changed: 106 additions & 159 deletions
Original file line numberDiff line numberDiff line change
@@ -732,7 +732,7 @@ assume_usize_width! {
732732
}
733733

734734
macro_rules! test_float {
735-
($modname: ident, $fassert: 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) => {
736736
mod $modname {
737737
#[test]
738738
fn min() {
@@ -747,19 +747,19 @@ macro_rules! test_float {
747747
$fassert!((-0.0 as $fty).min(9.0), -0.0);
748748
$fassert!((-0.0 as $fty).min(9.0).is_sign_negative());
749749
$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());
750+
$fassert!((<$fty>::INFINITY as $fty).min(9.0), 9.0);
751+
$fassert!((9.0 as $fty).min(<$fty>::INFINITY), 9.0);
752+
$fassert!((<$fty>::INFINITY as $fty).min(-9.0), -9.0);
753+
$fassert!((-9.0 as $fty).min(<$fty>::INFINITY), -9.0);
754+
$fassert!((<$fty>::NEG_INFINITY as $fty).min(9.0), <$fty>::NEG_INFINITY);
755+
$fassert!((9.0 as $fty).min(<$fty>::NEG_INFINITY), <$fty>::NEG_INFINITY);
756+
$fassert!((<$fty>::NEG_INFINITY as $fty).min(-9.0), <$fty>::NEG_INFINITY);
757+
$fassert!((-9.0 as $fty).min(<$fty>::NEG_INFINITY), <$fty>::NEG_INFINITY);
758+
$fassert!((<$fty>::NAN as $fty).min(9.0), 9.0);
759+
$fassert!((<$fty>::NAN as $fty).min(-9.0), -9.0);
760+
$fassert!((9.0 as $fty).min(<$fty>::NAN), 9.0);
761+
$fassert!((-9.0 as $fty).min(<$fty>::NAN), -9.0);
762+
$fassert!((<$fty>::NAN as $fty).min(<$fty>::NAN).is_nan());
763763
}
764764
#[test]
765765
fn max() {
@@ -777,19 +777,19 @@ macro_rules! test_float {
777777
$fassert!((0.0 as $fty).max(-9.0).is_sign_positive());
778778
$fassert!((-0.0 as $fty).max(-9.0), -0.0);
779779
$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());
780+
$fassert!((<$fty>::INFINITY as $fty).max(9.0), <$fty>::INFINITY);
781+
$fassert!((9.0 as $fty).max(<$fty>::INFINITY), <$fty>::INFINITY);
782+
$fassert!((<$fty>::INFINITY as $fty).max(-9.0), <$fty>::INFINITY);
783+
$fassert!((-9.0 as $fty).max(<$fty>::INFINITY), <$fty>::INFINITY);
784+
$fassert!((<$fty>::NEG_INFINITY as $fty).max(9.0), 9.0);
785+
$fassert!((9.0 as $fty).max(<$fty>::NEG_INFINITY), 9.0);
786+
$fassert!((<$fty>::NEG_INFINITY as $fty).max(-9.0), -9.0);
787+
$fassert!((-9.0 as $fty).max(<$fty>::NEG_INFINITY), -9.0);
788+
$fassert!((<$fty>::NAN as $fty).max(9.0), 9.0);
789+
$fassert!((<$fty>::NAN as $fty).max(-9.0), -9.0);
790+
$fassert!((9.0 as $fty).max(<$fty>::NAN), 9.0);
791+
$fassert!((-9.0 as $fty).max(<$fty>::NAN), -9.0);
792+
$fassert!((<$fty>::NAN as $fty).max(<$fty>::NAN).is_nan());
793793
}
794794
#[test]
795795
fn minimum() {
@@ -806,19 +806,19 @@ macro_rules! test_float {
806806
$fassert!((-0.0 as $fty).minimum(9.0), -0.0);
807807
$fassert!((-0.0 as $fty).minimum(9.0).is_sign_negative());
808808
$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());
809+
$fassert!((<$fty>::INFINITY as $fty).minimum(9.0), 9.0);
810+
$fassert!((9.0 as $fty).minimum(<$fty>::INFINITY), 9.0);
811+
$fassert!((<$fty>::INFINITY as $fty).minimum(-9.0), -9.0);
812+
$fassert!((-9.0 as $fty).minimum(<$fty>::INFINITY), -9.0);
813+
$fassert!((<$fty>::NEG_INFINITY as $fty).minimum(9.0), <$fty>::NEG_INFINITY);
814+
$fassert!((9.0 as $fty).minimum(<$fty>::NEG_INFINITY), <$fty>::NEG_INFINITY);
815+
$fassert!((<$fty>::NEG_INFINITY as $fty).minimum(-9.0), <$fty>::NEG_INFINITY);
816+
$fassert!((-9.0 as $fty).minimum(<$fty>::NEG_INFINITY), <$fty>::NEG_INFINITY);
817+
$fassert!((<$fty>::NAN as $fty).minimum(9.0).is_nan());
818+
$fassert!((<$fty>::NAN as $fty).minimum(-9.0).is_nan());
819+
$fassert!((9.0 as $fty).minimum(<$fty>::NAN).is_nan());
820+
$fassert!((-9.0 as $fty).minimum(<$fty>::NAN).is_nan());
821+
$fassert!((<$fty>::NAN as $fty).minimum(<$fty>::NAN).is_nan());
822822
}
823823
#[test]
824824
fn maximum() {
@@ -838,19 +838,19 @@ macro_rules! test_float {
838838
$fassert!((0.0 as $fty).maximum(-9.0).is_sign_positive());
839839
$fassert!((-0.0 as $fty).maximum(-9.0), -0.0);
840840
$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());
841+
$fassert!((<$fty>::INFINITY as $fty).maximum(9.0), <$fty>::INFINITY);
842+
$fassert!((9.0 as $fty).maximum(<$fty>::INFINITY), <$fty>::INFINITY);
843+
$fassert!((<$fty>::INFINITY as $fty).maximum(-9.0), <$fty>::INFINITY);
844+
$fassert!((-9.0 as $fty).maximum(<$fty>::INFINITY), <$fty>::INFINITY);
845+
$fassert!((<$fty>::NEG_INFINITY as $fty).maximum(9.0), 9.0);
846+
$fassert!((9.0 as $fty).maximum(<$fty>::NEG_INFINITY), 9.0);
847+
$fassert!((<$fty>::NEG_INFINITY as $fty).maximum(-9.0), -9.0);
848+
$fassert!((-9.0 as $fty).maximum(<$fty>::NEG_INFINITY), -9.0);
849+
$fassert!((<$fty>::NAN as $fty).maximum(9.0).is_nan());
850+
$fassert!((<$fty>::NAN as $fty).maximum(-9.0).is_nan());
851+
$fassert!((9.0 as $fty).maximum(<$fty>::NAN).is_nan());
852+
$fassert!((-9.0 as $fty).maximum(<$fty>::NAN).is_nan());
853+
$fassert!((<$fty>::NAN as $fty).maximum(<$fty>::NAN).is_nan());
854854
}
855855
#[test]
856856
fn midpoint() {
@@ -863,39 +863,52 @@ macro_rules! test_float {
863863
$fassert!((0.0 as $fty).midpoint(0.0), 0.0);
864864
$fassert!((-0.0 as $fty).midpoint(-0.0), -0.0);
865865
$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());
866+
$fassert!((<$fty>::MAX as $fty).midpoint(<$fty>::MIN), 0.0);
867+
$fassert!((<$fty>::MIN as $fty).midpoint(<$fty>::MAX), -0.0);
868+
$fassert!((<$fty>::MAX as $fty).midpoint(<$fty>::MIN_POSITIVE), <$fty>::MAX / 2.);
869+
$fassert!((-<$fty>::MAX as $fty).midpoint(<$fty>::MIN_POSITIVE), -<$fty>::MAX / 2.);
870+
$fassert!((<$fty>::MAX as $fty).midpoint(-<$fty>::MIN_POSITIVE), <$fty>::MAX / 2.);
871+
$fassert!(
872+
(-<$fty>::MAX as $fty).midpoint(-<$fty>::MIN_POSITIVE),
873+
-<$fty>::MAX / 2.
874+
);
875+
$fassert!((<$fty>::MIN_POSITIVE).midpoint(<$fty>::MAX), <$fty>::MAX / 2.);
876+
$fassert!((<$fty>::MIN_POSITIVE).midpoint(-<$fty>::MAX), -<$fty>::MAX / 2.);
877+
$fassert!((-<$fty>::MIN_POSITIVE).midpoint(<$fty>::MAX), <$fty>::MAX / 2.);
878+
$fassert!((-<$fty>::MIN_POSITIVE).midpoint(-<$fty>::MAX), -<$fty>::MAX / 2.);
879+
$fassert!((<$fty>::MAX as $fty).midpoint(<$fty>::MAX), <$fty>::MAX);
880+
$fassert!(
881+
(<$fty>::MIN_POSITIVE).midpoint(<$fty>::MIN_POSITIVE),
882+
<$fty>::MIN_POSITIVE
883+
);
884+
$fassert!(
885+
(-<$fty>::MIN_POSITIVE).midpoint(-<$fty>::MIN_POSITIVE),
886+
-<$fty>::MIN_POSITIVE
887+
);
888+
$fassert!((<$fty>::MAX as $fty).midpoint(5.0), <$fty>::MAX / 2.0 + 2.5);
889+
$fassert!((<$fty>::MAX as $fty).midpoint(-5.0), <$fty>::MAX / 2.0 - 2.5);
890+
$fassert!((<$fty>::INFINITY as $fty).midpoint(<$fty>::INFINITY), <$fty>::INFINITY);
891+
$fassert!(
892+
(<$fty>::NEG_INFINITY as $fty).midpoint(<$fty>::NEG_INFINITY),
893+
<$fty>::NEG_INFINITY
894+
);
895+
$fassert!((<$fty>::NAN as $fty).midpoint(1.0).is_nan());
896+
$fassert!((1.0 as $fty).midpoint(<$fty>::NAN).is_nan());
897+
$fassert!((<$fty>::NAN as $fty).midpoint(<$fty>::NAN).is_nan());
886898

887899
// test if large differences in magnitude are still correctly computed.
888900
// NOTE: that because of how small x and y are, x + y can never overflow
889901
// so (x + y) / 2.0 is always correct
890902
// in particular, `2.pow(i)` will never be at the max exponent, so it could
891903
// be safely doubled, while j is significantly smaller.
892-
for i in $max_exp.saturating_sub(64)..$max_exp {
904+
for i in <$fty>::MAX_EXP.saturating_sub(64)..<$fty>::MAX_EXP {
893905
for j in 0..64u8 {
894906
let large = (2.0 as $fty).powi(i);
895907
// a much smaller number, such that there is no chance of overflow to test
896908
// potential double rounding in midpoint's implementation.
897-
let small =
898-
(2.0 as $fty).powi($max_exp - 1) * <$fty>::EPSILON * <$fty>::from(j);
909+
let small = (2.0 as $fty).powi(<$fty>::MAX_EXP - 1)
910+
* <$fty>::EPSILON
911+
* <$fty>::from(j);
899912

900913
let naive = (large + small) / 2.0;
901914
let midpoint = large.midpoint(small);
@@ -907,21 +920,21 @@ macro_rules! test_float {
907920
#[test]
908921
fn rem_euclid() {
909922
// FIXME: Use $fassert when rem_euclid becomes const
910-
assert!($inf.rem_euclid((42.0 as $fty)).is_nan());
911-
assert_eq!((42.0 as $fty).rem_euclid($inf), (42.0 as $fty));
912-
assert!((42.0 as $fty).rem_euclid($nan).is_nan());
913-
assert!($inf.rem_euclid($inf).is_nan());
914-
assert!($inf.rem_euclid($nan).is_nan());
915-
assert!($nan.rem_euclid($inf).is_nan());
923+
assert!(<$fty>::INFINITY.rem_euclid((42.0 as $fty)).is_nan());
924+
assert_eq!((42.0 as $fty).rem_euclid(<$fty>::INFINITY), (42.0 as $fty));
925+
assert!((42.0 as $fty).rem_euclid(<$fty>::NAN).is_nan());
926+
assert!(<$fty>::INFINITY.rem_euclid(<$fty>::INFINITY).is_nan());
927+
assert!(<$fty>::INFINITY.rem_euclid(<$fty>::NAN).is_nan());
928+
assert!(<$fty>::NAN.rem_euclid(<$fty>::INFINITY).is_nan());
916929
}
917930
#[test]
918931
fn div_euclid() {
919932
// FIXME: Use $fassert when div_euclid becomes const
920-
assert_eq!((42.0 as $fty).div_euclid($inf), 0.0);
921-
assert!((42.0 as $fty).div_euclid($nan).is_nan());
922-
assert!($inf.div_euclid($inf).is_nan());
923-
assert!($inf.div_euclid($nan).is_nan());
924-
assert!($nan.div_euclid($inf).is_nan());
933+
assert_eq!((42.0 as $fty).div_euclid(<$fty>::INFINITY), 0.0);
934+
assert!((42.0 as $fty).div_euclid(<$fty>::NAN).is_nan());
935+
assert!(<$fty>::INFINITY.div_euclid(<$fty>::INFINITY).is_nan());
936+
assert!(<$fty>::INFINITY.div_euclid(<$fty>::NAN).is_nan());
937+
assert!(<$fty>::NAN.div_euclid(<$fty>::INFINITY).is_nan());
925938
}
926939
}
927940
};
@@ -948,76 +961,10 @@ macro_rules! float_const_assert {
948961
}
949962

950963
// FIXME(f16_f128): `f16` is only tested in consts for now.
951-
test_float!(
952-
f16_const,
953-
float_const_assert,
954-
f16,
955-
f16::INFINITY,
956-
f16::NEG_INFINITY,
957-
f16::NAN,
958-
f16::MIN,
959-
f16::MAX,
960-
f16::MIN_POSITIVE,
961-
f16::MAX_EXP
962-
);
963-
test_float!(
964-
f32,
965-
float_assert,
966-
f32,
967-
f32::INFINITY,
968-
f32::NEG_INFINITY,
969-
f32::NAN,
970-
f32::MIN,
971-
f32::MAX,
972-
f32::MIN_POSITIVE,
973-
f32::MAX_EXP
974-
);
975-
test_float!(
976-
f32_const,
977-
float_const_assert,
978-
f32,
979-
f32::INFINITY,
980-
f32::NEG_INFINITY,
981-
f32::NAN,
982-
f32::MIN,
983-
f32::MAX,
984-
f32::MIN_POSITIVE,
985-
f32::MAX_EXP
986-
);
987-
test_float!(
988-
f64,
989-
float_assert,
990-
f64,
991-
f64::INFINITY,
992-
f64::NEG_INFINITY,
993-
f64::NAN,
994-
f64::MIN,
995-
f64::MAX,
996-
f64::MIN_POSITIVE,
997-
f64::MAX_EXP
998-
);
999-
test_float!(
1000-
f64_const,
1001-
float_const_assert,
1002-
f64,
1003-
f64::INFINITY,
1004-
f64::NEG_INFINITY,
1005-
f64::NAN,
1006-
f64::MIN,
1007-
f64::MAX,
1008-
f64::MIN_POSITIVE,
1009-
f64::MAX_EXP
1010-
);
964+
test_float!(f16_const, float_const_assert, f16);
965+
test_float!(f32, float_assert, f32);
966+
test_float!(f32_const, float_const_assert, f32);
967+
test_float!(f64, float_assert, f64);
968+
test_float!(f64_const, float_const_assert, f64);
1011969
// FIXME(f16_f128): `f128` is only tested in consts for now.
1012-
test_float!(
1013-
f128_const,
1014-
float_const_assert,
1015-
f128,
1016-
f128::INFINITY,
1017-
f128::NEG_INFINITY,
1018-
f128::NAN,
1019-
f128::MIN,
1020-
f128::MAX,
1021-
f128::MIN_POSITIVE,
1022-
f128::MAX_EXP
1023-
);
970+
test_float!(f128_const, float_const_assert, f128);

0 commit comments

Comments
 (0)