Skip to content

Commit

Permalink
Add requirements of TotalEq and TotalOrd
Browse files Browse the repository at this point in the history
Clarify that TotalEq needs an underlying equivalence relation and that TotalOrd
needs a total ordering and specifically named the required (and sufficient)
attributes.
  • Loading branch information
tbu- committed Apr 6, 2014
1 parent 667f82a commit cf83ff8
Showing 1 changed file with 23 additions and 2 deletions.
25 changes: 23 additions & 2 deletions src/libstd/cmp.rs
Expand Up @@ -62,7 +62,18 @@ pub trait Eq {
fn ne(&self, other: &Self) -> bool { !self.eq(other) }
}

/// Trait for equality comparisons where `a == b` and `a != b` are strict inverses.
/**
* Trait for equality comparisons which are [equivalence relations](
* https://en.wikipedia.org/wiki/Equivalence_relation).
*
* This means, that in addition to `a == b` and `a != b` being strict inverses,
* the equality must be (for all `a`, `b` and `c`):
*
* - reflexive: `a == a`;
* - symmetric: `a == b` implies `b == a`; and
* - transitive: `a == b` and `b == c` implies `a == c`.
*/

pub trait TotalEq: Eq {
// FIXME #13101: this method is used solely by #[deriving] to
// assert that every component of a type implements #[deriving]
Expand Down Expand Up @@ -111,7 +122,17 @@ pub enum Ordering {
Greater = 1
}

/// Trait for types that form a total order.
/**
* Trait for types that form a [total order](
* https://en.wikipedia.org/wiki/Total_order).
*
* An order is a total order if it is (for all `a`, `b` and `c`):
*
* - total and antisymmetric: exactly one of `a < b`, `a == b` or `a > b`
* is true; and
* - transitive, `a < b` and `b < c` implies `a < c`. The same must hold for
* both `==` and `>`.
*/
pub trait TotalOrd: TotalEq + Ord {
/// This method returns an ordering between `self` and `other` values.
///
Expand Down

0 comments on commit cf83ff8

Please sign in to comment.