use brainwires_audio::{AudioBuffer, AudioConfig};
#[test]
fn new_buffer_is_empty() {
let buf = AudioBuffer::new(AudioConfig::speech());
assert!(buf.is_empty());
assert_eq!(buf.num_frames(), 0);
assert_eq!(buf.duration_secs(), 0.0);
}
#[test]
fn from_pcm_stores_data_and_config() {
let data = vec![0u8; 128];
let cfg = AudioConfig::cd_quality();
let buf = AudioBuffer::from_pcm(data.clone(), cfg);
assert_eq!(buf.data, data);
assert_eq!(buf.config.sample_rate, 44_100);
assert_eq!(buf.config.channels, 2);
assert!(!buf.is_empty());
}
#[test]
fn num_frames_mono_i16() {
let buf = AudioBuffer::from_pcm(vec![0u8; 100], AudioConfig::speech());
assert_eq!(buf.num_frames(), 50);
}
#[test]
fn num_frames_stereo_i16() {
let buf = AudioBuffer::from_pcm(vec![0u8; 100], AudioConfig::cd_quality());
assert_eq!(buf.num_frames(), 25);
}
#[test]
fn num_frames_stereo_f32() {
let buf = AudioBuffer::from_pcm(vec![0u8; 80], AudioConfig::high_quality());
assert_eq!(buf.num_frames(), 10);
}
#[test]
fn num_frames_truncates_partial_frame() {
let buf = AudioBuffer::from_pcm(vec![0u8; 5], AudioConfig::speech());
assert_eq!(buf.num_frames(), 2);
}
#[test]
fn duration_one_second_speech() {
let buf = AudioBuffer::from_pcm(vec![0u8; 32_000], AudioConfig::speech());
assert!((buf.duration_secs() - 1.0).abs() < 1e-9);
}
#[test]
fn duration_one_second_cd_quality() {
let buf = AudioBuffer::from_pcm(vec![0u8; 176_400], AudioConfig::cd_quality());
assert!((buf.duration_secs() - 1.0).abs() < 1e-9);
}
#[test]
fn duration_one_second_high_quality() {
let buf = AudioBuffer::from_pcm(vec![0u8; 384_000], AudioConfig::high_quality());
assert!((buf.duration_secs() - 1.0).abs() < 1e-9);
}
#[test]
fn duration_half_second() {
let buf = AudioBuffer::from_pcm(vec![0u8; 16_000], AudioConfig::speech());
assert!((buf.duration_secs() - 0.5).abs() < 1e-9);
}
#[test]
fn duration_empty_is_zero() {
let buf = AudioBuffer::new(AudioConfig::high_quality());
assert_eq!(buf.duration_secs(), 0.0);
}