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());
}