use std::env; use std::fs; use std::time::Instant; use engine_rust::core::logic::{CardDatabase, GameState}; fn main() { let args: Vec = env::args().collect(); let json_path = if args.len() > 1 { &args[1] } else { "../data/cards_compiled.json" }; println!("Loading cards from {}...", json_path); let json_str = fs::read_to_string(json_path).expect("Failed to read cards JSON"); let db = CardDatabase::from_json(&json_str).expect("Failed to parse JSON"); println!("Database loaded. Members: {}", db.members.len()); let all_members: Vec = db.members.keys().map(|&k| k as u16).collect(); let all_lives: Vec = db.lives.keys().map(|&k| k as u16).collect(); // Create a realistic populated state let p0_deck: Vec = all_members.iter().take(50).cloned().collect(); let p1_deck: Vec = all_members.iter().skip(50).take(50).cloned().collect(); let p0_lives: Vec = all_lives.iter().take(20).cloned().collect(); let p1_lives: Vec = all_lives.iter().skip(20).take(20).cloned().collect(); let mut game = GameState::default(); game.initialize_game( p0_deck, p1_deck, vec![], vec![], p0_lives, p1_lives ); game.silent = true; // Warmup for _ in 0..1000 { let _ = game.clone(); } let iterations = 1_000_000; println!("Benchmarking GameState::clone() for {} iterations...", iterations); let start = Instant::now(); for _ in 0..iterations { let _ = std::hint::black_box(game.clone()); } let duration = start.elapsed(); println!("Total time: {:.4} s", duration.as_secs_f64()); println!("Latency per copy: {:.4} us", duration.as_secs_f64() * 1_000_000.0 / iterations as f64); println!("Ops/sec: {:.0}", iterations as f64 / duration.as_secs_f64()); }