File tree Expand file tree Collapse file tree 2 files changed +35
-0
lines changed Expand file tree Collapse file tree 2 files changed +35
-0
lines changed Original file line number Diff line number Diff line change @@ -61,6 +61,24 @@ impl<T: Float> AsMut<T> for OrderedFloat<T> {
61
61
}
62
62
}
63
63
64
+ impl < ' a , T : Float > From < & ' a T > for & ' a OrderedFloat < T > {
65
+ fn from ( t : & ' a T ) -> & ' a OrderedFloat < T > {
66
+ // Safety: OrderedFloat is #[repr(transparent)] and has no invalid values.
67
+ unsafe {
68
+ & * ( t as * const T as * const OrderedFloat < T > )
69
+ }
70
+ }
71
+ }
72
+
73
+ impl < ' a , T : Float > From < & ' a mut T > for & ' a mut OrderedFloat < T > {
74
+ fn from ( t : & ' a mut T ) -> & ' a mut OrderedFloat < T > {
75
+ // Safety: OrderedFloat is #[repr(transparent)] and has no invalid values.
76
+ unsafe {
77
+ & mut * ( t as * mut T as * mut OrderedFloat < T > )
78
+ }
79
+ }
80
+ }
81
+
64
82
impl < T : Float > PartialOrd for OrderedFloat < T > {
65
83
fn partial_cmp ( & self , other : & Self ) -> Option < Ordering > {
66
84
Some ( self . cmp ( other) )
Original file line number Diff line number Diff line change @@ -605,3 +605,20 @@ fn not_nan_panic_safety() {
605
605
assert ! ( !catch_op( not_nan( 0.0 ) , |a| * a /= 0.0 ) . is_nan( ) ) ;
606
606
assert ! ( !catch_op( not_nan( 0.0 ) , |a| * a %= 0.0 ) . is_nan( ) ) ;
607
607
}
608
+
609
+ #[ test]
610
+ fn from_ref ( ) {
611
+ let f = 1.0f32 ;
612
+ let o: & OrderedFloat < f32 > = ( & f) . into ( ) ;
613
+ assert_eq ! ( * o, 1.0f32 ) ;
614
+
615
+ let mut f = 1.0f64 ;
616
+ let o: & OrderedFloat < f64 > = ( & f) . into ( ) ;
617
+ assert_eq ! ( * o, 1.0f64 ) ;
618
+
619
+ let o: & mut OrderedFloat < f64 > = ( & mut f) . into ( ) ;
620
+ assert_eq ! ( * o, 1.0f64 ) ;
621
+ * o = OrderedFloat ( 2.0 ) ;
622
+ assert_eq ! ( * o, 2.0f64 ) ;
623
+ assert_eq ! ( f, 2.0f64 ) ;
624
+ }
You can’t perform that action at this time.
0 commit comments