Skip to content

Commit 93c1749

Browse files
committed
Add casting tests for f16 and f128
1 parent c5e9513 commit 93c1749

File tree

2 files changed

+68
-2
lines changed

2 files changed

+68
-2
lines changed

src/tools/miri/src/intrinsics/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -392,10 +392,10 @@ pub trait EvalContextExt<'tcx>: crate::MiriInterpCxExt<'tcx> {
392392
bug!("float_finite: non-float input type {}", x.layout.ty)
393393
};
394394
Ok(match fty {
395-
FloatTy::F16 => unimplemented!("f16_f128"),
395+
FloatTy::F16 => x.to_scalar().to_f16()?.is_finite(),
396396
FloatTy::F32 => x.to_scalar().to_f32()?.is_finite(),
397397
FloatTy::F64 => x.to_scalar().to_f64()?.is_finite(),
398-
FloatTy::F128 => unimplemented!("f16_f128"),
398+
FloatTy::F128 => x.to_scalar().to_f128()?.is_finite(),
399399
})
400400
};
401401
match (float_finite(&a)?, float_finite(&b)?) {

src/tools/miri/tests/pass/float.rs

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,10 @@ macro_rules! impl_float {
6262
};
6363
}
6464

65+
impl_float!(f16, u16);
6566
impl_float!(f32, u32);
6667
impl_float!(f64, u64);
68+
impl_float!(f128, u128);
6769

6870
trait FloatToInt<Int>: Copy {
6971
fn cast(self) -> Int;
@@ -85,8 +87,10 @@ macro_rules! float_to_int {
8587
};
8688
}
8789

90+
float_to_int!(f16 => i8, u8, i16, u16, i32, u32, i64, u64, i128, u128);
8891
float_to_int!(f32 => i8, u8, i16, u16, i32, u32, i64, u64, i128, u128);
8992
float_to_int!(f64 => i8, u8, i16, u16, i32, u32, i64, u64, i128, u128);
93+
float_to_int!(f128 => i8, u8, i16, u16, i32, u32, i64, u64, i128, u128);
9094

9195
/// Test this cast both via `as` and via `approx_unchecked` (i.e., it must not saturate).
9296
#[track_caller]
@@ -469,6 +473,32 @@ macro_rules! test_ftof {
469473
fn casts() {
470474
/* int <-> float generic tests */
471475

476+
test_ftoi_itof! { f: f16, i: i8, imin_f: -128.0, imax_f: 127.0 };
477+
test_ftoi_itof! { f: f16, i: u8, imin_f: 0.0, imax_f: 255.0 };
478+
test_ftoi_itof! { f: f16, i: i16, imin_f: -32_768.0, imax_f: 32_767.0 };
479+
test_ftoi_itof! { f: f16, i: u16, imin_f: 0.0, imax_f: 65_535.0 };
480+
test_ftoi_itof! { f: f16, i: i32, imin_f: -2_147_483_648.0, imax_f: 2_147_483_647.0 };
481+
test_ftoi_itof! { f: f16, i: u32, imin_f: 0.0, imax_f: 4_294_967_295.0 };
482+
test_ftoi_itof! {
483+
f: f16,
484+
i: i64,
485+
imin_f: -9_223_372_036_854_775_808.0,
486+
imax_f: 9_223_372_036_854_775_807.0
487+
};
488+
test_ftoi_itof! { f: f16, i: u64, imin_f: 0.0, imax_f: 18_446_744_073_709_551_615.0 };
489+
test_ftoi_itof! {
490+
f: f16,
491+
i: i128,
492+
imin_f: -170_141_183_460_469_231_731_687_303_715_884_105_728.0,
493+
imax_f: 170_141_183_460_469_231_731_687_303_715_884_105_727.0,
494+
};
495+
test_ftoi_itof! {
496+
f: f16,
497+
i: u128,
498+
imin_f: 0.0,
499+
imax_f: 340_282_366_920_938_463_463_374_607_431_768_211_455.0
500+
};
501+
472502
test_ftoi_itof! { f: f32, i: i8, imin_f: -128.0, imax_f: 127.0 };
473503
test_ftoi_itof! { f: f32, i: u8, imin_f: 0.0, imax_f: 255.0 };
474504
test_ftoi_itof! { f: f32, i: i16, imin_f: -32_768.0, imax_f: 32_767.0 };
@@ -521,6 +551,32 @@ fn casts() {
521551
imax_f: 340_282_366_920_938_463_463_374_607_431_768_211_455.0
522552
};
523553

554+
test_ftoi_itof! { f: f128, i: i8, imin_f: -128.0, imax_f: 127.0 };
555+
test_ftoi_itof! { f: f128, i: u8, imin_f: 0.0, imax_f: 255.0 };
556+
test_ftoi_itof! { f: f128, i: i16, imin_f: -32_768.0, imax_f: 32_767.0 };
557+
test_ftoi_itof! { f: f128, i: u16, imin_f: 0.0, imax_f: 65_535.0 };
558+
test_ftoi_itof! { f: f128, i: i32, imin_f: -2_147_483_648.0, imax_f: 2_147_483_647.0 };
559+
test_ftoi_itof! { f: f128, i: u32, imin_f: 0.0, imax_f: 4_294_967_295.0 };
560+
test_ftoi_itof! {
561+
f: f128,
562+
i: i64,
563+
imin_f: -9_223_372_036_854_775_808.0,
564+
imax_f: 9_223_372_036_854_775_807.0
565+
};
566+
test_ftoi_itof! { f: f128, i: u64, imin_f: 0.0, imax_f: 18_446_744_073_709_551_615.0 };
567+
test_ftoi_itof! {
568+
f: f128,
569+
i: i128,
570+
imin_f: -170_141_183_460_469_231_731_687_303_715_884_105_728.0,
571+
imax_f: 170_141_183_460_469_231_731_687_303_715_884_105_727.0,
572+
};
573+
test_ftoi_itof! {
574+
f: f128,
575+
i: u128,
576+
imin_f: 0.0,
577+
imax_f: 340_282_366_920_938_463_463_374_607_431_768_211_455.0
578+
};
579+
524580
/* int <-> float spot checks */
525581

526582
// int -> f32
@@ -552,8 +608,18 @@ fn casts() {
552608

553609
/* float -> float generic tests */
554610

611+
test_ftof! { f1: f16, f2: f32 };
612+
test_ftof! { f1: f16, f2: f64 };
613+
test_ftof! { f1: f16, f2: f128 };
614+
test_ftof! { f1: f32, f2: f16 };
555615
test_ftof! { f1: f32, f2: f64 };
616+
test_ftof! { f1: f32, f2: f128 };
617+
test_ftof! { f1: f64, f2: f16 };
556618
test_ftof! { f1: f64, f2: f32 };
619+
test_ftof! { f1: f64, f2: f128 };
620+
test_ftof! { f1: f128, f2: f16 };
621+
test_ftof! { f1: f128, f2: f32 };
622+
test_ftof! { f1: f128, f2: f64 };
557623

558624
/* float -> float spot checks */
559625

0 commit comments

Comments
 (0)