rabukasim / engine_rust_src /src /debug_q203.rs
trioskosmos's picture
Upload folder using huggingface_hub
463f868 verified
use crate::core::logic::*;
use crate::test_helpers::*;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn debug_q203_trace() {
let mut state = GameState::default();
let db = load_real_db();
let live_id = 358;
let niji_member_id = 4430;
state.debug.debug_mode = true;
// 1. Verify card data
let member = db.get_member(niji_member_id);
println!("=== MEMBER LOOKUP ===");
println!(
"get_member({}) = {:?}",
niji_member_id,
member.map(|m| (&m.name, &m.groups, m.card_id))
);
let live = db.get_live(live_id);
println!("=== LIVE LOOKUP ===");
println!(
"get_live({}) = {:?}",
live_id,
live.map(|l| (&l.name, l.card_id))
);
if let Some(l) = live {
println!("Live abilities count: {}", l.abilities.len());
if !l.abilities.is_empty() {
println!("Ability 0 trigger: {:?}", l.abilities[0].trigger);
println!("Ability 0 bytecode: {:?}", l.abilities[0].bytecode);
println!(
"Ability 0 conditions count: {}",
l.abilities[0].conditions.len()
);
}
}
// 2. Setup state
state.players[0].live_zone[0] = live_id;
state.players[0].stage[0] = niji_member_id;
for _ in 0..5 {
state.players[0].energy_zone.push(3001);
}
state.players[0].set_energy_tapped(0, true);
// 3. Call handle_energy
println!("\n=== HANDLE_ENERGY ===");
let mut ctx = AbilityContext {
source_card_id: niji_member_id,
player_id: 0,
activator_id: 0,
..Default::default()
};
let instr = crate::core::logic::interpreter::instruction::BytecodeInstruction::new(81, 1, 0, 0);
crate::core::logic::interpreter::handlers::handle_energy(
&mut state, &db, &mut ctx, &instr, 0,
);
println!(
"activated_energy_group_mask = {} (binary: {:b})",
state.players[0].activated_energy_group_mask,
state.players[0].activated_energy_group_mask
);
println!("Expected: bit 2 set = 4 (binary: 100)");
assert!(
(state.players[0].activated_energy_group_mask & (1 << 2)) != 0,
"FAIL: Energy mask does NOT have bit 2 set! Actual: {}",
state.players[0].activated_energy_group_mask
);
// 4. Trigger OnLiveStart
println!("\n=== TRIGGER ON_LIVE_START ===");
state.trigger_abilities(&db, TriggerType::OnLiveStart, &ctx);
state.process_trigger_queue(&db);
println!("\n=== RESULT ===");
println!(
"live_score_bonus = {} (expected: 1)",
state.players[0].live_score_bonus
);
assert_eq!(
state.players[0].live_score_bonus, 1,
"live_score_bonus should be 1"
);
}
}