Skip to main content

ps_ecc/long/header/methods/
parity.rs

1use crate::long::LongEccHeader;
2
3impl LongEccHeader {
4    /// Returns the error-correction capability per segment: the number of byte errors each segment can recover from.
5    #[inline]
6    #[must_use]
7    pub const fn parity(&self) -> u8 {
8        self.parity & 0x3F
9    }
10}
11
12#[cfg(test)]
13mod tests {
14    use crate::long::{LongEccHeader, OverlapFactor};
15    use crate::MAX_PARITY;
16
17    type TestError = Box<dyn std::error::Error>;
18
19    #[test]
20    fn test_parity_masks_overlap_factor() -> Result<(), TestError> {
21        for factor in [
22            OverlapFactor::Simple,
23            OverlapFactor::Double,
24            OverlapFactor::Triple,
25            OverlapFactor::Quadruple,
26        ] {
27            let header = LongEccHeader::new(5, factor, 92, 50, 0)?;
28
29            assert_eq!(header.parity(), 5);
30        }
31
32        Ok(())
33    }
34
35    #[test]
36    fn test_parity_zero() -> Result<(), TestError> {
37        let header = LongEccHeader::new(0, OverlapFactor::Simple, 82, 50, 0)?;
38
39        assert_eq!(header.parity(), 0);
40
41        Ok(())
42    }
43
44    #[test]
45    fn test_parity_maximum() -> Result<(), TestError> {
46        let header = LongEccHeader::new(MAX_PARITY, OverlapFactor::Simple, 208, 50, 0)?;
47
48        assert_eq!(header.parity(), MAX_PARITY);
49
50        Ok(())
51    }
52}