11#![ feature( stmt_expr_attributes) ]
2+ #![ feature( round_ties_even) ]
23#![ allow( arithmetic_overflow) ]
34use std:: fmt:: Debug ;
45use std:: hint:: black_box;
@@ -9,6 +10,7 @@ fn main() {
910 more_casts ( ) ;
1011 ops ( ) ;
1112 nan_casts ( ) ;
13+ rounding ( ) ;
1214}
1315
1416// Helper function to avoid promotion so that this tests "run-time" casts, not CTFE.
@@ -553,3 +555,31 @@ fn nan_casts() {
553555 assert ! ( nan1_32. is_nan( ) ) ;
554556 assert ! ( nan2_32. is_nan( ) ) ;
555557}
558+
559+ fn rounding ( ) {
560+ // Test cases taken from the library's tests for this feature
561+ // f32
562+ assert_eq ( 2.5f32 . round_ties_even ( ) , 2.0f32 ) ;
563+ assert_eq ( 1.0f32 . round_ties_even ( ) , 1.0f32 ) ;
564+ assert_eq ( 1.3f32 . round_ties_even ( ) , 1.0f32 ) ;
565+ assert_eq ( 1.5f32 . round_ties_even ( ) , 2.0f32 ) ;
566+ assert_eq ( 1.7f32 . round_ties_even ( ) , 2.0f32 ) ;
567+ assert_eq ( 0.0f32 . round_ties_even ( ) , 0.0f32 ) ;
568+ assert_eq ( ( -0.0f32 ) . round_ties_even ( ) , -0.0f32 ) ;
569+ assert_eq ( ( -1.0f32 ) . round_ties_even ( ) , -1.0f32 ) ;
570+ assert_eq ( ( -1.3f32 ) . round_ties_even ( ) , -1.0f32 ) ;
571+ assert_eq ( ( -1.5f32 ) . round_ties_even ( ) , -2.0f32 ) ;
572+ assert_eq ( ( -1.7f32 ) . round_ties_even ( ) , -2.0f32 ) ;
573+ // f64
574+ assert_eq ( 2.5f64 . round_ties_even ( ) , 2.0f64 ) ;
575+ assert_eq ( 1.0f64 . round_ties_even ( ) , 1.0f64 ) ;
576+ assert_eq ( 1.3f64 . round_ties_even ( ) , 1.0f64 ) ;
577+ assert_eq ( 1.5f64 . round_ties_even ( ) , 2.0f64 ) ;
578+ assert_eq ( 1.7f64 . round_ties_even ( ) , 2.0f64 ) ;
579+ assert_eq ( 0.0f64 . round_ties_even ( ) , 0.0f64 ) ;
580+ assert_eq ( ( -0.0f64 ) . round_ties_even ( ) , -0.0f64 ) ;
581+ assert_eq ( ( -1.0f64 ) . round_ties_even ( ) , -1.0f64 ) ;
582+ assert_eq ( ( -1.3f64 ) . round_ties_even ( ) , -1.0f64 ) ;
583+ assert_eq ( ( -1.5f64 ) . round_ties_even ( ) , -2.0f64 ) ;
584+ assert_eq ( ( -1.7f64 ) . round_ties_even ( ) , -2.0f64 ) ;
585+ }
0 commit comments