noodles_cram/codecs/
rans_4x8.rs

1//! rANS 4x8 codec.
2
3mod decode;
4mod encode;
5mod order;
6
7pub use self::order::Order;
8pub(crate) use self::{decode::decode, encode::encode};
9
10// ยง 2.2 "rANS entropy encoding" (2023-03-15)
11const ALPHABET_SIZE: usize = 256; // b
12const STATE_COUNT: usize = 4; // |R|
13const LOWER_BOUND: u32 = 1 << 23; // L
14
15#[cfg(test)]
16mod tests {
17    use std::io;
18
19    use super::*;
20
21    #[test]
22    fn test_self_0() -> io::Result<()> {
23        let data = b"noodles";
24
25        let compressed_data = encode(Order::Zero, data)?;
26
27        let mut reader = &compressed_data[..];
28        let decompressed_data = decode(&mut reader)?;
29
30        assert_eq!(decompressed_data, data);
31
32        Ok(())
33    }
34
35    #[test]
36    fn test_self_1() -> io::Result<()> {
37        let data = b"noodles";
38
39        let compressed_data = encode(Order::One, data)?;
40
41        let mut reader = &compressed_data[..];
42        let decompressed_data = decode(&mut reader)?;
43
44        assert_eq!(decompressed_data, data);
45
46        Ok(())
47    }
48}