vsdb 13.4.5

A std-collection-like database
Documentation
use ruc::*;
use serde::{Deserialize, Serialize};
use vsdb::{ValueEnDe, basic::mapx_ord_rawkey::MapxOrdRawKey, vsdb_set_base_dir};

#[derive(Serialize, Deserialize, Default, Debug, Eq, PartialEq, Clone)]
struct SampleBlock {
    data: Vec<u8>,
}

fn gen_sample(bytes: &[u8]) -> SampleBlock {
    SampleBlock {
        data: bytes.to_vec(),
    }
}

#[test]
fn basic_cases() {
    let cnt = 200;
    info_omit!(vsdb_set_base_dir(format!(
        "/tmp/vsdb_testing/{}",
        rand::random::<u64>()
    )));

    let hdr = {
        let mut hdr_i = MapxOrdRawKey::new();

        (0usize..cnt).map(|i| i.to_be_bytes()).for_each(|i| {
            assert!(hdr_i.get(i).is_none());
        });

        (0usize..cnt)
            .map(|i| i.to_be_bytes())
            .map(|i| (i, gen_sample(&i)))
            .for_each(|(i, b)| {
                hdr_i.entry(&i[..]).or_insert(b.clone());
                assert_eq!(&hdr_i.get(i).unwrap().data, &i);
                hdr_i.remove(i);
                assert!(hdr_i.get(i).is_none());
                hdr_i.insert(i, &b);
                hdr_i.insert(i, &b);
            });

        <MapxOrdRawKey<SampleBlock> as ValueEnDe>::encode(&hdr_i)
    };

    let mut reloaded = pnk!(<MapxOrdRawKey<SampleBlock> as ValueEnDe>::decode(&hdr));

    (0usize..cnt).map(|i| i.to_be_bytes()).for_each(|i| {
        assert_eq!(&i[..], &reloaded.get(i).unwrap().data);
    });

    (1usize..cnt).for_each(|i| {
        reloaded.get_mut(i.to_be_bytes()).unwrap().data = (1 + i).to_be_bytes().to_vec();
        assert_eq!(
            &reloaded.get(i.to_be_bytes()).unwrap().data,
            &(1 + i).to_be_bytes()[..]
        );
        assert!(reloaded.contains_key(i.to_be_bytes()));
        reloaded.remove(i.to_be_bytes());
        assert!(!reloaded.contains_key(i.to_be_bytes()));
    });

    reloaded.clear();
}