1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
use crate::{arrayvec::ArrayVec, len::LengthType, mem::SpareMemoryPolicy};
use core::cmp::{Ord, Ordering, PartialOrd};

impl<T, L, SM, const C: usize> PartialOrd for ArrayVec<T, L, SM, C>
where
    T: PartialOrd,
    L: LengthType,
    SM: SpareMemoryPolicy<T>,
{
    #[inline]
    fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
        PartialOrd::partial_cmp(&**self, &**other)
    }
}

impl<T, L, SM, const C: usize> Ord for ArrayVec<T, L, SM, C>
where
    T: Ord,
    L: LengthType,
    SM: SpareMemoryPolicy<T>,
{
    #[inline]
    fn cmp(&self, other: &Self) -> Ordering {
        Ord::cmp(&**self, &**other)
    }
}

#[cfg(test)]
mod testing {
    use crate as cds;
    use cds::array_vec;
    use core::cmp::Ordering;

    #[test]
    fn test_partial_ord() {
        let a = array_vec![3; u64; 1, 2, 3];
        let b = array_vec![3; u64; 2, 2, 3];

        assert!(a < b);
        assert!(a <= b);
        assert!(!(a >= b));
        assert!(!(a > b));

        assert!(b > a);
        assert!(b >= a);
        assert!(!(b <= a));
        assert!(!(b < a));
    }

    #[test]
    fn test_ord() {
        let a = array_vec![3; u64; 1, 2, 3];
        let b = array_vec![3; u64; 2, 2, 3];

        assert_eq!(a.cmp(&b), Ordering::Less);
        assert_eq!(b.cmp(&a), Ordering::Greater);
        assert_eq!(a.cmp(&a), Ordering::Equal);
    }
}