padded_number/
ordering.rs1use std::cmp::Ordering;
2
3use crate::*;
4
5impl<const A: u8, const B: u8> Ord for PaddedNumber<A, B> {
6 fn cmp(&self, other: &Self) -> Ordering {
7 match self.len().cmp(&other.len()) {
8 Ordering::Less => Ordering::Less,
9 Ordering::Greater => Ordering::Greater,
10 Ordering::Equal => self.number.cmp(&other.number),
11 }
12 }
13}
14
15impl<const A: u8, const B: u8> PartialOrd for PaddedNumber<A, B> {
16 fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
17 Some(self.cmp(other))
18 }
19}
20
21#[cfg(test)]
22mod tests {
23 use crate::tests::mock_from_str;
24
25 #[test]
26 fn ordering() {
27 assert_ordering("", "0");
29 assert_ordering("0", "00");
30 assert_ordering("10", "001");
31 assert_ordering("9", "00");
32
33 assert_ordering("46720", "46730");
34
35 assert_ordering("0012", "0120");
37
38 fn assert_ordering(number_str_0: &str, number_str_1: &str) {
39 let number_0 = mock_from_str::<0, 10>(number_str_0);
40 let number_1 = mock_from_str::<0, 10>(number_str_1);
41 assert!(number_0 < number_1);
42 assert!(number_1 > number_0);
43 }
44 }
45}