cds 0.10.0

Collection of Optimized Data Structures
Documentation
use crate::{arraystring::ArrayString, len::LengthType, mem::SpareMemoryPolicy};
use core::cmp::{Ord, Ordering, PartialOrd};

impl<L, UL, SM, USM, const C: usize, const UC: usize> PartialOrd<ArrayString<UC, UL, USM>>
    for ArrayString<C, L, SM>
where
    L: LengthType,
    UL: LengthType,
    SM: SpareMemoryPolicy<u8>,
    USM: SpareMemoryPolicy<u8>,
{
    #[inline]
    fn partial_cmp(&self, other: &ArrayString<UC, UL, USM>) -> Option<Ordering> {
        PartialOrd::partial_cmp(self.as_str(), other.as_str())
    }
}

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

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

    #[test]
    fn test_partial_ord() {
        let s1 = array_str![8; "cds"];
        let s2 = array_str![16; "cds"];
        let s3 = array_str![6; "CDS"];
        let s4 = array_str![3; "def"];
        assert_eq!(s1.partial_cmp(&s2), Some(Ordering::Equal));
        assert_eq!(s1.partial_cmp(&s3), Some(Ordering::Greater));
        assert_eq!(s1.partial_cmp(&s4), Some(Ordering::Less));
    }

    #[test]
    fn test_ord() {
        let s1 = array_str![8; "cds"];
        let s2 = array_str![8; "cds"];
        let s3 = array_str![8; "CDS"];
        let s4 = array_str![8; "def"];
        assert_eq!(s1.cmp(&s2), Ordering::Equal);
        assert_eq!(s1.cmp(&s3), Ordering::Greater);
        assert_eq!(s1.cmp(&s4), Ordering::Less);
    }
}