use opus_rs::mdct::MdctLookup;
use std::f32::consts::PI;
#[test]
fn test_mdct_loopback() {
let n = 960;
let overlap = 120;
let lookup = MdctLookup::new(n, 0);
let mut window = vec![0.0f32; overlap];
for i in 0..overlap {
let x = (i as f32 + 0.5) / overlap as f32;
window[i] = (PI / 2.0 * (PI / 2.0 * x).sin().powi(2)).sin();
}
let mut in_pcm = vec![0.0f32; 2 * n];
for i in 0..2 * n {
in_pcm[i] = (i as f32 * 0.05).sin();
}
let mut out_pcm = vec![0.0f32; 2 * n];
let mut history = vec![0.0f32; overlap];
let mut frame1_in = vec![0.0f32; n + overlap];
frame1_in[overlap..].copy_from_slice(&in_pcm[0..n]);
let mut freq1 = vec![0.0f32; n / 2];
lookup.forward(&frame1_in, &mut freq1, &window, overlap, 0, 1);
let mut frame1_out = vec![0.0f32; n + overlap];
frame1_out[..overlap].copy_from_slice(&history);
lookup.backward(&freq1, &mut frame1_out, &window, overlap, 0, 1);
out_pcm[0..n].copy_from_slice(&frame1_out[..n]);
history.copy_from_slice(&frame1_out[n..n + overlap]);
let mut frame2_in = vec![0.0f32; n + overlap];
frame2_in[..overlap].copy_from_slice(&in_pcm[n - overlap..n]);
frame2_in[overlap..overlap + n].copy_from_slice(&in_pcm[n..2 * n]);
}
fn main() {}