*/
#[allow(missing_doc)];
+#[allow(default_methods)]; // NOTE: Remove when allowed in stage0
/**
* Trait for values that can be compared for equality and inequality.
* unequal. For example, with the built-in floating-point types `a == b` and `a != b` will both
* evaluate to false if either `a` or `b` is NaN (cf. IEEE 754-2008 section 5.11).
*
+* Eq only requires the `eq` method to be implemented; `ne` is its negation by default.
+*
* Eventually, this will be implemented by default for types that implement `TotalEq`.
*/
#[lang="eq"]
pub trait Eq {
fn eq(&self, other: &Self) -> bool;
- fn ne(&self, other: &Self) -> bool;
+ fn ne(&self, other: &Self) -> bool { !self.eq(other) }
}
/// Trait for equality comparisons where `a == b` and `a != b` are strict inverses.
* for compatibility with floating-point NaN semantics
* (cf. IEEE 754-2008 section 5.11).
*/
-#[allow(default_methods)] // NOTE: Remove when allowed in stage0
#[lang="ord"]
pub trait Ord {
fn lt(&self, other: &Self) -> bool;
// option. This file may not be copied, modified, or distributed
// except according to those terms.
-// Test default methods in Ord
+// Test default methods in Ord and Eq
//
+struct Fool(bool);
+
+impl Eq for Fool {
+ fn eq(&self, other: &Fool) -> bool {
+ **self != **other
+ }
+}
+
struct Int(int);
impl Ord for Int {
assert!(RevInt(1) > RevInt(2));
assert!(RevInt(1) >= RevInt(2));
assert!(RevInt(1) >= RevInt(1));
+
+ assert!(Fool(true) == Fool(false));
+ assert!(Fool(true) != Fool(true));
+ assert!(Fool(false) != Fool(false));
+ assert!(Fool(false) == Fool(true));
}