(&Number::Integer(ref n1), &Number::Fixnum(n2)) => (&**n1).eq(&n2),
(&Number::Fixnum(n1), &Number::Rational(ref n2)) => n1.eq(&**n2),
(&Number::Rational(ref n1), &Number::Fixnum(n2)) => (&**n1).eq(&n2),
- (&Number::Fixnum(_), &Number::Float(OrderedFloat(_))) => false,
- (&Number::Float(OrderedFloat(_)), &Number::Fixnum(_)) => false,
+ (&Number::Fixnum(n1), &Number::Float(n2)) => OrderedFloat(n1 as f64).eq(&n2),
+ (&Number::Float(n1), &Number::Fixnum(n2)) => n1.eq(&OrderedFloat(n2 as f64)),
(&Number::Integer(ref n1), &Number::Integer(ref n2)) => n1.eq(n2),
- (&Number::Integer(_), Number::Float(_)) => false,
- (&Number::Float(_), &Number::Integer(_)) => false,
- (&Number::Integer(_), &Number::Rational(_)) => false,
- (&Number::Rational(_), &Number::Integer(_)) => false,
- (&Number::Rational(_), Number::Float(_)) => false,
- (&Number::Float(_), &Number::Rational(_)) => false,
+ (&Number::Integer(ref n1), Number::Float(n2)) => OrderedFloat(n1.to_f64()).eq(&n2),
+ (&Number::Float(n1), &Number::Integer(ref n2)) => n1.eq(&OrderedFloat(n2.to_f64())),
+ (&Number::Integer(ref n1), &Number::Rational(ref n2)) => &**n1 == &**n2,
+ (&Number::Rational(ref n1), &Number::Integer(ref n2)) => &**n1 == &**n2,
+ (&Number::Rational(ref n1), &Number::Float(n2)) => OrderedFloat(n1.to_f64()).eq(&n2),
+ (&Number::Float(n1), &Number::Rational(ref n2)) => n1.eq(&OrderedFloat(n2.to_f64())),
(&Number::Float(f1), &Number::Float(f2)) => f1.eq(&f2),
(&Number::Rational(ref r1), &Number::Rational(ref r2)) => r1.eq(&r2),
}
(Number::Integer(n1), &Number::Fixnum(n2)) => (&**n1).cmp(&Integer::from(n2)),
(&Number::Fixnum(n1), Number::Rational(n2)) => Rational::from(n1).cmp(&*n2),
(Number::Rational(n1), &Number::Fixnum(n2)) => (&**n1).cmp(&Rational::from(n2)),
- (&Number::Fixnum(_), &Number::Float(OrderedFloat(_))) => Ordering::Greater,
- (&Number::Float(OrderedFloat(_)), &Number::Fixnum(_)) => Ordering::Less,
+ (&Number::Fixnum(n1), &Number::Float(n2)) => OrderedFloat(n1 as f64).cmp(&n2),
+ (&Number::Float(n1), &Number::Fixnum(n2)) => n1.cmp(&OrderedFloat(n2 as f64)),
(&Number::Integer(ref n1), &Number::Integer(ref n2)) => n1.cmp(n2),
- (&Number::Integer(_), Number::Float(_)) => Ordering::Greater,
- (&Number::Float(_), &Number::Integer(_)) => Ordering::Less,
- (&Number::Integer(_), &Number::Rational(_)) => Ordering::Greater,
- (&Number::Rational(_), &Number::Integer(_)) => Ordering::Less,
- (&Number::Rational(_), Number::Float(_)) => Ordering::Greater,
- (&Number::Float(_), &Number::Rational(_)) => Ordering::Less,
+ (&Number::Integer(ref n1), Number::Float(n2)) => OrderedFloat(n1.to_f64()).cmp(&n2),
+ (&Number::Float(n1), &Number::Integer(ref n2)) => n1.cmp(&OrderedFloat(n2.to_f64())),
+ (&Number::Integer(ref n1), &Number::Rational(ref n2)) =>
+ (&**n1).partial_cmp(&**n2).unwrap_or(Ordering::Less),
+ (&Number::Rational(ref n1), &Number::Integer(ref n2)) =>
+ (&**n1).partial_cmp(&**n2).unwrap_or(Ordering::Less),
+ (&Number::Rational(ref n1), &Number::Float(n2)) => OrderedFloat(n1.to_f64()).cmp(&n2),
+ (&Number::Float(n1), &Number::Rational(ref n2)) => n1.cmp(&OrderedFloat(n2.to_f64())),
(&Number::Float(f1), &Number::Float(f2)) => f1.cmp(&f2),
(&Number::Rational(ref r1), &Number::Rational(ref r2)) => r1.cmp(&r2),
}