@@ -42,8 +42,8 @@ use num_bigint::{BigInt, BigUint, Sign, ToBigInt};
4242use num_integer:: Integer ;
4343use num_traits:: float:: FloatCore ;
4444use num_traits:: {
45- Bounded , CheckedAdd , CheckedDiv , CheckedMul , CheckedSub , FromPrimitive , Inv , Num , NumCast , One ,
46- Pow , Signed , ToPrimitive , Unsigned , Zero ,
45+ Bounded , CheckedAdd , CheckedDiv , CheckedMul , CheckedSub , ConstOne , ConstZero , FromPrimitive ,
46+ Inv , Num , NumCast , One , Pow , Signed , ToPrimitive , Unsigned , Zero ,
4747} ;
4848
4949mod pow;
@@ -922,6 +922,15 @@ where
922922}
923923
924924// Constants
925+ impl < T : ConstZero + ConstOne > Ratio < T > {
926+ /// A constant `Ratio` 0/1.
927+ pub const ZERO : Self = Self :: new_raw ( T :: ZERO , T :: ONE ) ;
928+ }
929+
930+ impl < T : Clone + Integer + ConstZero + ConstOne > ConstZero for Ratio < T > {
931+ const ZERO : Self = Self :: ZERO ;
932+ }
933+
925934impl < T : Clone + Integer > Zero for Ratio < T > {
926935 #[ inline]
927936 fn zero ( ) -> Ratio < T > {
@@ -940,6 +949,15 @@ impl<T: Clone + Integer> Zero for Ratio<T> {
940949 }
941950}
942951
952+ impl < T : ConstOne > Ratio < T > {
953+ /// A constant `Ratio` 1/1.
954+ pub const ONE : Self = Self :: new_raw ( T :: ONE , T :: ONE ) ;
955+ }
956+
957+ impl < T : Clone + Integer + ConstOne > ConstOne for Ratio < T > {
958+ const ONE : Self = Self :: ONE ;
959+ }
960+
943961impl < T : Clone + Integer > One for Ratio < T > {
944962 #[ inline]
945963 fn one ( ) -> Ratio < T > {
0 commit comments