@@ -973,6 +973,24 @@ pub trait Ord: Eq + PartialOrd<Self> {
973
973
/// assert_eq!(1.max(2), 2);
974
974
/// assert_eq!(2.max(2), 2);
975
975
/// ```
976
+ /// ```
977
+ /// use std::cmp::Ordering;
978
+ ///
979
+ /// #[derive(Eq)]
980
+ /// struct Equal(&'static str);
981
+ ///
982
+ /// impl PartialEq for Equal {
983
+ /// fn eq(&self, other: &Self) -> bool { true }
984
+ /// }
985
+ /// impl PartialOrd for Equal {
986
+ /// fn partial_cmp(&self, other: &Self) -> Option<Ordering> { Some(Ordering::Equal) }
987
+ /// }
988
+ /// impl Ord for Equal {
989
+ /// fn cmp(&self, other: &Self) -> Ordering { Ordering::Equal }
990
+ /// }
991
+ ///
992
+ /// assert_eq!(Equal("self").max(Equal("other")).0, "other");
993
+ /// ```
976
994
#[ stable( feature = "ord_max_min" , since = "1.21.0" ) ]
977
995
#[ inline]
978
996
#[ must_use]
@@ -994,6 +1012,24 @@ pub trait Ord: Eq + PartialOrd<Self> {
994
1012
/// assert_eq!(1.min(2), 1);
995
1013
/// assert_eq!(2.min(2), 2);
996
1014
/// ```
1015
+ /// ```
1016
+ /// use std::cmp::Ordering;
1017
+ ///
1018
+ /// #[derive(Eq)]
1019
+ /// struct Equal(&'static str);
1020
+ ///
1021
+ /// impl PartialEq for Equal {
1022
+ /// fn eq(&self, other: &Self) -> bool { true }
1023
+ /// }
1024
+ /// impl PartialOrd for Equal {
1025
+ /// fn partial_cmp(&self, other: &Self) -> Option<Ordering> { Some(Ordering::Equal) }
1026
+ /// }
1027
+ /// impl Ord for Equal {
1028
+ /// fn cmp(&self, other: &Self) -> Ordering { Ordering::Equal }
1029
+ /// }
1030
+ ///
1031
+ /// assert_eq!(Equal("self").min(Equal("other")).0, "self");
1032
+ /// ```
997
1033
#[ stable( feature = "ord_max_min" , since = "1.21.0" ) ]
998
1034
#[ inline]
999
1035
#[ must_use]
@@ -1414,6 +1450,24 @@ pub macro PartialOrd($item:item) {
1414
1450
/// assert_eq!(cmp::min(1, 2), 1);
1415
1451
/// assert_eq!(cmp::min(2, 2), 2);
1416
1452
/// ```
1453
+ /// ```
1454
+ /// use std::cmp::{self, Ordering};
1455
+ ///
1456
+ /// #[derive(Eq)]
1457
+ /// struct Equal(&'static str);
1458
+ ///
1459
+ /// impl PartialEq for Equal {
1460
+ /// fn eq(&self, other: &Self) -> bool { true }
1461
+ /// }
1462
+ /// impl PartialOrd for Equal {
1463
+ /// fn partial_cmp(&self, other: &Self) -> Option<Ordering> { Some(Ordering::Equal) }
1464
+ /// }
1465
+ /// impl Ord for Equal {
1466
+ /// fn cmp(&self, other: &Self) -> Ordering { Ordering::Equal }
1467
+ /// }
1468
+ ///
1469
+ /// assert_eq!(cmp::min(Equal("v1"), Equal("v2")).0, "v1");
1470
+ /// ```
1417
1471
#[ inline]
1418
1472
#[ must_use]
1419
1473
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -1431,11 +1485,16 @@ pub fn min<T: Ord>(v1: T, v2: T) -> T {
1431
1485
/// ```
1432
1486
/// use std::cmp;
1433
1487
///
1434
- /// let result = cmp::min_by(-2, 1, |x: &i32, y: &i32| x.abs().cmp(&y.abs()));
1435
- /// assert_eq!(result, 1);
1488
+ /// let abs_cmp = |x: &i32, y: &i32| x.abs().cmp(&y.abs());
1436
1489
///
1437
- /// let result = cmp::min_by(-2, 3, |x: &i32, y: &i32| x.abs().cmp(&y.abs()));
1438
- /// assert_eq!(result, -2);
1490
+ /// let result = cmp::min_by(2, -1, abs_cmp);
1491
+ /// assert_eq!(result, -1);
1492
+ ///
1493
+ /// let result = cmp::min_by(2, -3, abs_cmp);
1494
+ /// assert_eq!(result, 2);
1495
+ ///
1496
+ /// let result = cmp::min_by(1, -1, abs_cmp);
1497
+ /// assert_eq!(result, 1);
1439
1498
/// ```
1440
1499
#[ inline]
1441
1500
#[ must_use]
@@ -1456,11 +1515,14 @@ pub fn min_by<T, F: FnOnce(&T, &T) -> Ordering>(v1: T, v2: T, compare: F) -> T {
1456
1515
/// ```
1457
1516
/// use std::cmp;
1458
1517
///
1459
- /// let result = cmp::min_by_key(- 2, 1, |x: &i32| x.abs());
1460
- /// assert_eq!(result, 1);
1518
+ /// let result = cmp::min_by_key(2, - 1, |x: &i32| x.abs());
1519
+ /// assert_eq!(result, - 1);
1461
1520
///
1462
- /// let result = cmp::min_by_key(-2, 2, |x: &i32| x.abs());
1463
- /// assert_eq!(result, -2);
1521
+ /// let result = cmp::min_by_key(2, -3, |x: &i32| x.abs());
1522
+ /// assert_eq!(result, 2);
1523
+ ///
1524
+ /// let result = cmp::min_by_key(1, -1, |x: &i32| x.abs());
1525
+ /// assert_eq!(result, 1);
1464
1526
/// ```
1465
1527
#[ inline]
1466
1528
#[ must_use]
@@ -1483,6 +1545,24 @@ pub fn min_by_key<T, F: FnMut(&T) -> K, K: Ord>(v1: T, v2: T, mut f: F) -> T {
1483
1545
/// assert_eq!(cmp::max(1, 2), 2);
1484
1546
/// assert_eq!(cmp::max(2, 2), 2);
1485
1547
/// ```
1548
+ /// ```
1549
+ /// use std::cmp::{self, Ordering};
1550
+ ///
1551
+ /// #[derive(Eq)]
1552
+ /// struct Equal(&'static str);
1553
+ ///
1554
+ /// impl PartialEq for Equal {
1555
+ /// fn eq(&self, other: &Self) -> bool { true }
1556
+ /// }
1557
+ /// impl PartialOrd for Equal {
1558
+ /// fn partial_cmp(&self, other: &Self) -> Option<Ordering> { Some(Ordering::Equal) }
1559
+ /// }
1560
+ /// impl Ord for Equal {
1561
+ /// fn cmp(&self, other: &Self) -> Ordering { Ordering::Equal }
1562
+ /// }
1563
+ ///
1564
+ /// assert_eq!(cmp::max(Equal("v1"), Equal("v2")).0, "v2");
1565
+ /// ```
1486
1566
#[ inline]
1487
1567
#[ must_use]
1488
1568
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -1500,11 +1580,16 @@ pub fn max<T: Ord>(v1: T, v2: T) -> T {
1500
1580
/// ```
1501
1581
/// use std::cmp;
1502
1582
///
1503
- /// let result = cmp::max_by(-2, 1, |x: &i32, y: &i32| x.abs().cmp(&y.abs()));
1583
+ /// let abs_cmp = |x: &i32, y: &i32| x.abs().cmp(&y.abs());
1584
+ ///
1585
+ /// let result = cmp::max_by(3, -2, abs_cmp) ;
1586
+ /// assert_eq!(result, 3);
1587
+ ///
1588
+ /// let result = cmp::max_by(1, -2, abs_cmp);
1504
1589
/// assert_eq!(result, -2);
1505
1590
///
1506
- /// let result = cmp::max_by(-2, 2, |x: &i32, y: &i32| x.abs().cmp(&y.abs())) ;
1507
- /// assert_eq!(result, 2 );
1591
+ /// let result = cmp::max_by(1, -1, abs_cmp) ;
1592
+ /// assert_eq!(result, -1 );
1508
1593
/// ```
1509
1594
#[ inline]
1510
1595
#[ must_use]
@@ -1525,11 +1610,14 @@ pub fn max_by<T, F: FnOnce(&T, &T) -> Ordering>(v1: T, v2: T, compare: F) -> T {
1525
1610
/// ```
1526
1611
/// use std::cmp;
1527
1612
///
1528
- /// let result = cmp::max_by_key(-2, 1, |x: &i32| x.abs());
1613
+ /// let result = cmp::max_by_key(3, -2, |x: &i32| x.abs());
1614
+ /// assert_eq!(result, 3);
1615
+ ///
1616
+ /// let result = cmp::max_by_key(1, -2, |x: &i32| x.abs());
1529
1617
/// assert_eq!(result, -2);
1530
1618
///
1531
- /// let result = cmp::max_by_key(-2, 2 , |x: &i32| x.abs());
1532
- /// assert_eq!(result, 2 );
1619
+ /// let result = cmp::max_by_key(1, -1 , |x: &i32| x.abs());
1620
+ /// assert_eq!(result, -1 );
1533
1621
/// ```
1534
1622
#[ inline]
1535
1623
#[ must_use]
@@ -1549,13 +1637,32 @@ pub fn max_by_key<T, F: FnMut(&T) -> K, K: Ord>(v1: T, v2: T, mut f: F) -> T {
1549
1637
/// use std::cmp;
1550
1638
///
1551
1639
/// assert_eq!(cmp::minmax(1, 2), [1, 2]);
1552
- /// assert_eq!(cmp::minmax(2, 2 ), [2 , 2]);
1640
+ /// assert_eq!(cmp::minmax(2, 1 ), [1 , 2]);
1553
1641
///
1554
1642
/// // You can destructure the result using array patterns
1555
1643
/// let [min, max] = cmp::minmax(42, 17);
1556
1644
/// assert_eq!(min, 17);
1557
1645
/// assert_eq!(max, 42);
1558
1646
/// ```
1647
+ /// ```
1648
+ /// #![feature(cmp_minmax)]
1649
+ /// use std::cmp::{self, Ordering};
1650
+ ///
1651
+ /// #[derive(Eq)]
1652
+ /// struct Equal(&'static str);
1653
+ ///
1654
+ /// impl PartialEq for Equal {
1655
+ /// fn eq(&self, other: &Self) -> bool { true }
1656
+ /// }
1657
+ /// impl PartialOrd for Equal {
1658
+ /// fn partial_cmp(&self, other: &Self) -> Option<Ordering> { Some(Ordering::Equal) }
1659
+ /// }
1660
+ /// impl Ord for Equal {
1661
+ /// fn cmp(&self, other: &Self) -> Ordering { Ordering::Equal }
1662
+ /// }
1663
+ ///
1664
+ /// assert_eq!(cmp::minmax(Equal("v1"), Equal("v2")).map(|v| v.0), ["v1", "v2"]);
1665
+ /// ```
1559
1666
#[ inline]
1560
1667
#[ must_use]
1561
1668
#[ unstable( feature = "cmp_minmax" , issue = "115939" ) ]
@@ -1576,11 +1683,14 @@ where
1576
1683
/// #![feature(cmp_minmax)]
1577
1684
/// use std::cmp;
1578
1685
///
1579
- /// assert_eq!(cmp::minmax_by(-2, 1, |x: &i32, y: &i32| x.abs().cmp(&y.abs())), [1, -2]);
1580
- /// assert_eq!(cmp::minmax_by(-2, 2, |x: &i32, y: &i32| x.abs().cmp(&y.abs())), [-2, 2]);
1686
+ /// let abs_cmp = |x: &i32, y: &i32| x.abs().cmp(&y.abs());
1687
+ ///
1688
+ /// assert_eq!(cmp::minmax_by(-2, 1, abs_cmp), [1, -2]);
1689
+ /// assert_eq!(cmp::minmax_by(-1, 2, abs_cmp), [-1, 2]);
1690
+ /// assert_eq!(cmp::minmax_by(-2, 2, abs_cmp), [-2, 2]);
1581
1691
///
1582
1692
/// // You can destructure the result using array patterns
1583
- /// let [min, max] = cmp::minmax_by(-42, 17, |x: &i32, y: &i32| x.abs().cmp(&y.abs()) );
1693
+ /// let [min, max] = cmp::minmax_by(-42, 17, abs_cmp );
1584
1694
/// assert_eq!(min, 17);
1585
1695
/// assert_eq!(max, -42);
1586
1696
/// ```
0 commit comments