1#![no_std]
7#![deny(missing_docs)]
8
9use core::{cmp::Ordering, iter::Iterator};
10
11pub fn is_unique_sorted_by<T: Ord, I: Iterator<Item = T>, F: FnMut(&T, &T) -> Ordering>(
13 mut iterator: I,
14 mut cmp: F,
15) -> bool {
16 let mut previous = match iterator.next() {
17 Some(e) => e,
18 None => return true,
19 };
20
21 for curr in iterator {
22 if cmp(&previous, &curr) != Ordering::Less {
23 return false;
24 }
25 previous = curr;
26 }
27
28 true
29}
30
31pub fn is_unique_sorted<T: Ord, I: Iterator<Item = T>>(iterator: I) -> bool {
33 is_unique_sorted_by(iterator, T::cmp)
34}
35
36pub fn is_sorted_by<T: Ord, I: Iterator<Item = T>, F: FnMut(&T, &T) -> Ordering>(mut iterator: I, mut cmp: F) -> bool {
38 let mut previous = match iterator.next() {
39 Some(e) => e,
40 None => return true,
41 };
42
43 for curr in iterator {
44 if cmp(&previous, &curr) == Ordering::Greater {
45 return false;
46 }
47 previous = curr;
48 }
49
50 true
51}
52
53pub fn is_sorted<T: Ord, I: Iterator<Item = T>>(iterator: I) -> bool {
55 is_sorted_by(iterator, T::cmp)
56}