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][..]))
.rev()
.next()
.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);
}