mod common;
use rosa::matrix::Matrix;
use rosa::spectral::DeltaParams;
#[test]
fn test_delta_order1_matches_librosa() {
let ref_data = common::load_audio_reference("delta.json");
let rows = ref_data["input_rows"].as_u64().unwrap() as usize;
let cols = ref_data["input_cols"].as_u64().unwrap() as usize;
let input_flat: Vec<f64> = serde_json::from_value(ref_data["input"].clone()).unwrap();
let input = Matrix::from_vec(input_flat, rows, cols);
let expected_rows = ref_data["delta1_rows"].as_u64().unwrap() as usize;
let expected_cols = ref_data["delta1_cols"].as_u64().unwrap() as usize;
let expected: Vec<f64> = serde_json::from_value(ref_data["delta1"].clone()).unwrap();
let result = rosa::spectral::delta(&input, &DeltaParams { width: 9, order: 1 });
assert_eq!(
result.shape(),
(expected_rows, expected_cols),
"delta1 shape mismatch"
);
common::assert_approx_eq(result.as_slice(), &expected, 1e-8, "delta1");
}
#[test]
fn test_delta_order2_matches_librosa() {
let ref_data = common::load_audio_reference("delta.json");
let rows = ref_data["input_rows"].as_u64().unwrap() as usize;
let cols = ref_data["input_cols"].as_u64().unwrap() as usize;
let input_flat: Vec<f64> = serde_json::from_value(ref_data["input"].clone()).unwrap();
let input = Matrix::from_vec(input_flat, rows, cols);
let expected_rows = ref_data["delta2_rows"].as_u64().unwrap() as usize;
let expected_cols = ref_data["delta2_cols"].as_u64().unwrap() as usize;
let expected: Vec<f64> = serde_json::from_value(ref_data["delta2"].clone()).unwrap();
let result = rosa::spectral::delta(&input, &DeltaParams { width: 9, order: 2 });
assert_eq!(
result.shape(),
(expected_rows, expected_cols),
"delta2 shape mismatch"
);
common::assert_approx_eq(result.as_slice(), &expected, 1e-8, "delta2");
}