ps-ecc 0.1.0-9

Generates Reed-Solomon error correction codes.
Documentation
use crate::long::LongEccHeader;

impl LongEccHeader {
    /// Returns the checksum protecting the header fields, folded to 32 bits.
    #[inline]
    #[must_use]
    pub const fn header_checksum(&self) -> u32 {
        self.header_checksum
    }
}

#[cfg(test)]
mod tests {
    use crate::long::header::utils::calculate_header_checksum;
    use crate::long::{LongEccHeader, OverlapFactor};

    type TestError = Box<dyn std::error::Error>;

    #[test]
    fn test_header_checksum_matches_calculated() -> Result<(), TestError> {
        let header = LongEccHeader::new(2, OverlapFactor::Double, 86, 50, 0)?;

        let packed_parity = 2 | OverlapFactor::Double.to_u8();
        let expected = calculate_header_checksum(header.version(), packed_parity, 86, 50);

        assert_eq!(header.header_checksum(), expected);

        Ok(())
    }

    #[test]
    fn test_header_checksum_differs_across_headers() -> Result<(), TestError> {
        let first = LongEccHeader::new(2, OverlapFactor::Simple, 86, 50, 0)?;
        let second = LongEccHeader::new(2, OverlapFactor::Simple, 87, 51, 0)?;

        assert_ne!(first.header_checksum(), second.header_checksum());

        Ok(())
    }
}