Skip to main content

ps_ecc/long/header/methods/
segment_length.rs

1use crate::long::LongEccHeader;
2
3impl LongEccHeader {
4    /// Usable data bytes per 255-byte segment: 255 minus the `2 * parity` parity bytes.
5    #[inline]
6    #[must_use]
7    pub const fn segment_length(&self) -> u8 {
8        255 - self.parity_bytes()
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_segment_length_zero_parity() -> Result<(), TestError> {
21        let header = LongEccHeader::new(0, OverlapFactor::Simple, 82, 50, 0)?;
22
23        assert_eq!(header.segment_length(), 255);
24
25        Ok(())
26    }
27
28    #[test]
29    fn test_segment_length_subtracts_parity_bytes() -> Result<(), TestError> {
30        let header = LongEccHeader::new(2, OverlapFactor::Simple, 86, 50, 0)?;
31
32        assert_eq!(header.segment_length(), 251);
33
34        Ok(())
35    }
36
37    #[test]
38    fn test_segment_length_maximum_parity() -> Result<(), TestError> {
39        let header = LongEccHeader::new(MAX_PARITY, OverlapFactor::Simple, 208, 50, 0)?;
40
41        assert_eq!(header.segment_length(), 129);
42
43        Ok(())
44    }
45}