use fftw::plan::*;
use fftw::types::*;
#[test]
fn r2r2r_identity() {
let n = 32;
let mut a = vec![0.0f64; n];
let mut b = vec![0.0f64; n];
let mut fwd: R2RPlan64 =
R2RPlan::new(&[n], &mut a, &mut b, R2RKind::FFTW_REDFT10, Flag::MEASURE).unwrap();
let mut bwd: R2RPlan64 =
R2RPlan::new(&[n], &mut b, &mut a, R2RKind::FFTW_REDFT01, Flag::MEASURE).unwrap();
let factor = 2. * n as f64;
for a_i in a.iter_mut() {
*a_i = 1.0;
}
fwd.r2r(&mut a, &mut b).unwrap();
for i in &mut b {
*i /= factor.sqrt();
}
bwd.r2r(&mut b, &mut a).unwrap();
for i in &mut a {
*i /= factor.sqrt();
}
for v in a.iter() {
let dif = (v - 1.).abs();
if dif > 1e-7 {
panic!("Large difference: v={}, dif={}", v, dif);
}
}
}