Skip to main content

ps_ecc/long/header/methods/
header_checksum.rs

1use crate::long::LongEccHeader;
2
3impl LongEccHeader {
4    /// Returns the checksum protecting the header fields, folded to 32 bits.
5    #[inline]
6    #[must_use]
7    pub const fn header_checksum(&self) -> u32 {
8        self.header_checksum
9    }
10}
11
12#[cfg(test)]
13mod tests {
14    use crate::long::header::utils::calculate_header_checksum;
15    use crate::long::{LongEccHeader, OverlapFactor};
16
17    type TestError = Box<dyn std::error::Error>;
18
19    #[test]
20    fn test_header_checksum_matches_calculated() -> Result<(), TestError> {
21        let header = LongEccHeader::new(2, OverlapFactor::Double, 86, 50, 0)?;
22
23        let packed_parity = 2 | OverlapFactor::Double.to_u8();
24        let expected = calculate_header_checksum(header.version(), packed_parity, 86, 50);
25
26        assert_eq!(header.header_checksum(), expected);
27
28        Ok(())
29    }
30
31    #[test]
32    fn test_header_checksum_differs_across_headers() -> Result<(), TestError> {
33        let first = LongEccHeader::new(2, OverlapFactor::Simple, 86, 50, 0)?;
34        let second = LongEccHeader::new(2, OverlapFactor::Simple, 87, 51, 0)?;
35
36        assert_ne!(first.header_checksum(), second.header_checksum());
37
38        Ok(())
39    }
40}