use milhouse::mem::{MemorySize, MemoryTracker};
#[global_allocator]
static ALLOC: dhat::Alloc = dhat::Alloc;
pub fn memory_tracker_accuracy_test<T: MemorySize>(value_producer: impl FnOnce() -> T) {
let profiler = dhat::Profiler::builder().testing().build();
let pre_stats = dhat::HeapStats::get();
let value = Box::new(value_producer());
let mut mem_tracker = MemoryTracker::default();
let stats = mem_tracker.track_item(&*value);
assert_eq!(stats.total_size, mem_tracker.total_size());
drop(mem_tracker);
let post_stats = dhat::HeapStats::get();
let dhat_total_size = post_stats.curr_bytes - pre_stats.curr_bytes;
dhat::assert_eq!(dhat_total_size, stats.total_size);
drop(profiler);
}