Skip to content

Commit 49f8f9d

Browse files
authored
Merge pull request #162 from gechelberger/master
feat: [resolves #145] &OrderedFloat <op> &OrderedFloat impl workaround
2 parents 324b3e1 + c435cba commit 49f8f9d

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

src/lib.rs

+10
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,16 @@ macro_rules! impl_ordered_float_binop {
454454
}
455455
}
456456

457+
// Work around for: https://github.com/reem/rust-ordered-float/issues/91
458+
impl<'a, T: $imp + Copy> $imp<Self> for &'a OrderedFloat<T> {
459+
type Output = OrderedFloat<T::Output>;
460+
461+
#[inline]
462+
fn $method(self, other: Self) -> Self::Output {
463+
OrderedFloat((self.0).$method(other.0))
464+
}
465+
}
466+
457467
impl<T: $imp> $imp<T> for OrderedFloat<T> {
458468
type Output = OrderedFloat<T::Output>;
459469

tests/test.rs

+30
Original file line numberDiff line numberDiff line change
@@ -659,6 +659,7 @@ fn add() {
659659
assert_eq!(OrderedFloat(0.0) + OrderedFloat(0.0), 0.0);
660660
assert_eq!(OrderedFloat(0.0) + &OrderedFloat(0.0), 0.0);
661661
assert_eq!(&OrderedFloat(0.0) + OrderedFloat(0.0), 0.0);
662+
assert_eq!(&OrderedFloat(0.0) + &OrderedFloat(0.0), 0.0);
662663
assert_eq!(OrderedFloat(0.0) + 0.0, 0.0);
663664
assert_eq!(OrderedFloat(0.0) + &0.0, 0.0);
664665
assert_eq!(&OrderedFloat(0.0) + 0.0, 0.0);
@@ -858,6 +859,35 @@ fn test_pow_fails_on_nan() {
858859
a.pow(b);
859860
}
860861

862+
#[test]
863+
fn test_ref_ref_binop_regression() {
864+
// repro from:
865+
// https://github.com/reem/rust-ordered-float/issues/91
866+
//
867+
// impl<'a, T> $imp<Self> for &'a OrderedFloat<T>
868+
// where
869+
// &'a T: $imp
870+
// {
871+
// type Output = OrderedFloat<<&'a T as $imp>::Output>;
872+
// #[inline]
873+
// fn $method(self, other: Self) -> Self::Output {
874+
// OrderedFloat((self.0).$method(&other.0))
875+
// }
876+
// }
877+
fn regression<T>(p: T) -> T
878+
where
879+
for<'a> &'a T: std::ops::Sub<&'a T, Output = T>,
880+
{
881+
&p - &p
882+
}
883+
884+
assert_eq!(regression(0.0_f64), 0.0);
885+
886+
let x = OrderedFloat(50.0);
887+
let y = OrderedFloat(40.0);
888+
assert_eq!(&x - &y, OrderedFloat(10.0));
889+
}
890+
861891
#[cfg(feature = "arbitrary")]
862892
mod arbitrary_test {
863893
use super::{NotNan, OrderedFloat};

0 commit comments

Comments
 (0)