libcore: combine cmp::Ordering instances in lexical order.

This commit is contained in:
Huon Wilson 2013-03-31 01:34:37 +11:00
parent 3698ea7e54
commit 85b82c763b

View File

@ -116,6 +116,19 @@ fn cmp(&self, other: &$t) -> Ordering {
totalord_impl!(int) totalord_impl!(int)
totalord_impl!(uint) totalord_impl!(uint)
/**
Return `o1` if it is not `Equal`, otherwise `o2`. Simulates the
lexical ordering on a type `(int, int)`.
*/
// used in deriving code in libsyntax
#[inline(always)]
pub fn lexical_ordering(o1: Ordering, o2: Ordering) -> Ordering {
match o1 {
Equal => o2,
_ => o1
}
}
/** /**
* Trait for values that can be compared for a sort-order. * Trait for values that can be compared for a sort-order.
* *
@ -184,6 +197,8 @@ pub fn max<T:Ord>(v1: T, v2: T) -> T {
#[cfg(test)] #[cfg(test)]
mod test { mod test {
use super::lexical_ordering;
#[test] #[test]
fn test_int_totalord() { fn test_int_totalord() {
assert_eq!(5.cmp(&10), Less); assert_eq!(5.cmp(&10), Less);
@ -204,4 +219,16 @@ fn test_ordering_order() {
assert!(Less < Equal); assert!(Less < Equal);
assert_eq!(Greater.cmp(&Less), Greater); assert_eq!(Greater.cmp(&Less), Greater);
} }
#[test]
fn test_lexical_ordering() {
fn t(o1: Ordering, o2: Ordering, e: Ordering) {
assert_eq!(lexical_ordering(o1, o2), e);
}
for [Less, Equal, Greater].each |&o| {
t(Less, o, Less);
t(Equal, o, o);
t(Greater, o, Greater);
}
}
} }