rabukasim / engine_rust_src /src /repro /benchmark_sequencer.rs
trioskosmos's picture
chore: remove large files for HF Space
9bd4ce5
use engine_rust::core::enums::*;
use engine_rust::core::logic::*;
use engine_rust::core::logic::turn_sequencer::TurnSequencer;
use engine_rust::test_helpers::*;
use std::time::Instant;
#[test]
fn benchmark_sequencer_speed() {
// Initialize DB
let db = load_real_db();
// Initialize State
let mut state = GameState::default();
state.players[0].player_id = 0;
state.players[1].player_id = 1;
state.phase = Phase::Main;
state.current_player = 0;
state.turn = 5;
// Branching-heavy hand
let mut hand = Vec::new();
for i in 0..10 {
hand.push(9 + i);
}
state.set_hand(0, &hand);
// Lives
state.set_live(0, 0, 53301);
state.set_live(0, 1, 57397);
state.set_live(0, 2, 53468);
// Abundant energy
for _ in 0..20 {
state.players[0].push_energy_card(9, false);
}
println!("Starting 100-iteration benchmark...");
std::env::set_var("TURNSEQ_VANILLA_EXACT_THRESHOLD", "10000000");
std::env::set_var("TURNSEQ_EXACT_THRESHOLD", "10000000");
std::env::set_var("TURNSEQ_PROGRESS", "0");
let iterations = 100;
let mut total_evals = 0;
let start = Instant::now();
for _ in 0..iterations {
let (_seq, _val, _breakdown, evals) = TurnSequencer::plan_full_turn(&state, &db);
total_evals += evals;
}
let duration = start.elapsed();
println!("Benchmark finished.");
println!("Total iterations: {}", iterations);
println!("Total evaluations: {}", total_evals);
println!("Total duration: {:?}", duration);
println!("Avg duration per search: {:?}", duration / iterations as u32);
if duration.as_secs_f64() > 0.0 {
println!("Nodes/sec: {:.2}", total_evals as f64 / duration.as_secs_f64());
}
assert!(total_evals > 0);
}