Skip to main content

ps_ecc/long/header/methods/
parity_bytes.rs

1use crate::long::LongEccHeader;
2
3impl LongEccHeader {
4    /// Returns the number of parity bytes per segment: `2 * parity`, two
5    /// per correctable error.
6    #[inline]
7    #[must_use]
8    pub const fn parity_bytes(&self) -> u8 {
9        self.parity() << 1
10    }
11}
12
13#[cfg(test)]
14mod tests {
15    use crate::long::{LongEccHeader, OverlapFactor};
16    use crate::MAX_PARITY;
17
18    type TestError = Box<dyn std::error::Error>;
19
20    #[test]
21    fn test_parity_bytes_doubles_parity() -> Result<(), TestError> {
22        let header = LongEccHeader::new(3, OverlapFactor::Simple, 88, 50, 0)?;
23
24        assert_eq!(header.parity_bytes(), 6);
25
26        Ok(())
27    }
28
29    #[test]
30    fn test_parity_bytes_zero() -> Result<(), TestError> {
31        let header = LongEccHeader::new(0, OverlapFactor::Simple, 82, 50, 0)?;
32
33        assert_eq!(header.parity_bytes(), 0);
34
35        Ok(())
36    }
37
38    #[test]
39    fn test_parity_bytes_ignores_overlap_bits() -> Result<(), TestError> {
40        let header = LongEccHeader::new(5, OverlapFactor::Quadruple, 92, 50, 0)?;
41
42        assert_eq!(header.parity_bytes(), 10);
43
44        Ok(())
45    }
46
47    #[test]
48    fn test_parity_bytes_maximum() -> Result<(), TestError> {
49        let header = LongEccHeader::new(MAX_PARITY, OverlapFactor::Simple, 208, 50, 0)?;
50
51        assert_eq!(header.parity_bytes(), 126);
52
53        Ok(())
54    }
55}