@@ -3502,8 +3502,10 @@ pub trait Iterator {
3502
3502
}
3503
3503
}
3504
3504
3505
- /// [Lexicographically](Ord#lexicographical-comparison) compares the elements of this [`Iterator`] with those
3506
- /// of another.
3505
+ /// [Lexicographically](Ord#lexicographical-comparison) compares the [`PartialOrd`] elements of
3506
+ /// this [`Iterator`] with those of another. The comparison works like short-circuit
3507
+ /// evaluation, returning a result without comparing the remaining elements.
3508
+ /// As soon as an order can be determined, the evaluation stops and a result is returned.
3507
3509
///
3508
3510
/// # Examples
3509
3511
///
@@ -3513,9 +3515,25 @@ pub trait Iterator {
3513
3515
/// assert_eq!([1.].iter().partial_cmp([1.].iter()), Some(Ordering::Equal));
3514
3516
/// assert_eq!([1.].iter().partial_cmp([1., 2.].iter()), Some(Ordering::Less));
3515
3517
/// assert_eq!([1., 2.].iter().partial_cmp([1.].iter()), Some(Ordering::Greater));
3518
+ /// ```
3516
3519
///
3520
+ /// For floating-point numbers, NaN does not have a total order and will result
3521
+ /// in `None` when compared:
3522
+ ///
3523
+ /// ```
3517
3524
/// assert_eq!([f64::NAN].iter().partial_cmp([1.].iter()), None);
3518
3525
/// ```
3526
+ ///
3527
+ /// The results are determined by the order of evaluation.
3528
+ ///
3529
+ /// ```
3530
+ /// use std::cmp::Ordering;
3531
+ ///
3532
+ /// assert_eq!([1.0, f64::NAN].iter().partial_cmp([2.0, f64::NAN].iter()), Some(Ordering::Less));
3533
+ /// assert_eq!([2.0, f64::NAN].iter().partial_cmp([1.0, f64::NAN].iter()), Some(Ordering::Greater));
3534
+ /// assert_eq!([f64::NAN, 1.0].iter().partial_cmp([f64::NAN, 2.0].iter()), None);
3535
+ /// ```
3536
+ ///
3519
3537
#[ stable( feature = "iter_order" , since = "1.5.0" ) ]
3520
3538
fn partial_cmp < I > ( self , other : I ) -> Option < Ordering >
3521
3539
where
0 commit comments