#![cfg(feature = "symbolicate")]
use mod_alloc::ModAlloc;
#[global_allocator]
static GLOBAL: ModAlloc = ModAlloc::new();
#[inline(never)]
fn mod_alloc_test_known_callsite() {
let v: Vec<u64> = Vec::with_capacity(1024);
std::hint::black_box(&v);
}
#[test]
fn symbolicates_the_test_binary_itself() {
for _ in 0..50 {
mod_alloc_test_known_callsite();
}
let report = GLOBAL.symbolicated_report();
assert!(!report.is_empty(), "expected at least one call site");
let total: u64 = report.iter().map(|s| s.count).sum();
assert!(total >= 50, "expected >= 50 aggregated events, got {total}");
let any_function_resolved = report
.iter()
.flat_map(|s| s.frames.iter())
.any(|f| f.function.is_some());
if any_function_resolved {
let target = "mod_alloc_test_known_callsite";
let found = report.iter().flat_map(|s| s.frames.iter()).any(|f| {
f.function
.as_deref()
.map(|name| name.contains(target))
.unwrap_or(false)
});
if !found {
for site in &report {
for f in &site.frames {
eprintln!(" resolved: {:#018x} -> {:?}", f.address, f.function);
}
}
}
} else {
for site in &report {
assert!(
!site.frames.is_empty(),
"every site should report at least one frame, even if unresolved"
);
}
}
}