@@ -62,8 +62,10 @@ macro_rules! impl_float {
6262 } ;
6363}
6464
65+ impl_float ! ( f16, u16 ) ;
6566impl_float ! ( f32 , u32 ) ;
6667impl_float ! ( f64 , u64 ) ;
68+ impl_float ! ( f128, u128 ) ;
6769
6870trait 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 ) ;
8891float_to_int ! ( f32 => i8 , u8 , i16 , u16 , i32 , u32 , i64 , u64 , i128 , u128 ) ;
8992float_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]
@@ -467,6 +471,32 @@ macro_rules! test_ftof {
467471fn casts ( ) {
468472 /* int <-> float generic tests */
469473
474+ test_ftoi_itof ! { f: f16, i: i8 , imin_f: -128.0 , imax_f: 127.0 } ;
475+ test_ftoi_itof ! { f: f16, i: u8 , imin_f: 0.0 , imax_f: 255.0 } ;
476+ test_ftoi_itof ! { f: f16, i: i16 , imin_f: -32_768.0 , imax_f: 32_767.0 } ;
477+ test_ftoi_itof ! { f: f16, i: u16 , imin_f: 0.0 , imax_f: 65_535.0 } ;
478+ test_ftoi_itof ! { f: f16, i: i32 , imin_f: -2_147_483_648.0 , imax_f: 2_147_483_647.0 } ;
479+ test_ftoi_itof ! { f: f16, i: u32 , imin_f: 0.0 , imax_f: 4_294_967_295.0 } ;
480+ test_ftoi_itof ! {
481+ f: f16,
482+ i: i64 ,
483+ imin_f: -9_223_372_036_854_775_808.0 ,
484+ imax_f: 9_223_372_036_854_775_807.0
485+ } ;
486+ test_ftoi_itof ! { f: f16, i: u64 , imin_f: 0.0 , imax_f: 18_446_744_073_709_551_615.0 } ;
487+ test_ftoi_itof ! {
488+ f: f16,
489+ i: i128 ,
490+ imin_f: -170_141_183_460_469_231_731_687_303_715_884_105_728.0 ,
491+ imax_f: 170_141_183_460_469_231_731_687_303_715_884_105_727.0 ,
492+ } ;
493+ test_ftoi_itof ! {
494+ f: f16,
495+ i: u128 ,
496+ imin_f: 0.0 ,
497+ imax_f: 340_282_366_920_938_463_463_374_607_431_768_211_455.0
498+ } ;
499+
470500 test_ftoi_itof ! { f: f32 , i: i8 , imin_f: -128.0 , imax_f: 127.0 } ;
471501 test_ftoi_itof ! { f: f32 , i: u8 , imin_f: 0.0 , imax_f: 255.0 } ;
472502 test_ftoi_itof ! { f: f32 , i: i16 , imin_f: -32_768.0 , imax_f: 32_767.0 } ;
@@ -519,6 +549,32 @@ fn casts() {
519549 imax_f: 340_282_366_920_938_463_463_374_607_431_768_211_455.0
520550 } ;
521551
552+ test_ftoi_itof ! { f: f128, i: i8 , imin_f: -128.0 , imax_f: 127.0 } ;
553+ test_ftoi_itof ! { f: f128, i: u8 , imin_f: 0.0 , imax_f: 255.0 } ;
554+ test_ftoi_itof ! { f: f128, i: i16 , imin_f: -32_768.0 , imax_f: 32_767.0 } ;
555+ test_ftoi_itof ! { f: f128, i: u16 , imin_f: 0.0 , imax_f: 65_535.0 } ;
556+ test_ftoi_itof ! { f: f128, i: i32 , imin_f: -2_147_483_648.0 , imax_f: 2_147_483_647.0 } ;
557+ test_ftoi_itof ! { f: f128, i: u32 , imin_f: 0.0 , imax_f: 4_294_967_295.0 } ;
558+ test_ftoi_itof ! {
559+ f: f128,
560+ i: i64 ,
561+ imin_f: -9_223_372_036_854_775_808.0 ,
562+ imax_f: 9_223_372_036_854_775_807.0
563+ } ;
564+ test_ftoi_itof ! { f: f128, i: u64 , imin_f: 0.0 , imax_f: 18_446_744_073_709_551_615.0 } ;
565+ test_ftoi_itof ! {
566+ f: f128,
567+ i: i128 ,
568+ imin_f: -170_141_183_460_469_231_731_687_303_715_884_105_728.0 ,
569+ imax_f: 170_141_183_460_469_231_731_687_303_715_884_105_727.0 ,
570+ } ;
571+ test_ftoi_itof ! {
572+ f: f128,
573+ i: u128 ,
574+ imin_f: 0.0 ,
575+ imax_f: 340_282_366_920_938_463_463_374_607_431_768_211_455.0
576+ } ;
577+
522578 /* int <-> float spot checks */
523579
524580 // int -> f32
@@ -550,8 +606,18 @@ fn casts() {
550606
551607 /* float -> float generic tests */
552608
609+ test_ftof ! { f1: f16, f2: f32 } ;
610+ test_ftof ! { f1: f16, f2: f64 } ;
611+ test_ftof ! { f1: f16, f2: f128 } ;
612+ test_ftof ! { f1: f32 , f2: f16 } ;
553613 test_ftof ! { f1: f32 , f2: f64 } ;
614+ test_ftof ! { f1: f32 , f2: f128 } ;
615+ test_ftof ! { f1: f64 , f2: f16 } ;
554616 test_ftof ! { f1: f64 , f2: f32 } ;
617+ test_ftof ! { f1: f64 , f2: f128 } ;
618+ test_ftof ! { f1: f128, f2: f16 } ;
619+ test_ftof ! { f1: f128, f2: f32 } ;
620+ test_ftof ! { f1: f128, f2: f64 } ;
555621
556622 /* float -> float spot checks */
557623
0 commit comments