tests back

This commit is contained in:
ntr 2019-12-13 15:05:18 +10:00
parent bf4038b09d
commit f63a8b3f8f
2 changed files with 276 additions and 280 deletions

View File

@ -1647,316 +1647,315 @@ mod tests {
// }
// #[test]
// fn upkeep_test() {
// let mut game = create_2v2_test_game();
// game.players[0].set_ready(true);
// game.phase_end = Some(Utc::now().checked_sub_signed(Duration::seconds(500)).unwrap());
// game = game.upkeep();
// // assert!(game.players[1].warnings == 1);
// }
// #[test]
// fn attack_test() {
// let mut game = create_2v2_test_game();
// let player_id = game.players[0].id;
// let source = game.players[0].constructs[0].id;
// let target = game.players[1].constructs[0].id;
// game.add_skill(player_id, source, target, Skill::Attack).unwrap();
// game = game.resolve_phase_start();
// }
// #[test]
// fn bash_test() {
// let mut game = create_2v2_test_game();
// let player_id = game.players[0].id;
// let source = game.players[0].constructs[0].id;
// let target = game.players[1].constructs[0].id;
// game.resolve(Cast::new(source, player_id, target, Skill::Bash));
// }
// #[test]
// fn slay_test() {
// let mut game = create_2v2_test_game();
// let player_id = game.players[0].id;
// let source = game.players[0].constructs[0].id;
// let target = game.players[1].constructs[0].id;
// game.resolve(Cast::new(source, player_id, target, Skill::Slay));
// let last = game.resolutions.len() - 1;
// let resolutions = &game.resolutions[last];
// assert!(resolutions.iter().any(|r| match r.event {
// Event::Damage { construct, colour, amount, mitigation: _, display: _ } =>
// construct == target && amount > 0 && colour == Colour::Red,
// _ => false,
// }));
// assert!(resolutions.iter().any(|r| match r.event {
// Event::Damage { construct, colour, amount, mitigation: _, display: _ } =>
// construct == target && amount > 0 && colour == Colour::Red,
// _ => false,
// }));
// }
// #[test]
// fn purify_test() {
// let mut game = create_2v2_test_game();
// let source_player_id = game.players[0].id;
// let target_player_id = game.players[1].id;
// let source = game.players[0].constructs[0].id;
// let target = game.players[1].constructs[0].id;
// game.resolve(Cast::new(source, source_player_id, target, Skill::Decay));
// // don't mention 3 we volvo now
// assert!(game.players[1].constructs[0].effects.len() == 3);
// game.resolve(Cast::new(target, target_player_id, target, Skill::Purify));
// assert!(game.players[1].constructs[0].effects.len() == 1);
// let last = game.resolutions.len() - 1;
// let resolutions = &game.resolutions[last];
// assert!(resolutions.iter().any(|r| match r.event {
// Event::Effect { construct, effect, duration: _, display: _ } =>
// construct == target && effect == Effect::Pure,
// _ => false,
// }));
// // Check for healing here
// }
// #[test]
// fn invert_test() {
// let mut game = create_2v2_test_game();
// let player_id = game.players[0].id;
// let source = game.players[0].constructs[0].id;
// let target = game.players[1].constructs[0].id;
// game.resolve(Cast::new(source, player_id, target, Skill::Strike));
// game.resolve(Cast::new(source, player_id, target, Skill::Invert));
// game.resolve(Cast::new(source, player_id, target, Skill::Strike));
// let last = game.resolutions.len() - 1;
// let resolutions = &game.resolutions[last];
// assert!(resolutions.iter().any(|r| match r.event {
// Event::Healing { construct, colour, amount, overhealing: _, display: _, } =>
// construct == target && amount > 0 && colour == Colour::Green,
// _ => false,
// }));
// assert!(resolutions.iter().any(|r| match r.event {
// Event::Healing { construct, colour, amount, overhealing: _, display: _ } =>
// construct == target && amount > 0 && colour == Colour::Red,
// _ => false,
// }));
// }
// #[test]
// fn siphon_test() {
// let mut game = create_2v2_test_game();
// let player_id = game.players[0].id;
// let source = game.players[0].constructs[0].id;
// let target = game.players[1].constructs[0].id;
// game.resolve(Cast::new(source, player_id, target, Skill::Siphon));
// let last = game.resolutions.len() - 1;
// let resolutions = &game.resolutions[last];
// // siphon should
// // apply effect // damage target // heal source
// assert!(resolutions.iter().any(|r| match r.event {
// Event::Effect { construct, effect, duration: _, display: _ } =>
// construct == target && effect == Effect::Siphon,
// _ => false,
// }));
// assert!(resolutions.iter().any(|r| match r.event {
// Event::Damage { construct, colour, amount, mitigation: _, display: _ } =>
// construct == target && amount > 0 && colour == Colour::Blue,
// _ => false,
// }));
// assert!(resolutions.iter().any(|r| match r.event {
// Event::Healing { construct, colour, amount: _, overhealing: _, display: _ } =>
// construct == source && colour == Colour::Green,
// _ => false,
// }));
// game = game.resolve_phase_start();
// // que ota?
// game.resolve(Cast::new(source, player_id, target, Skill::Siphon));
// let last = game.resolutions.len() - 1;
// let resolutions = &game.resolutions[last];
// let damage_resolutions.iter().filter(|r| match r.event {
// Event::Damage { construct: _, colour: _, amount: _, mitigation: _, display: _ } => true,
// _ => false,
// }).count();
// assert_eq!(damage_events, 1);
// }
// #[test]
// fn reflect_test() {
// let mut game = create_2v2_test_game();
// let player_id = game.players[0].id;
// let source = game.players[0].constructs[0].id;
// let target = game.players[1].constructs[0].id;
// game.resolve(Cast::new(source, player_id, target, Skill::Reflect));
// game.resolve(Cast::new(source, player_id, target, Skill::Blast));
// let last = game.resolutions.len() - 1;
// let resolutions = &game.resolutions[last];
// assert!(resolutions.iter().any(|r| match r.event {
// Event::Damage { construct, colour, amount, mitigation: _, display: _ } =>
// construct == source && amount > 0 && colour == Colour::Blue,
// _ => false,
// }));
// }
// #[test]
// fn absorb_test() {
// let mut game = create_2v2_test_game();
// let player_id = game.players[0].id;
// let source = game.players[0].constructs[0].id;
// let target = game.players[1].constructs[0].id;
// game.resolve(Cast::new(source, player_id, target, Skill::Absorb));
// game.resolve(Cast::new(source, player_id, target, Skill::Blast));
// let last = game.resolutions.len() - 1;
// let resolutions = &game.resolutions[last];
// assert!(resolutions.iter().any(|r| match r.event {
// Event::Damage { construct, colour, amount, mitigation: _, display: _ } => {
// assert!(construct == target && amount > 0 && colour == Colour::Blue && r.skill == Skill::Blast);
// resolutions.iter().any(|r| match r.event {
// Event::Meta { construct, effect, meta } =>
// construct == target && effect == Effect::Absorption && {
// match meta {
// EffectMeta::AddedDamage(added_dmg) => added_dmg == amount,
// _ => false,
// }
// },
// _ => false,
// })
// },
// _ => false,
// }));
// assert!(match game.players[1].constructs[0].effects[0].meta {
// Some(EffectMeta::AddedDamage(d)) => d,
// _ => 0
// // 320 base blue power and 125 base blue life
// } == 320.pct(Skill::Blast.multiplier()) - 125);
// }
// #[test]
// fn absorb_multi_damage_test() {
// let mut game = create_2v2_test_game();
// let player_id = game.players[0].id;
// let source = game.players[0].constructs[0].id;
// let target = game.players[1].constructs[0].id;
// game.resolve(Cast::new(source, player_id, target, Skill::Blast));
// game.resolve(Cast::new(source, player_id, target, Skill::Blast));
// // Abosrb restores blue life here
// game.resolve(Cast::new(source, player_id, target, Skill::Absorb));
// game.resolve(Cast::new(source, player_id, target, Skill::Blast));
// assert!(match game.players[1].constructs[0].effects[0].meta {
// Some(EffectMeta::AddedDamage(d)) => d,
// _ => 0
// // 320 base blue power and 125 base blue life
// } == 320.pct(Skill::Blast.multiplier()) - 125);
// }
// #[test]
// fn multi_reflect_test() {
// let mut game = create_2v2_test_game();
// let player_id = game.players[0].id;
// let target_player_id = game.players[1].id;
// let source = game.players[0].constructs[0].id;
// let target = game.players[1].constructs[0].id;
// game.resolve(Cast::new(source, player_id, source, Skill::Reflect));
// game.resolve(Cast::new(target, target_player_id, target, Skill::Reflect));
// game.resolve(Cast::new(source, player_id, target, Skill::Blast));
// assert!(game.players[0].constructs[0].is_ko() == false);
// assert!(game.players[1].constructs[0].is_ko() == false);
// }
// // refer fixme.md (infinite counterattack loop)
// /*#[test]
// fn multi_counter_test() {
// let mut game = create_2v2_test_game();
// let player_id = game.players[0].id;
// let target_player_id = game.players[1].id;
// let source = game.players[0].constructs[0].id;
// let target = game.players[1].constructs[0].id;
// game.resolve(Cast::new(source, player_id, source, Skill::Counter));
// game.resolve(Cast::new(target, target_player_id, target, Skill::Counter));
// game.resolve(Cast::new(source, player_id, target, Skill::Attack));
// assert!(game.players[0].constructs[0].is_ko() == false);
// assert!(game.players[1].constructs[0].is_ko() == false);
// }*/
// #[test]
// fn intercept_test() {
// let mut game = create_2v2_test_game();
// let player_id = game.players[0].id;
// let other_player_id = game.players[1].id;
// let source = game.players[0].constructs[0].id;
// let target = game.players[1].constructs[0].id;
// let interceptor = game.players[1].constructs[1].id;
// // Cast intercept
// game.resolve(Cast::new(interceptor, other_player_id, interceptor, Skill::Intercept));
// // Enemy casts skill on target which as a teammate intercepting
// game.resolve(Cast::new(source, player_id, target, Skill::Attack));
// // Intercepting teammate attacks someone on same team
// game.resolve(Cast::new(interceptor, other_player_id, target, Skill::Attack));
// let last = game.resolutions.len() - 1;
// let resolutions = &game.resolutions[last];
// // There should be no damage events on the target
// assert!(resolutions.iter().any(|r| match r.event {
// Event::Damage { construct, colour, amount, mitigation, display: _ } =>
// construct == target && (amount > 0 || mitigation > 0) && colour == Colour::Red,
// _ => false,
// }) == false);
// // Should be damage events on the interceptor
// assert!(resolutions.iter().any(|r| match r.event {
// Event::Damage { construct, colour, amount, mitigation, display: _ } =>
// construct == interceptor && (amount > 0 || mitigation > 0) && colour == Colour::Red,
// _ => false,
// }));
#[test]
fn upkeep_test() {
let mut game = create_2v2_test_game();
game.players[0].set_ready(true);
game.phase_end = Some(Utc::now().checked_sub_signed(Duration::seconds(500)).unwrap());
game = game.upkeep();
// assert!(game.players[1].warnings == 1);
}
#[test]
fn attack_test() {
let mut game = create_2v2_test_game();
let player_id = game.players[0].id;
let source = game.players[0].constructs[0].id;
let target = game.players[1].constructs[0].id;
game.add_skill(player_id, source, target, Skill::Attack).unwrap();
game = game.resolve_phase_start();
}
#[test]
fn bash_test() {
let mut game = create_2v2_test_game();
let player_id = game.players[0].id;
let source = game.players[0].constructs[0].id;
let target = game.players[1].constructs[0].id;
game.resolve(Cast::new(source, player_id, target, Skill::Bash));
}
#[test]
fn slay_test() {
let mut game = create_2v2_test_game();
let player_id = game.players[0].id;
let source = game.players[0].constructs[0].id;
let target = game.players[1].constructs[0].id;
game.resolve(Cast::new(source, player_id, target, Skill::Slay));
let last = game.resolutions.len() - 1;
let resolutions = &game.resolutions[last];
assert!(resolutions.iter().any(|r| match r.event {
Event::Damage { construct, colour, amount, mitigation: _, display: _ } =>
construct == target && amount > 0 && colour == Colour::Red,
_ => false,
}));
assert!(resolutions.iter().any(|r| match r.event {
Event::Damage { construct, colour, amount, mitigation: _, display: _ } =>
construct == target && amount > 0 && colour == Colour::Red,
_ => false,
}));
}
#[test]
fn purify_test() {
let mut game = create_2v2_test_game();
let source_player_id = game.players[0].id;
let target_player_id = game.players[1].id;
let source = game.players[0].constructs[0].id;
let target = game.players[1].constructs[0].id;
game.resolve(Cast::new(source, source_player_id, target, Skill::Decay));
// don't mention 3 we volvo now
assert!(game.players[1].constructs[0].effects.len() == 3);
game.resolve(Cast::new(target, target_player_id, target, Skill::Purify));
assert!(game.players[1].constructs[0].effects.len() == 1);
let last = game.resolutions.len() - 1;
let resolutions = &game.resolutions[last];
assert!(resolutions.iter().any(|r| match r.event {
Event::Effect { construct, effect, duration: _, display: _ } =>
construct == target && effect == Effect::Pure,
_ => false,
}));
// Check for healing here
}
#[test]
fn invert_test() {
let mut game = create_2v2_test_game();
let player_id = game.players[0].id;
let source = game.players[0].constructs[0].id;
let target = game.players[1].constructs[0].id;
game.resolve(Cast::new(source, player_id, target, Skill::Strike));
game.resolve(Cast::new(source, player_id, target, Skill::Invert));
game.resolve(Cast::new(source, player_id, target, Skill::Strike));
let last = game.resolutions.len() - 1;
let resolutions = &game.resolutions[last];
assert!(resolutions.iter().any(|r| match r.event {
Event::Healing { construct, colour, amount, overhealing: _, display: _, } =>
construct == target && amount > 0 && colour == Colour::Green,
_ => false,
}));
assert!(resolutions.iter().any(|r| match r.event {
Event::Healing { construct, colour, amount, overhealing: _, display: _ } =>
construct == target && amount > 0 && colour == Colour::Red,
_ => false,
}));
}
#[test]
fn siphon_test() {
let mut game = create_2v2_test_game();
let player_id = game.players[0].id;
let source = game.players[0].constructs[0].id;
let target = game.players[1].constructs[0].id;
game.resolve(Cast::new(source, player_id, target, Skill::Siphon));
let last = game.resolutions.len() - 1;
let resolutions = &game.resolutions[last];
// siphon should
// apply effect // damage target // heal source
assert!(resolutions.iter().any(|r| match r.event {
Event::Effect { construct, effect, duration: _, display: _ } =>
construct == target && effect == Effect::Siphon,
_ => false,
}));
assert!(resolutions.iter().any(|r| match r.event {
Event::Damage { construct, colour, amount, mitigation: _, display: _ } =>
construct == target && amount > 0 && colour == Colour::Blue,
_ => false,
}));
assert!(resolutions.iter().any(|r| match r.event {
Event::Healing { construct, colour, amount: _, overhealing: _, display: _ } =>
construct == source && colour == Colour::Green,
_ => false,
}));
game = game.resolve_phase_start();
// que ota?
game.resolve(Cast::new(source, player_id, target, Skill::Siphon));
let last = game.resolutions.len() - 1;
let resolutions = &game.resolutions[last];
let damage_events = resolutions.iter().filter(|r| match r.event {
Event::Damage { construct: _, colour: _, amount: _, mitigation: _, display: _ } => true,
_ => false,
}).count();
assert_eq!(damage_events, 1);
}
#[test]
fn reflect_test() {
let mut game = create_2v2_test_game();
let player_id = game.players[0].id;
let source = game.players[0].constructs[0].id;
let target = game.players[1].constructs[0].id;
game.resolve(Cast::new(source, player_id, target, Skill::Reflect));
game.resolve(Cast::new(source, player_id, target, Skill::Blast));
let last = game.resolutions.len() - 1;
let resolutions = &game.resolutions[last];
assert!(resolutions.iter().any(|r| match r.event {
Event::Damage { construct, colour, amount, mitigation: _, display: _ } =>
construct == source && amount > 0 && colour == Colour::Blue,
_ => false,
}));
}
#[test]
fn absorb_test() {
let mut game = create_2v2_test_game();
let player_id = game.players[0].id;
let source = game.players[0].constructs[0].id;
let target = game.players[1].constructs[0].id;
game.resolve(Cast::new(source, player_id, target, Skill::Absorb));
game.resolve(Cast::new(source, player_id, target, Skill::Blast));
let last = game.resolutions.len() - 1;
let resolutions = &game.resolutions[last];
assert!(resolutions.iter().any(|r| match r.event {
Event::Damage { construct, colour, amount, mitigation: _, display: _ } => {
assert!(construct == target && amount > 0 && colour == Colour::Blue && r.skill == Skill::Blast);
resolutions.iter().any(|r| match r.event {
Event::Meta { construct, effect, meta } =>
construct == target && effect == Effect::Absorption && {
match meta {
EffectMeta::AddedDamage(added_dmg) => added_dmg == amount,
_ => false,
}
},
_ => false,
})
},
_ => false,
}));
assert!(match game.players[1].constructs[0].effects[0].meta {
Some(EffectMeta::AddedDamage(d)) => d,
_ => 0
// 320 base blue power and 125 base blue life
} == 320.pct(Skill::Blast.multiplier()) - 125);
}
#[test]
fn absorb_multi_damage_test() {
let mut game = create_2v2_test_game();
let player_id = game.players[0].id;
let source = game.players[0].constructs[0].id;
let target = game.players[1].constructs[0].id;
game.resolve(Cast::new(source, player_id, target, Skill::Blast));
game.resolve(Cast::new(source, player_id, target, Skill::Blast));
// Abosrb restores blue life here
game.resolve(Cast::new(source, player_id, target, Skill::Absorb));
game.resolve(Cast::new(source, player_id, target, Skill::Blast));
assert!(match game.players[1].constructs[0].effects[0].meta {
Some(EffectMeta::AddedDamage(d)) => d,
_ => 0
// 320 base blue power and 125 base blue life
} == 320.pct(Skill::Blast.multiplier()) - 125);
}
#[test]
fn multi_reflect_test() {
let mut game = create_2v2_test_game();
let player_id = game.players[0].id;
let target_player_id = game.players[1].id;
let source = game.players[0].constructs[0].id;
let target = game.players[1].constructs[0].id;
game.resolve(Cast::new(source, player_id, source, Skill::Reflect));
game.resolve(Cast::new(target, target_player_id, target, Skill::Reflect));
game.resolve(Cast::new(source, player_id, target, Skill::Blast));
assert!(game.players[0].constructs[0].is_ko() == false);
assert!(game.players[1].constructs[0].is_ko() == false);
}
// refer fixme.md (infinite counterattack loop)
/*#[test]
fn multi_counter_test() {
let mut game = create_2v2_test_game();
let player_id = game.players[0].id;
let target_player_id = game.players[1].id;
let source = game.players[0].constructs[0].id;
let target = game.players[1].constructs[0].id;
game.resolve(Cast::new(source, player_id, source, Skill::Counter));
game.resolve(Cast::new(target, target_player_id, target, Skill::Counter));
game.resolve(Cast::new(source, player_id, target, Skill::Attack));
assert!(game.players[0].constructs[0].is_ko() == false);
assert!(game.players[1].constructs[0].is_ko() == false);
}*/
#[test]
fn intercept_test() {
let mut game = create_2v2_test_game();
let player_id = game.players[0].id;
let other_player_id = game.players[1].id;
let source = game.players[0].constructs[0].id;
let target = game.players[1].constructs[0].id;
let interceptor = game.players[1].constructs[1].id;
// Cast intercept
game.resolve(Cast::new(interceptor, other_player_id, interceptor, Skill::Intercept));
// Enemy casts skill on target which as a teammate intercepting
game.resolve(Cast::new(source, player_id, target, Skill::Attack));
// Intercepting teammate attacks someone on same team
game.resolve(Cast::new(interceptor, other_player_id, target, Skill::Attack));
let last = game.resolutions.len() - 1;
let resolutions = &game.resolutions[last];
// There should be no damage events on the target
assert!(resolutions.iter().any(|r| match r.event {
Event::Damage { construct, colour, amount, mitigation, display: _ } =>
construct == target && (amount > 0 || mitigation > 0) && colour == Colour::Red,
_ => false,
}) == false);
// Should be damage events on the interceptor
assert!(resolutions.iter().any(|r| match r.event {
Event::Damage { construct, colour, amount, mitigation, display: _ } =>
construct == interceptor && (amount > 0 || mitigation > 0) && colour == Colour::Red,
_ => false,
}));
}
/*
#[test]
fn tick_speed_tests() {
let mut game = create_2v2_test_game();
@ -1988,5 +1987,5 @@ mod tests {
let last = game.resolutions.len() - 1;
let resolutions = &game.resolutions[last];
assert!(Skill::SiphonTick == resolutions[0].skill);
}*/
// }
}
}

View File

@ -2184,16 +2184,16 @@ fn sleep_plus_plus(cast: Cast, game: &mut Game) {
}
fn silence(cast: Cast, game: &mut Game) {
let bp = game.value(Value::Stat { construct: cast.source, stat: Stat::GreenPower });
let silences = game.value(Value::ColourSkills { construct: cast.target, colour: Colour::Blue });
let amount = bp.pct(45usize.saturating_mul(silences));
game.action(cast,
Action::Effect {
construct: cast.target,
effect: ConstructEffect { effect: Effect::Silence, duration: 2, meta: None },
}
);
let bp = game.value(Value::Stat { construct: cast.source, stat: Stat::GreenPower });
let silences = game.value(Value::ColourSkills { construct: cast.target, colour: Colour::Blue });
let amount = bp.pct(45usize.saturating_mul(silences));
game.action(cast,
Action::Damage {
construct: cast.target,
@ -2658,6 +2658,3 @@ mod tests {
// assert!(y.disabled(Skill::Heal).is_some());
// }
}
// // haste_strike_check(game)