use std::{cmp::Ordering, fmt::Debug};
pub trait TestIterator: Iterator {
fn only(mut self) -> Self::Item
where
Self: Sized,
Self::Item: Debug,
{
let item = unwrap!(self.next(), "Expected one element - got none.");
assert!(
self.by_ref().peekable().peek().is_none(),
"Expected one element - got more (excess: {:?}).",
self.collect::<Vec<_>>()
);
item
}
fn itr_is_sorted(mut self) -> bool
where
Self: Sized,
Self::Item: PartialOrd,
{
if let Some(mut first) = self.next() {
for second in self {
match first.partial_cmp(&second) {
Some(Ordering::Less) | Some(Ordering::Equal) => {
first = second;
}
_ => return false,
}
}
}
true
}
}
impl<I: Iterator> TestIterator for I {}