use stoolap_jemalloc::Jemalloc;
#[global_allocator]
static GLOBAL: Jemalloc = Jemalloc::new();
#[test]
fn stats_follow_huge_allocations_and_purge() {
let before = stoolap_jemalloc::stats();
let block = vec![1u8; 8 << 20];
let during = stoolap_jemalloc::stats();
assert!(during.huge >= before.huge + (8 << 20));
assert_eq!(
during.mapped(),
during.chunks + during.huge + during.huge_cached + during.metadata
);
drop(block);
let freed = stoolap_jemalloc::stats();
assert!(freed.huge_cached >= 8 << 20);
assert_eq!(freed.huge, before.huge);
let reused = vec![2u8; 8 << 20];
assert!(stoolap_jemalloc::stats().huge_cached + (8 << 20) <= freed.huge_cached);
drop(reused);
let many: Vec<Vec<u8>> = (0..2000).map(|i| vec![i as u8; 2000]).collect();
drop(many);
stoolap_jemalloc::purge();
let after = stoolap_jemalloc::stats();
assert_eq!(after.huge_cached, 0);
assert_eq!(after.huge, before.huge);
assert!(after.chunks <= during.chunks + (4 << 20));
}