use crate::detect::PitchDetector;
use super::Autocorrelation;
#[test]
fn test_detect() {
use std::f32::consts::PI;
let sample_rate = 44100.0;
let frame_len = (sample_rate * 0.1) as usize; let mut detector = Autocorrelation::default();
let freqs = [
27.5, 55.0, 110.0, 123.47, 220.0, 261.63, 440.0, 659.25, 880.0, 1760.0, 2093.0,
];
for freq in freqs {
let samples: Vec<f32> = (0..frame_len)
.map(|i| (2.0 * PI * freq * i as f32 / sample_rate).sin())
.collect();
let result = detector.detect(&samples, sample_rate).unwrap();
assert!(
(result - freq).abs() < 1.0,
"{result} and {freq} don't match"
);
}
}
#[test]
fn test_detect_constant_signal() {
let mut detector = Autocorrelation::default();
let samples: Vec<f32> = vec![0.1; 500]; let sample_rate = 44100.0;
assert!(detector.detect(&samples, sample_rate).is_none());
}
#[test]
fn test_detect_short_buffer_handles_gracefully() {
let mut detector = Autocorrelation::new(0, 2000);
let short_samples = vec![0.1; 500];
let result = detector.detect(&short_samples, 44100.0);
assert!(result.is_none());
}