Spaces:
Sleeping
Sleeping
File size: 3,477 Bytes
463f868 | 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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | use crate::core::logic::*;
const TEST_CARDS: &str = r#"{
"member_db": {
"0": {
"card_id": 0,
"card_no": "TEST-001",
"name": "Test Member",
"cost": 2,
"hearts": [1, 0, 0, 0, 0, 0, 0],
"blade_hearts": [0, 0, 0, 0, 0, 0, 0],
"blades": 1,
"groups": [],
"units": [],
"abilities": [],
"rare": "R",
"volume_icons": 0,
"draw_icons": 0
}
},
"live_db": {
"11000": {
"card_id": 11000,
"card_no": "LIVE-001",
"name": "Test Live",
"score": 1,
"required_hearts": [1, 0, 0, 0, 0, 0, 0],
"abilities": [],
"groups": [],
"units": [],
"volume_icons": 0,
"blade_hearts": [0, 0, 0, 0, 0, 0, 0]
}
}
}"#;
#[test]
fn test_database_load() {
let db = CardDatabase::from_json(TEST_CARDS).unwrap();
assert_eq!(db.members.len(), 1);
assert_eq!(db.lives.len(), 1);
assert_eq!(db.members[&0].name, "Test Member");
}
#[test]
fn test_game_initialization() {
let _db = CardDatabase::from_json(TEST_CARDS).unwrap();
let mut state = GameState {
core: CoreGameState {
players: [
PlayerState {
player_id: 0,
..PlayerState::default()
},
PlayerState {
player_id: 1,
..PlayerState::default()
},
],
..CoreGameState::default()
},
..GameState::default()
};
state.initialize_game(
vec![0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11000], // P0 Main (10 members + 1 live)
vec![0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11000], // P1 Main
vec![0, 0, 0, 0, 0], // P0 Energy
vec![0, 0, 0, 0, 0], // P1 Energy
Vec::new(),
Vec::new(),
);
assert_eq!(state.players[0].hand.len(), 6);
assert_eq!(state.players[0].energy_zone.len(), 3);
assert_eq!(state.players[0].live_zone, [-1; 3]);
assert_eq!(state.players[1].live_zone, [-1; 3]);
// Lives are shuffled into the main deck (may be drawn into hand)
assert!(
state.players[0].deck.contains(&11000) || state.players[0].hand.contains(&11000)
);
}
#[test]
fn test_play_member() {
let db = CardDatabase::from_json(TEST_CARDS).unwrap();
let mut state = GameState {
core: CoreGameState {
players: [
PlayerState {
player_id: 0,
hand: vec![0].into(),
energy_zone: vec![0, 0].into(),
tapped_energy_mask: 0,
..PlayerState::default()
},
PlayerState {
player_id: 1,
..PlayerState::default()
},
],
phase: Phase::Main,
..CoreGameState::default()
},
..GameState::default()
};
// Play card 0 (cost 2) to slot 0
state.play_member(&db, 0, 0).unwrap();
assert_eq!(state.players[0].stage[0], 0);
assert_eq!(state.players[0].hand.len(), 0);
assert_eq!(state.players[0].tapped_energy_mask.count_ones(), 2);
}
|