@@ -166,7 +166,17 @@ impl Div for &Z {
166166
167167arithmetic_trait_borrowed_to_owned ! ( Div , div, Z , Z , Q ) ;
168168arithmetic_trait_mixed_borrowed_owned ! ( Div , div, Z , Z , Q ) ;
169- arithmetic_between_types ! ( Div , div, Z , Q , i64 i32 i16 i8 u64 u32 u16 u8 ) ;
169+ arithmetic_between_types ! ( Div , div, Z , Q , i64 i32 i16 i8 u64 u32 u16 u8 f32 f64 ) ;
170+
171+ #[ test]
172+ fn same ( ) {
173+ let a = Z :: from ( 4 ) / 2 ;
174+ let b = 4 / Z :: from ( 2 ) ;
175+
176+ println ! ( "{a}, {b}" ) ;
177+
178+ assert_eq ! ( a, b) ;
179+ }
170180
171181impl Div < & Q > for & Z {
172182 type Output = Q ;
@@ -583,6 +593,35 @@ mod test_div_between_z_and_q {
583593 use super :: Z ;
584594 use crate :: rational:: Q ;
585595
596+ /// Ensuring division between different types is available
597+ #[ test]
598+ fn availability ( ) {
599+ let a: Z = Z :: from ( 42 ) ;
600+ let b: Q = Q :: from ( ( 5 , 7 ) ) ;
601+
602+ let _: Q = & a / & b;
603+ let _: Q = & a / b. clone ( ) ;
604+ let _: Q = a. clone ( ) / & b;
605+ let _: Q = a. clone ( ) / b;
606+ let _: Q = & a / 0.5_f32 ;
607+ let _: Q = & a / 0.5_f64 ;
608+ let _: Q = a. clone ( ) / 0.5_f32 ;
609+ let _: Q = a. clone ( ) / 0.5_f64 ;
610+ let _: Q = 0.5_f32 / & a;
611+ let _: Q = 0.5_f64 / & a;
612+ let _: Q = 0.5_f32 / a. clone ( ) ;
613+ let _: Q = 0.5_f64 / a. clone ( ) ;
614+ }
615+
616+ /// Ensures that division is performed the right way around
617+ #[ test]
618+ fn order_retained ( ) {
619+ let a = Z :: from ( 4 ) ;
620+
621+ assert_eq ! ( 2 , & a / 2 ) ;
622+ assert_eq ! ( Q :: from( ( 1 , 2 ) ) , 2 / & a) ;
623+ }
624+
586625 /// Testing division for [`Z`] and [`Q`]
587626 #[ test]
588627 fn div ( ) {
0 commit comments