bglga/tests/special_stage.rs

143 lines
3.3 KiB
Rust

use bglga::constants::SPECIAL_STAGE_INTERVAL;
use bglga::resources::is_special_stage;
use bglga::resources::StageConfigurations;
// ── SPECIAL_STAGE_INTERVAL constant ──
#[test]
fn special_stage_interval_is_three() {
assert_eq!(SPECIAL_STAGE_INTERVAL, 3);
}
// ── is_special_stage function ──
#[test]
fn stage_zero_is_not_special() {
assert!(!is_special_stage(0));
}
#[test]
fn stage_1_is_not_special() {
assert!(!is_special_stage(1));
}
#[test]
fn stage_2_is_not_special() {
assert!(!is_special_stage(2));
}
#[test]
fn stage_3_is_special() {
assert!(is_special_stage(3));
}
#[test]
fn stage_4_is_not_special() {
assert!(!is_special_stage(4));
}
#[test]
fn stage_5_is_not_special() {
assert!(!is_special_stage(5));
}
#[test]
fn stage_6_is_special() {
assert!(is_special_stage(6));
}
#[test]
fn stage_9_is_special() {
assert!(is_special_stage(9));
}
// ── for_stage returns special config for special stages ──
#[test]
fn for_stage_returns_special_config_at_stage_3() {
let configs = StageConfigurations::default();
let config = configs.for_stage(3);
// Special stages have no dive attacks
assert!(
config.attack_patterns.is_empty(),
"Stage 3 (special) should have empty attack_patterns"
);
}
#[test]
fn for_stage_returns_special_config_at_stage_6() {
let configs = StageConfigurations::default();
let config = configs.for_stage(6);
assert!(
config.attack_patterns.is_empty(),
"Stage 6 (special) should have empty attack_patterns"
);
}
#[test]
fn for_stage_returns_normal_config_at_stage_1() {
let configs = StageConfigurations::default();
let config = configs.for_stage(1);
assert!(
!config.attack_patterns.is_empty(),
"Stage 1 (normal) should have attack patterns"
);
}
#[test]
fn for_stage_returns_normal_config_at_stage_2() {
let configs = StageConfigurations::default();
let config = configs.for_stage(2);
assert!(
!config.attack_patterns.is_empty(),
"Stage 2 (normal) should have attack patterns"
);
}
#[test]
fn for_stage_returns_normal_config_at_stage_4() {
let configs = StageConfigurations::default();
let config = configs.for_stage(4);
assert!(
!config.attack_patterns.is_empty(),
"Stage 4 (normal) should have attack patterns"
);
}
// ── Special stage config properties ──
#[test]
fn special_stage_has_full_formation() {
let configs = StageConfigurations::default();
let config = configs.for_stage(3);
assert_eq!(
config.enemy_count, 32,
"Special stage should have 32 enemies"
);
assert_eq!(
config.formation_layout.positions.len(),
32,
"Special stage formation should have 32 positions"
);
}
#[test]
fn special_stage_has_max_dive_interval() {
let configs = StageConfigurations::default();
let config = configs.for_stage(3);
assert_eq!(
config.attack_dive_interval,
f32::MAX,
"Special stage should have max dive interval"
);
}
#[test]
fn special_stage_has_base_speed() {
let configs = StageConfigurations::default();
let config = configs.for_stage(3);
assert_eq!(
config.enemy_speed_multiplier, 1.0,
"Special stage should have 1.0x speed multiplier"
);
}