vsdb_core 13.4.5

A std-collection-like database
Documentation
use ruc::*;
use std::borrow::Cow;
use vsdb_core::{MapxRaw, vsdb_set_base_dir};

#[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 = MapxRaw::new();

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

        (0..cnt)
            .map(|i: usize| (i.to_be_bytes(), i.to_be_bytes()))
            .for_each(|(i, b)| {
                hdr_i.entry(&i).or_insert(&b);
                assert_eq!(&hdr_i.get(i).unwrap()[..], &i[..]);

                // Remove check
                assert!(hdr_i.contains_key(i));
                hdr_i.remove(i);
                assert!(hdr_i.get(i).is_none());

                // Insert checks
                hdr_i.insert(i, b);
                assert!(hdr_i.contains_key(i));

                // Overwrite check
                hdr_i.insert(i, b);
                assert!(hdr_i.contains_key(i));
            });

        pnk!(postcard::to_allocvec(&hdr_i))
    };

    let mut reloaded = pnk!(postcard::from_bytes::<MapxRaw>(&hdr));

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

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

    reloaded.clear();

    reloaded.insert([1], [1]);
    reloaded.insert([4], [4]);
    reloaded.insert([6], [6]);
    reloaded.insert([80], [80]);

    assert!(
        reloaded
            .range(Cow::Borrowed(&[][..])..Cow::Borrowed(&[1][..]))
            .next()
            .is_none()
    );
    assert_eq!(
        vec![4],
        reloaded
            .range(Cow::Borrowed(&[2][..])..Cow::Borrowed(&[10][..]))
            .next()
            .unwrap()
            .1
    );
    assert_eq!(
        vec![6],
        reloaded
            .range(Cow::Borrowed(&[2][..])..Cow::Borrowed(&[10][..]))
            .next_back()
            .unwrap()
            .1
    );

    assert_eq!(vec![80], reloaded.get_ge([79]).unwrap().1);
    assert_eq!(vec![80], reloaded.get_ge([80]).unwrap().1);
    assert_eq!(vec![80], reloaded.get_le([80]).unwrap().1);
    assert_eq!(vec![80], reloaded.get_le([100]).unwrap().1);
}