use std::hint::black_box;
use std::time::{Duration, Instant};
#[cfg(not(feature = "panic_on_next_alloc"))]
use alloc_tracker::{Allocator, Session};
#[cfg(feature = "panic_on_next_alloc")]
use alloc_tracker::{Allocator, Session, panic_on_next_alloc};
use criterion::Criterion;
#[global_allocator]
static ALLOCATOR: Allocator<std::alloc::System> = Allocator::system();
#[expect(clippy::useless_vec, reason = "example needs to show allocation")]
fn main() {
let session = Session::new();
let operation = session.operation("my_operation");
let mut criterion = Criterion::default()
.warm_up_time(Duration::from_millis(100))
.measurement_time(Duration::from_millis(500))
.sample_size(10)
.without_plots();
criterion.bench_function("my_operation", |b| {
b.iter_custom(|iters| {
let start = Instant::now();
let _span = operation.measure_process().iterations(iters);
for _ in 0..iters {
black_box(vec![1, 2, 3, 4, 5]); }
start.elapsed()
});
});
#[cfg(feature = "panic_on_next_alloc")]
{
panic_on_next_alloc(true);
panic_on_next_alloc(false);
let _vec = vec![1, 2, 3]; }
#[cfg(not(feature = "panic_on_next_alloc"))]
{
println!("To test panic_on_next_alloc functionality, run with:");
println!("cargo run --example alloc_tracker_readme --features panic_on_next_alloc");
let _vec = vec![1, 2, 3]; }
}