diff --git a/src/apu.rs b/src/apu.rs index b22d7fb8c29e2b784d9ff17a23c393562def8820..fbb331b29d8e13c116c064e9f5b604d746e0b429 100644 --- a/src/apu.rs +++ b/src/apu.rs @@ -931,3 +931,51 @@ impl Default for Apu { Self::new(44100, 1.0, GameBoy::CPU_FREQ) } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_trigger_ch1() { + let mut apu = Apu::default(); + apu.ch1_wave_length = 1024; + apu.trigger_ch1(); + + assert_eq!(apu.ch1_timer, 4096); + assert_eq!(apu.ch1_envelope_sequence, 0); + assert_eq!(apu.ch1_sweep_sequence, 0); + } + + #[test] + fn test_trigger_ch2() { + let mut apu = Apu::default(); + apu.ch2_wave_length = 1024; + apu.trigger_ch2(); + + assert_eq!(apu.ch2_timer, 4096); + assert_eq!(apu.ch2_envelope_sequence, 0); + } + + #[test] + fn test_trigger_ch3() { + let mut apu = Apu::default(); + apu.ch3_wave_length = 1024; + apu.trigger_ch3(); + + assert_eq!(apu.ch3_timer, 3); + assert_eq!(apu.ch3_position, 0); + } + + #[test] + fn test_trigger_ch4() { + let mut apu = Apu::default(); + apu.ch4_divisor = 3; + apu.ch4_clock_shift = 2; + apu.trigger_ch4(); + + assert_eq!(apu.ch4_timer, 192); + assert_eq!(apu.ch4_lfsr, 0x7ff1); + assert_eq!(apu.ch4_envelope_sequence, 0); + } +}