const THEN: Ordering = Equal.then(ORDERING);
assert_eq!(THEN, Greater);
}
+
+#[test]
+fn cmp_default() {
+ // Test default methods in PartialOrd and PartialEq
+
+ #[derive(Debug)]
+ struct Fool(bool);
+
+ impl PartialEq for Fool {
+ fn eq(&self, other: &Fool) -> bool {
+ let Fool(this) = *self;
+ let Fool(other) = *other;
+ this != other
+ }
+ }
+
+ struct Int(isize);
+
+ impl PartialEq for Int {
+ fn eq(&self, other: &Int) -> bool {
+ let Int(this) = *self;
+ let Int(other) = *other;
+ this == other
+ }
+ }
+
+ impl PartialOrd for Int {
+ fn partial_cmp(&self, other: &Int) -> Option<Ordering> {
+ let Int(this) = *self;
+ let Int(other) = *other;
+ this.partial_cmp(&other)
+ }
+ }
+
+ struct RevInt(isize);
+
+ impl PartialEq for RevInt {
+ fn eq(&self, other: &RevInt) -> bool {
+ let RevInt(this) = *self;
+ let RevInt(other) = *other;
+ this == other
+ }
+ }
+
+ impl PartialOrd for RevInt {
+ fn partial_cmp(&self, other: &RevInt) -> Option<Ordering> {
+ let RevInt(this) = *self;
+ let RevInt(other) = *other;
+ other.partial_cmp(&this)
+ }
+ }
+
+ assert!(Int(2) > Int(1));
+ assert!(Int(2) >= Int(1));
+ assert!(Int(1) >= Int(1));
+ assert!(Int(1) < Int(2));
+ assert!(Int(1) <= Int(2));
+ assert!(Int(1) <= Int(1));
+
+ assert!(RevInt(2) < RevInt(1));
+ assert!(RevInt(2) <= RevInt(1));
+ assert!(RevInt(1) <= RevInt(1));
+ assert!(RevInt(1) > RevInt(2));
+ assert!(RevInt(1) >= RevInt(2));
+ assert!(RevInt(1) >= RevInt(1));
+
+ assert_eq!(Fool(true), Fool(false));
+ assert!(Fool(true) != Fool(true));
+ assert!(Fool(false) != Fool(false));
+ assert_eq!(Fool(false), Fool(true));
+}