Skip to content

Instantly share code, notes, and snippets.

@omasanori
Last active December 20, 2015 20:09
Show Gist options
  • Save omasanori/6188497 to your computer and use it in GitHub Desktop.
Save omasanori/6188497 to your computer and use it in GitHub Desktop.
fn seq_lt<A: Eq + Ord, T: Iterator<A>>(mut a: T, mut b: T) -> bool {
loop {
match (a.next(), b.next()) {
(None, None) => return false,
(None, _ ) => return true,
(_, None) => return false,
(Some(x), Some(y)) => if !x.eq(&y) { return x.lt(&y) }
}
}
}
fn seq_lt2<A: Ord, T: Iterator<A>>(mut a: T, mut b: T) -> bool {
loop {
match (a.next(), b.next()) {
(None, None) => return false,
(None, _ ) => return true,
(_, None) => return false,
(Some(x), Some(y)) => if x.lt(&y) || y.lt(&x) { return x.lt(&y) }
}
}
}
fn main() {
let x = [1];
let y = [1];
assert!(seq_lt(x.iter(), y.iter()) == seq_lt2(x.iter(), y.iter()));
let x = [1, 2];
let y = [1];
assert!(seq_lt(x.iter(), y.iter()) == seq_lt2(x.iter(), y.iter()));
let x = [1];
let y = [1, 2];
assert!(seq_lt(x.iter(), y.iter()) == seq_lt2(x.iter(), y.iter()));
let x = [1, 2];
let y = [1, 3];
assert!(seq_lt(x.iter(), y.iter()) == seq_lt2(x.iter(), y.iter()));
let x = [1, 3];
let y = [1, 2];
assert!(seq_lt(x.iter(), y.iter()) == seq_lt2(x.iter(), y.iter()));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment