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[..]);
assert!(hdr_i.contains_key(i));
hdr_i.remove(i);
assert!(hdr_i.get(i).is_none());
hdr_i.insert(i, b);
assert!(hdr_i.contains_key(i));
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);
}