Spaces:
Sleeping
Sleeping
| use crate::core::logic::*; | |
| use crate::test_helpers::*; | |
| mod tests { | |
| use super::*; | |
| 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" | |
| ); | |
| } | |
| } | |