@@ -683,5 +683,43 @@ macro_rules! int_module {
683
683
assert_eq_const_safe!( $T: <$T>:: unbounded_shr( 17 , SHIFT_AMOUNT_OVERFLOW3 ) , 0 ) ;
684
684
}
685
685
}
686
+
687
+ const EXACT_DIV_SUCCESS_DIVIDEND1 : $T = 42 ;
688
+ const EXACT_DIV_SUCCESS_DIVISOR1 : $T = 6 ;
689
+ const EXACT_DIV_SUCCESS_QUOTIENT1 : $T = 7 ;
690
+ const EXACT_DIV_SUCCESS_DIVIDEND2 : $T = 18 ;
691
+ const EXACT_DIV_SUCCESS_DIVISOR2 : $T = 3 ;
692
+ const EXACT_DIV_SUCCESS_QUOTIENT2 : $T = 6 ;
693
+ const EXACT_DIV_SUCCESS_DIVIDEND3 : $T = -91 ;
694
+ const EXACT_DIV_SUCCESS_DIVISOR3 : $T = 13 ;
695
+ const EXACT_DIV_SUCCESS_QUOTIENT3 : $T = -7 ;
696
+ const EXACT_DIV_SUCCESS_DIVIDEND4 : $T = -57 ;
697
+ const EXACT_DIV_SUCCESS_DIVISOR4 : $T = -3 ;
698
+ const EXACT_DIV_SUCCESS_QUOTIENT4 : $T = 19 ;
699
+
700
+ test_runtime_and_compiletime! {
701
+ fn test_exact_div( ) {
702
+ // 42 / 6
703
+ assert_eq_const_safe!( Option <$T>: <$T>:: checked_exact_div( EXACT_DIV_SUCCESS_DIVIDEND1 , EXACT_DIV_SUCCESS_DIVISOR1 ) , Some ( EXACT_DIV_SUCCESS_QUOTIENT1 ) ) ;
704
+ assert_eq_const_safe!( $T: <$T>:: exact_div( EXACT_DIV_SUCCESS_DIVIDEND1 , EXACT_DIV_SUCCESS_DIVISOR1 ) , EXACT_DIV_SUCCESS_QUOTIENT1 ) ;
705
+
706
+ // 18 / 3
707
+ assert_eq_const_safe!( Option <$T>: <$T>:: checked_exact_div( EXACT_DIV_SUCCESS_DIVIDEND2 , EXACT_DIV_SUCCESS_DIVISOR2 ) , Some ( EXACT_DIV_SUCCESS_QUOTIENT2 ) ) ;
708
+ assert_eq_const_safe!( $T: <$T>:: exact_div( EXACT_DIV_SUCCESS_DIVIDEND2 , EXACT_DIV_SUCCESS_DIVISOR2 ) , EXACT_DIV_SUCCESS_QUOTIENT2 ) ;
709
+
710
+ // -91 / 13
711
+ assert_eq_const_safe!( Option <$T>: <$T>:: checked_exact_div( EXACT_DIV_SUCCESS_DIVIDEND3 , EXACT_DIV_SUCCESS_DIVISOR3 ) , Some ( EXACT_DIV_SUCCESS_QUOTIENT3 ) ) ;
712
+ assert_eq_const_safe!( $T: <$T>:: exact_div( EXACT_DIV_SUCCESS_DIVIDEND3 , EXACT_DIV_SUCCESS_DIVISOR3 ) , EXACT_DIV_SUCCESS_QUOTIENT3 ) ;
713
+
714
+ // -57 / -3
715
+ assert_eq_const_safe!( Option <$T>: <$T>:: checked_exact_div( EXACT_DIV_SUCCESS_DIVIDEND4 , EXACT_DIV_SUCCESS_DIVISOR4 ) , Some ( EXACT_DIV_SUCCESS_QUOTIENT4 ) ) ;
716
+ assert_eq_const_safe!( $T: <$T>:: exact_div( EXACT_DIV_SUCCESS_DIVIDEND4 , EXACT_DIV_SUCCESS_DIVISOR4 ) , EXACT_DIV_SUCCESS_QUOTIENT4 ) ;
717
+
718
+ // failures
719
+ assert_eq_const_safe!( Option <$T>: <$T>:: checked_exact_div( 1 , 2 ) , None ) ;
720
+ assert_eq_const_safe!( Option <$T>: <$T>:: checked_exact_div( <$T>:: MIN , -1 ) , None ) ;
721
+ assert_eq_const_safe!( Option <$T>: <$T>:: checked_exact_div( 0 , 0 ) , None ) ;
722
+ }
723
+ }
686
724
} ;
687
725
}
0 commit comments