use aabb::prelude::*;
use std::time::Instant;
fn main() {
println!("AABB Build Performance Benchmark");
println!("=================================\n");
println!("Generating 1,000,000 random bounding boxes...");
let mut boxes = Vec::new();
let mut rng = 12345u64;
for _ in 0..1_000_000 {
rng = rng.wrapping_mul(6364136223846793005).wrapping_add(1442695040888963407);
let x1 = ((rng >> 32) as f64 / u32::MAX as f64) * 1000.0;
rng = rng.wrapping_mul(6364136223846793005).wrapping_add(1442695040888963407);
let y1 = ((rng >> 32) as f64 / u32::MAX as f64) * 1000.0;
rng = rng.wrapping_mul(6364136223846793005).wrapping_add(1442695040888963407);
let size_x = ((rng >> 32) as f64 / u32::MAX as f64) * 50.0 + 1.0;
rng = rng.wrapping_mul(6364136223846793005).wrapping_add(1442695040888963407);
let size_y = ((rng >> 32) as f64 / u32::MAX as f64) * 50.0 + 1.0;
boxes.push((x1, y1, x1 + size_x, y1 + size_y));
}
println!("Running build phase benchmark 100 times for profiling...\n");
let num_runs = 100;
let mut total_add_time = std::time::Duration::ZERO;
let mut total_build_time = std::time::Duration::ZERO;
let overall_start = Instant::now();
for _run in 1..=num_runs {
let build_start = Instant::now();
let mut tree = AABB::with_capacity(1_000_000);
for (x1, y1, x2, y2) in &boxes {
tree.add(*x1, *y1, *x2, *y2);
}
let add_duration = build_start.elapsed();
total_add_time += add_duration;
let build_phase_start = Instant::now();
tree.build();
let build_phase_duration = build_phase_start.elapsed();
total_build_time += build_phase_duration;
}
let overall_duration = overall_start.elapsed();
println!("\nBuild Summary ({} runs):", num_runs);
println!(" Total Add time: {:.2}ms", total_add_time.as_secs_f64() * 1000.0);
println!(" Average Add: {:.2}ms", total_add_time.as_secs_f64() * 1000.0 / num_runs as f64);
println!(" Total Build time: {:.2}ms", total_build_time.as_secs_f64() * 1000.0);
println!(" Average Build: {:.2}ms", total_build_time.as_secs_f64() * 1000.0 / num_runs as f64);
println!(" Overall time: {:.2}ms", overall_duration.as_secs_f64() * 1000.0);
}