#[cfg(feature = "bench-internals")]
#[test]
fn bench_internals_counters_existence_and_reset() {
use aligned_vmem::{page_size, reserve_aligned, reset_bench_internals_counters};
use aligned_vmem::{
huge_decommit_attempts, unix_exact_reserve_attempts, unix_exact_reserve_hits,
unix_madvise_attempts, unix_madvise_successes, unix_munmap_attempts, unix_munmap_failures,
windows_large_page_alignment_failures, windows_large_page_plain_fallback_successes,
windows_large_page_retry_failures, windows_reserve_commit_calls,
windows_reserve_commit_single_calls, windows_reserve_commit_two_call_pairs,
windows_virtualfree_decommit_attempts, windows_virtualfree_decommit_failures,
windows_virtualfree_release_attempts, windows_virtualfree_release_failures,
};
let ps = page_size();
let result = reserve_aligned(4 * ps, 4 * ps);
assert!(result.is_some(), "trivial reserve must succeed");
let reservation = result.unwrap();
#[cfg(all(windows, not(miri)))]
assert!(
windows_reserve_commit_calls() >= 1,
"a successful reservation must be counted on Windows; got {}",
windows_reserve_commit_calls()
);
#[cfg(all(unix, not(aligned_vmem_mock)))]
unsafe {
aligned_vmem::decommit(reservation.reservation_ptr(), 0, ps);
}
#[cfg(all(unix, not(aligned_vmem_mock), not(miri)))]
assert!(
unix_madvise_attempts() >= 1,
"decommit must increment UNIX_MADVISE_ATTEMPTS on Unix; got {}",
unix_madvise_attempts()
);
drop(reservation);
reset_bench_internals_counters();
assert_eq!(unix_exact_reserve_attempts(), 0);
assert_eq!(unix_exact_reserve_hits(), 0);
assert_eq!(windows_reserve_commit_calls(), 0);
assert_eq!(windows_reserve_commit_single_calls(), 0);
assert_eq!(windows_reserve_commit_two_call_pairs(), 0);
assert_eq!(windows_large_page_retry_failures(), 0);
assert_eq!(windows_large_page_alignment_failures(), 0);
assert_eq!(windows_large_page_plain_fallback_successes(), 0);
assert_eq!(unix_madvise_attempts(), 0);
assert_eq!(unix_madvise_successes(), 0);
assert_eq!(unix_munmap_attempts(), 0);
assert_eq!(unix_munmap_failures(), 0);
assert_eq!(windows_virtualfree_decommit_attempts(), 0);
assert_eq!(windows_virtualfree_decommit_failures(), 0);
assert_eq!(windows_virtualfree_release_attempts(), 0);
assert_eq!(windows_virtualfree_release_failures(), 0);
assert_eq!(huge_decommit_attempts(), 0);
}