mod common;
use rosa::matrix::Matrix;
#[test]
fn test_stack_memory_matches_librosa() {
let ref_data = common::load_audio_reference("stack_memory.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 n_steps = ref_data["n_steps"].as_u64().unwrap() as usize;
let delay = ref_data["delay"].as_u64().unwrap() as usize;
let expected_rows = ref_data["output_rows"].as_u64().unwrap() as usize;
let expected_cols = ref_data["output_cols"].as_u64().unwrap() as usize;
let expected: Vec<f64> = serde_json::from_value(ref_data["output"].clone()).unwrap();
let result = rosa::matrix::stack_memory(&input, n_steps, delay);
assert_eq!(
result.shape(),
(expected_rows, expected_cols),
"stack_memory shape mismatch: got {:?}, expected ({}, {})",
result.shape(),
expected_rows,
expected_cols
);
common::assert_approx_eq(result.as_slice(), &expected, 1e-12, "stack_memory");
}