use rusty_alloc::alloc::{free, malloc};
use rusty_alloc::stats::process_info;
use rusty_alloc::types::LARGE_OBJ_SIZE_MAX;
fn rss() -> usize {
process_info().3
}
#[test]
fn a_freed_huge_block_is_purged_when_purging_is_on() {
rusty_alloc::options::set(15, 0); let size = 3 * LARGE_OBJ_SIZE_MAX;
let p = malloc(size);
assert!(!p.is_null());
unsafe { core::ptr::write_bytes(p, 0x5A, size) };
let live = rss();
unsafe { free(p) };
let after = rss();
rusty_alloc::options::set(15, -1); if live == 0 {
return; }
let returned = live.saturating_sub(after);
assert!(
returned >= size / 2,
"freeing a {size}-byte huge block returned only {returned} bytes \
(resident {live} -> {after}); its pages stayed in the arena"
);
}