rabuf 0.3.0

randome access buffer for io
Documentation
#[macro_use]
mod helper;

#[cfg(test)]
mod test3 {
    use function_name::named;
    use rabuf::{BufFile, SmallWrite};
    use std::io::{Read, Seek};

    #[named]
    #[test]
    fn test_write_all_small_1() {
        let f = open_test_file!(function_name!());
        let mut bf = BufFile::new("tes", f).unwrap();

        let data = b"small test data";
        bf.write_all_small(data).unwrap();

        bf.rewind().unwrap();

        let mut br = vec![0u8; data.len()];
        bf.read_exact(&mut br).unwrap();

        assert_eq!(br, data);
    }

    #[named]
    #[test]
    fn test_write_all_small_2() {
        let f = open_test_file!(function_name!());
        let mut bf = BufFile::new("test_write_all_small", f).unwrap();

        bf.write_all_small(b"hello").unwrap();
        bf.write_all_small(b" world").unwrap();

        bf.rewind().unwrap();
        let mut content = Vec::new();
        bf.read_to_end(&mut content).unwrap();
        assert_eq!(content, b"hello world");
    }

    #[named]
    #[test]
    fn test_write_u64_le_slice() {
        let f = open_test_file!(function_name!());
        let mut bf = BufFile::new("tes", f).unwrap();

        let data = vec![0x0102030405060708, 0x090a0b0c0d0e0f10];
        bf.write_u64_le_slice(&data).unwrap();

        bf.rewind().unwrap();

        let mut br = vec![0u8; 16];
        bf.read_exact(&mut br).unwrap();

        let mut expected_data = vec![];
        for &val in &data {
            expected_data.extend_from_slice(&val.to_le_bytes());
        }
        assert_eq!(br, expected_data);
    }

    #[named]
    #[test]
    fn test_write_u64_le_slice2() {
        let f = open_test_file!(function_name!());
        let mut bf = BufFile::new("tes", f).unwrap();

        let data1 = vec![0x0102030405060708, 0x090a0b0c0d0e0f10];
        let data2 = vec![0x1112131415161718, 0x191a1b1c1d1e1f20];
        bf.write_u64_le_slice2(&data1, &data2).unwrap();

        bf.rewind().unwrap();

        let mut br = vec![0u8; 32];
        bf.read_exact(&mut br).unwrap();

        let mut expected_data = vec![];
        for &val in &data1 {
            expected_data.extend_from_slice(&val.to_le_bytes());
        }
        for &val in &data2 {
            expected_data.extend_from_slice(&val.to_le_bytes());
        }
        assert_eq!(br, expected_data);
    }

    #[named]
    #[test]
    fn test_write_zero() {
        let f = open_test_file!(function_name!());
        let mut bf = BufFile::new("tes", f).unwrap();

        let size_to_write = 10;
        bf.write_zero(size_to_write).unwrap();

        bf.rewind().unwrap();

        let mut br = vec![0u8; size_to_write as usize];
        bf.read_exact(&mut br).unwrap();
        assert_eq!(br, vec![0u8; size_to_write as usize]);
    }

    #[named]
    #[test]
    fn test_write_zero_zero_bytes() {
        let f = open_test_file!(function_name!());
        let mut bf = BufFile::new("tes", f).unwrap();
        bf.write_zero(0).unwrap();
        bf.rewind().unwrap();
        let mut br = Vec::new();
        bf.read_to_end(&mut br).unwrap();
        assert!(br.is_empty());
    }

    #[named]
    #[test]
    fn test_write_zero_to_empty_file() {
        let f = open_test_file!(function_name!());
        let mut bf = BufFile::new("tes", f).unwrap();
        let size_to_write = 100;
        bf.write_zero(size_to_write).unwrap();
        bf.rewind().unwrap();
        let mut br = vec![0u8; size_to_write as usize];
        bf.read_exact(&mut br).unwrap();
        assert_eq!(br, vec![0u8; size_to_write as usize]);
    }
}