Spaces:
Running
Running
File size: 1,879 Bytes
88d4171 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
use std::env;
use std::fs;
use std::time::Instant;
use engine_rust::core::logic::{CardDatabase, GameState};
fn main() {
let args: Vec<String> = 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<u16> = db.members.keys().map(|&k| k as u16).collect();
let all_lives: Vec<u16> = db.lives.keys().map(|&k| k as u16).collect();
// Create a realistic populated state
let p0_deck: Vec<u16> = all_members.iter().take(50).cloned().collect();
let p1_deck: Vec<u16> = all_members.iter().skip(50).take(50).cloned().collect();
let p0_lives: Vec<u16> = all_lives.iter().take(20).cloned().collect();
let p1_lives: Vec<u16> = 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());
}
|