|
@ -1,6 +1,6 @@ |
|
|
extern crate assert;
|
|
|
extern crate assert;
|
|
|
extern crate complex;
|
|
|
extern crate complex;
|
|
|
extern crate fft;
|
|
|
|
|
|
|
|
|
extern crate dft;
|
|
|
|
|
|
|
|
|
use complex::c64;
|
|
|
use complex::c64;
|
|
|
|
|
|
|
|
@ -9,53 +9,53 @@ mod fixtures; |
|
|
#[test]
|
|
|
#[test]
|
|
|
fn complex_forward_128() {
|
|
|
fn complex_forward_128() {
|
|
|
let mut data = fixtures::TIME_DATA_256.to_vec();
|
|
|
let mut data = fixtures::TIME_DATA_256.to_vec();
|
|
|
fft::complex::forward(as_c64_mut(&mut data));
|
|
|
|
|
|
|
|
|
dft::complex::forward(as_c64_mut(&mut data));
|
|
|
assert::close(&data, &fixtures::FREQUENCY_DATA_128_COMPLEX[..], 1e-14);
|
|
|
assert::close(&data, &fixtures::FREQUENCY_DATA_128_COMPLEX[..], 1e-14);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
#[test]
|
|
|
fn complex_forward_real_256() {
|
|
|
fn complex_forward_real_256() {
|
|
|
let mut data = to_c64(&fixtures::TIME_DATA_256);
|
|
|
let mut data = to_c64(&fixtures::TIME_DATA_256);
|
|
|
fft::complex::forward(&mut data);
|
|
|
|
|
|
|
|
|
dft::complex::forward(&mut data);
|
|
|
assert::close(as_f64(&data), &fixtures::FREQUENCY_DATA_256_REAL_UNPACKED[..], 1e-13);
|
|
|
assert::close(as_f64(&data), &fixtures::FREQUENCY_DATA_256_REAL_UNPACKED[..], 1e-13);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
#[test]
|
|
|
fn complex_inverse_128() {
|
|
|
fn complex_inverse_128() {
|
|
|
let mut data = fixtures::FREQUENCY_DATA_128_COMPLEX.to_vec();
|
|
|
let mut data = fixtures::FREQUENCY_DATA_128_COMPLEX.to_vec();
|
|
|
fft::complex::inverse(as_c64_mut(&mut data));
|
|
|
|
|
|
|
|
|
dft::complex::inverse(as_c64_mut(&mut data));
|
|
|
assert::close(&data, &fixtures::TIME_DATA_256[..], 1e-14);
|
|
|
assert::close(&data, &fixtures::TIME_DATA_256[..], 1e-14);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
#[test]
|
|
|
fn real_forward_256() {
|
|
|
fn real_forward_256() {
|
|
|
let mut data = fixtures::TIME_DATA_256.to_vec();
|
|
|
let mut data = fixtures::TIME_DATA_256.to_vec();
|
|
|
fft::real::forward(&mut data);
|
|
|
|
|
|
|
|
|
dft::real::forward(&mut data);
|
|
|
assert::close(&data, &fixtures::FREQUENCY_DATA_256_REAL_PACKED[..], 1e-13);
|
|
|
assert::close(&data, &fixtures::FREQUENCY_DATA_256_REAL_PACKED[..], 1e-13);
|
|
|
let data = fft::real::unpack(&data);
|
|
|
|
|
|
|
|
|
let data = dft::real::unpack(&data);
|
|
|
assert::close(as_f64(&data), &fixtures::FREQUENCY_DATA_256_REAL_UNPACKED[..], 1e-13);
|
|
|
assert::close(as_f64(&data), &fixtures::FREQUENCY_DATA_256_REAL_UNPACKED[..], 1e-13);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
#[test]
|
|
|
fn real_forward_512() {
|
|
|
fn real_forward_512() {
|
|
|
let mut data = fixtures::TIME_DATA_512.to_vec();
|
|
|
let mut data = fixtures::TIME_DATA_512.to_vec();
|
|
|
fft::real::forward(&mut data);
|
|
|
|
|
|
let data = fft::real::unpack(&data);
|
|
|
|
|
|
|
|
|
dft::real::forward(&mut data);
|
|
|
|
|
|
let data = dft::real::unpack(&data);
|
|
|
assert::close(as_f64(&data), &fixtures::FREQUENCY_DATA_512_REAL_UNPACKED[..], 1e-12);
|
|
|
assert::close(as_f64(&data), &fixtures::FREQUENCY_DATA_512_REAL_UNPACKED[..], 1e-12);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
#[test]
|
|
|
fn real_inverse_256() {
|
|
|
fn real_inverse_256() {
|
|
|
let mut data = fixtures::FREQUENCY_DATA_256_REAL_PACKED.to_vec();
|
|
|
let mut data = fixtures::FREQUENCY_DATA_256_REAL_PACKED.to_vec();
|
|
|
fft::real::inverse(&mut data);
|
|
|
|
|
|
|
|
|
dft::real::inverse(&mut data);
|
|
|
assert::close(&data, &fixtures::TIME_DATA_256[..], 1e-14);
|
|
|
assert::close(&data, &fixtures::TIME_DATA_256[..], 1e-14);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
#[test]
|
|
|
fn real_inverse_512() {
|
|
|
fn real_inverse_512() {
|
|
|
let mut data = fixtures::TIME_DATA_512.to_vec();
|
|
|
let mut data = fixtures::TIME_DATA_512.to_vec();
|
|
|
fft::real::forward(&mut data);
|
|
|
|
|
|
fft::real::inverse(&mut data);
|
|
|
|
|
|
|
|
|
dft::real::forward(&mut data);
|
|
|
|
|
|
dft::real::inverse(&mut data);
|
|
|
assert::close(&data, &fixtures::TIME_DATA_512[..], 1e-14);
|
|
|
assert::close(&data, &fixtures::TIME_DATA_512[..], 1e-14);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|