capnpack 1.0.1

CapnProto's packing algorithm for any binary data
Documentation


#[cfg(test)]
mod tests {
    use capnpack::{pack, unpack};

    #[test]
    fn test_cpnp_normal_bytes() {
        let d1 = [0x01, 0x05, 0x09, 0xff, 0xf3, 0x00, 0x04, 0x00];
        let e1 = [0b01011111, 0x01, 0x05, 0x09, 0xff, 0xf3, 0x04];
        assert_eq!(pack(&d1), e1);
        assert_eq!(unpack(&e1, 100).unwrap(), d1);

        let d2 = [0x05, 0x00, 0x03, 0xfc, 0xcc, 0x00, 0x00, 0x81];
        let e2 = [0b10011101, 0x05, 0x03, 0xfc, 0xcc, 0x81];
        assert_eq!(pack(&d2), e2);
        assert_eq!(unpack(&e2, 100).unwrap(), d2);

        let d3 = [0x00, 0x00, 0x04, 0x05, 0xef];
        let e3 = [0b11111100, 0x04, 0x05, 0xef];
        assert_eq!(pack(&d3), e3);
        assert_eq!(unpack(&e3, 100).unwrap(), d3);
    }

    #[test]
    fn test_cpnp_long() {
        let d: Vec<u8> = (1..10).collect();
        let e = vec![vec![0xff], (1..9).collect(), vec![0x01], (9..10).collect()].concat();
        assert_eq!(pack(&d), e);
        assert_eq!(unpack(&e, 10).unwrap(), d);

        let d = vec![(1..10).collect(), vec![0x00], (1..25).collect()].concat();
        let e = vec![vec![0xFF], (1..9).collect(), vec![26, 9, 0x00], (1..25).collect()].concat();
        println!("{:?}", d);
        assert_eq!(pack(&d), e);
        assert_eq!(unpack(&e, 100).unwrap(), d);
    }

    #[test]
    fn test_cpnp_zeros() {
        let d = [0; 210];
        let e = vec![0x00, 209];
        assert_eq!(pack(&d), e);
        assert_eq!(unpack(&e, 10).unwrap(), d);
    }

    #[test]
    fn test_cpnp_combined() {
        let d = vec![vec![0x00], (1..8).collect(), (10..30).collect(), vec![0; 200], vec![0x23, 0x00, 0x00, 0x0c, 0xc3, 0xd5]].concat();
        let e = vec![vec![0b11111110], (1..8).collect(), vec![0xFF], (10..18).collect(), vec![12], (18..30).collect(), vec![0x00, 199], vec![0b11111001, 0x23, 0x0c, 0xc3, 0xd5]].concat();
        assert_eq!(pack(&d), e);
        assert_eq!(unpack(&e, 100).unwrap(), d);
    }

    #[test]
    fn test_cpnp_smart_pack() {
        let d = vec![(1..10).collect(), vec![0x00], (1..8).collect()].concat();
        let e = vec![vec![0xFF], (1..9).collect(), vec![9, 9, 0x00], (1..8).collect()].concat();
        println!("{:?}", d);
        assert_eq!(pack(&d), e);
        assert_eq!(unpack(&e, 100).unwrap(), d);
    
        let d = vec![(1..10).collect(), vec![0x00; 2], (1..8).collect()].concat();
        let e = vec![vec![0xFF], (1..9).collect(), vec![10, 9, 0x00, 0x00], (1..8).collect()].concat();
        println!("{:?}", d);
        assert_eq!(pack(&d), e);
        assert_eq!(unpack(&e, 100).unwrap(), d);

        let d = vec![(1..9).collect(), vec![0x00; 3], (1..8).collect()].concat();
        let e = vec![vec![0xFF], (1..9).collect(), vec![0x00, 0b11111000], (1..=5).collect(), vec![0xFF], (6..8).collect()].concat();
        println!("{:?}", d);
        assert_eq!(pack(&d), e);
        assert_eq!(unpack(&e, 100).unwrap(), d);
    
        let d = vec![(1..9).collect(), vec![0x00; 2], (1..=6).collect(), (0..8).collect()].concat();
        let e = vec![vec![0xFF], (1..9).collect(), vec![0x00, 0b11111100], (1..=6).collect(), vec![0b11111110], (1..8).collect()].concat();
        println!("{:?}", d);
        assert_eq!(pack(&d), e);
        assert_eq!(unpack(&e, 100).unwrap(), d);
    }

}