use std::hint::black_box;
use std::thread;
use std::time::{Duration, Instant};
use stoolap_jemalloc::{Jemalloc, background};
#[global_allocator]
static GLOBAL: Jemalloc = Jemalloc::new();
#[test]
fn returns_memory_while_the_process_is_idle() {
assert!(!background::is_running());
assert!(background::start());
assert!(!background::start(), "a second start does nothing");
assert!(background::is_running());
let blocks: Vec<Vec<u8>> = (0..200)
.map(|i| black_box(vec![i as u8; 512 << 10]))
.collect();
let full = stoolap_jemalloc::stats().chunks;
assert!(full >= 100 << 20);
drop(blocks);
let deadline = Instant::now() + Duration::from_secs(30);
loop {
let chunks = stoolap_jemalloc::stats().chunks;
if chunks < full / 4 {
break;
}
assert!(
Instant::now() < deadline,
"{chunks} of {full} chunk bytes still mapped"
);
thread::sleep(Duration::from_millis(250));
}
}