mmap-storage 0.6.0

Memory map backed storage
Documentation
extern crate mmap_storage;

use std::io::Write;
use std::fs;
use mmap_storage::file::Storage;

#[test]
fn test_it_works() {
    const STORAGE_PATH: &'static str = "test_file.bin";

    let _ = fs::remove_file(STORAGE_PATH);

    {
        let mut storage = Storage::open(STORAGE_PATH).expect("To create storage");
        assert_eq!(storage.capacity(), 1);
        storage.resize(1).expect("Reduce file size");
        assert_eq!(storage.capacity(), 1);

        let data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 1];
        storage.write(&data).expect("To extend with 10 bytes");
        assert_eq!(storage.capacity(), data.len());
        assert_eq!(storage.as_slice(), data);

        storage.write_all(&data).expect("To extend with another 10 bytes");
        assert_eq!(storage.capacity(), data.len() + data.len());
        assert_eq!(storage.as_slice()[..data.len()], data);
        assert_eq!(storage.as_slice()[data.len()..], data);

        storage.resize(data.len()).expect("To resize to 10 bytes");
        assert_eq!(storage.capacity(), data.len());

        let data = [10, 9, 8, 1, 2, 3, 4, 5, 6, 7];
        storage.copy_from_slice(&data);
        assert_eq!(storage.capacity(), data.len());
        assert_eq!(storage.as_slice(), data);

        let data = [2, 3, 4, 5, 6, 7];
        storage.put_data(&data).expect("To put data");
        assert_eq!(storage.capacity(), data.len());
        assert_eq!(storage.as_slice(), data);

        let vec_data = storage.to_vec();
        assert_eq!(vec_data, data);

        drop(storage);

        let storage = Storage::open(STORAGE_PATH).expect("To open storage");
        assert_eq!(storage.capacity(), data.len());
        assert_eq!(storage.as_slice(), data);

    }

    let _ = fs::remove_file(STORAGE_PATH);
}