diff --git a/tests/common/mod.rs b/tests/common/mod.rs index 80785d7..ab57382 100644 --- a/tests/common/mod.rs +++ b/tests/common/mod.rs @@ -405,12 +405,28 @@ pub fn pset_n(matrix: &mut Matrix, nid: NodeId, parm: &str, v_norm: f32) { matrix.set_param(p, SAtom::param(v_norm)); } +#[allow(unused)] +pub fn node_pset_n(matrix: &mut Matrix, node: &str, instance: usize, parm: &str, v_norm: f32) { + let nid = NodeId::from_str(node).to_instance(instance); + assert!(nid != NodeId::Nop); + let p = nid.inp_param(parm).unwrap(); + matrix.set_param(p, SAtom::param(v_norm)); +} + #[allow(unused)] pub fn pset_d(matrix: &mut Matrix, nid: NodeId, parm: &str, v_denorm: f32) { let p = nid.inp_param(parm).unwrap(); matrix.set_param(p, SAtom::param(p.norm(v_denorm))); } +#[allow(unused)] +pub fn node_pset_d(matrix: &mut Matrix, node: &str, instance: usize, parm: &str, v_denorm: f32) { + let nid = NodeId::from_str(node).to_instance(instance); + assert!(nid != NodeId::Nop); + let p = nid.inp_param(parm).unwrap(); + matrix.set_param(p, SAtom::param(p.norm(v_denorm))); +} + #[allow(unused)] pub fn pset_n_wait( matrix: &mut Matrix, diff --git a/tests/node_scope.rs b/tests/node_scope.rs index b2a1769..e3bf294 100644 --- a/tests/node_scope.rs +++ b/tests/node_scope.rs @@ -7,41 +7,47 @@ use common::*; use hexodsp::nodes::SCOPE_SAMPLES; -#[test] -fn check_node_scope_1() { - let (node_conf, mut node_exec) = new_node_engine(); - let mut matrix = Matrix::new(node_conf, 3, 3); +fn read_scope_buf(matrix: &Matrix, sig_idx: usize) -> (Vec, Vec, f32, f32) { + let handle = matrix.get_scope_handle(0).unwrap(); - let mut chain = MatrixCellChain::new(CellDir::B); - chain.node_inp("scope", "in1").place(&mut matrix, 0, 0).unwrap(); - matrix.sync().unwrap(); + let mut min = vec![]; + let mut max = vec![]; + let mut total_min: f32 = 99999.9; + let mut total_max: f32 = -99999.9; - let scope = NodeId::Scope(0); - let in1_p = scope.inp_param("in1").unwrap(); - let in2_p = scope.inp_param("in2").unwrap(); - let in3_p = scope.inp_param("in3").unwrap(); - - matrix.set_param(in1_p, SAtom::param(1.0)); - matrix.set_param(in2_p, SAtom::param(1.0)); - matrix.set_param(in3_p, SAtom::param(1.0)); - let _res = run_for_ms(&mut node_exec, 11.0); - - let scope = matrix.get_scope_handle(0).unwrap(); - let mut v = vec![]; - for x in 0..SCOPE_SAMPLES { - v.push(scope.read(0, x)); + for i in 0..SCOPE_SAMPLES { + let (mi, ma) = handle.read(sig_idx, i); + min.push(mi); + max.push(ma); + total_min = total_min.min(mi); + total_max = total_max.max(ma); } - assert_decimated_feq!(v, 80, vec![0.0022, 0.1836, 0.3650, 0.5464, 0.7278, 0.9093, 1.0]); - let mut v = vec![]; - for x in 0..SCOPE_SAMPLES { - v.push(scope.read(1, x)); - } - assert_decimated_feq!(v, 80, vec![0.0022, 0.1836, 0.3650, 0.5464, 0.7278, 0.9093, 1.0]); - - let mut v = vec![]; - for x in 0..SCOPE_SAMPLES { - v.push(scope.read(2, x)); - } - assert_decimated_feq!(v, 80, vec![0.0022, 0.1836, 0.3650, 0.5464, 0.7278, 0.9093, 1.0]); + (min, max, total_min, total_max) +} + +#[test] +fn check_node_scope_inputs() { + for (sig_idx, inp_name) in ["in1", "in2", "in3"].iter().enumerate() { + let (node_conf, mut node_exec) = new_node_engine(); + let mut matrix = Matrix::new(node_conf, 3, 3); + + let mut chain = MatrixCellChain::new(CellDir::B); + chain + .node_out("amp", "sig") + .node_inp("scope", inp_name) + .set_denorm("time", (1000.0 / 44100.0) * (SCOPE_SAMPLES as f32)) + .place(&mut matrix, 0, 0) + .unwrap(); + matrix.sync().unwrap(); + + node_pset_d(&mut matrix, "amp", 0, "inp", 1.0); + let _res = run_for_ms(&mut node_exec, 11.0); + + let (minv, maxv, min, max) = read_scope_buf(&matrix, sig_idx); + assert_decimated_feq!(minv, 80, vec![0.0022, 0.1836, 0.3650, 0.5464, 0.7278, 0.9093, 1.0]); + assert_decimated_feq!(maxv, 80, vec![0.0022, 0.1836, 0.3650, 0.5464, 0.7278, 0.9093, 1.0]); + assert_float_eq!(min, 0.0); + assert_float_eq!(max, 1.0); + } }