@@ -62,8 +62,10 @@ macro_rules! impl_float {
62
62
} ;
63
63
}
64
64
65
+ impl_float ! ( f16, u16 ) ;
65
66
impl_float ! ( f32 , u32 ) ;
66
67
impl_float ! ( f64 , u64 ) ;
68
+ impl_float ! ( f128, u128 ) ;
67
69
68
70
trait FloatToInt < Int > : Copy {
69
71
fn cast ( self ) -> Int ;
@@ -85,8 +87,10 @@ macro_rules! float_to_int {
85
87
} ;
86
88
}
87
89
90
+ float_to_int ! ( f16 => i8 , u8 , i16 , u16 , i32 , u32 , i64 , u64 , i128 , u128 ) ;
88
91
float_to_int ! ( f32 => i8 , u8 , i16 , u16 , i32 , u32 , i64 , u64 , i128 , u128 ) ;
89
92
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 ) ;
90
94
91
95
/// Test this cast both via `as` and via `approx_unchecked` (i.e., it must not saturate).
92
96
#[ track_caller]
@@ -467,6 +471,32 @@ macro_rules! test_ftof {
467
471
fn casts ( ) {
468
472
/* int <-> float generic tests */
469
473
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
+
470
500
test_ftoi_itof ! { f: f32 , i: i8 , imin_f: -128.0 , imax_f: 127.0 } ;
471
501
test_ftoi_itof ! { f: f32 , i: u8 , imin_f: 0.0 , imax_f: 255.0 } ;
472
502
test_ftoi_itof ! { f: f32 , i: i16 , imin_f: -32_768.0 , imax_f: 32_767.0 } ;
@@ -519,6 +549,32 @@ fn casts() {
519
549
imax_f: 340_282_366_920_938_463_463_374_607_431_768_211_455.0
520
550
} ;
521
551
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
+
522
578
/* int <-> float spot checks */
523
579
524
580
// int -> f32
@@ -550,8 +606,18 @@ fn casts() {
550
606
551
607
/* float -> float generic tests */
552
608
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 } ;
553
613
test_ftof ! { f1: f32 , f2: f64 } ;
614
+ test_ftof ! { f1: f32 , f2: f128 } ;
615
+ test_ftof ! { f1: f64 , f2: f16 } ;
554
616
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 } ;
555
621
556
622
/* float -> float spot checks */
557
623
0 commit comments