2021-08-13 03:48:20 +00:00
|
|
|
// Copyright (c) 2021 Weird Constructor <weirdconstructor@gmail.com>
|
|
|
|
// This file is a part of HexoDSP. Released under GPL-3.0-or-later.
|
|
|
|
// See README.md and COPYING for details.
|
|
|
|
|
|
|
|
mod common;
|
|
|
|
use common::*;
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn check_node_rndwk_def_trig() {
|
|
|
|
let (node_conf, mut node_exec) = new_node_engine();
|
|
|
|
let mut matrix = Matrix::new(node_conf, 3, 3);
|
|
|
|
|
|
|
|
let rwk = NodeId::RndWk(0);
|
|
|
|
let out = NodeId::Out(0);
|
2022-07-17 09:58:28 +00:00
|
|
|
matrix.place(0, 0, Cell::empty(rwk).out(None, None, rwk.out("sig")));
|
|
|
|
matrix.place(0, 1, Cell::empty(out).input(out.inp("ch1"), None, None));
|
2021-08-13 03:48:20 +00:00
|
|
|
matrix.sync().unwrap();
|
|
|
|
|
|
|
|
pset_n(&mut matrix, rwk, "trig", 1.0);
|
2021-08-14 05:45:11 +00:00
|
|
|
run_for_ms(&mut node_exec, 4.2); // wait for trigger...
|
2021-08-13 03:48:20 +00:00
|
|
|
|
|
|
|
let (out_l, _) = run_for_ms(&mut node_exec, 20.0);
|
2022-07-17 09:58:28 +00:00
|
|
|
assert_decimated_feq!(
|
|
|
|
out_l,
|
|
|
|
40,
|
|
|
|
vec![
|
|
|
|
0.0, // start value
|
|
|
|
// slew ramp:
|
|
|
|
0.001814059,
|
|
|
|
0.0139077855,
|
|
|
|
0.026001511,
|
|
|
|
0.03809524,
|
|
|
|
0.050188966,
|
|
|
|
0.062282693,
|
|
|
|
0.07437642,
|
|
|
|
0.08647014,
|
|
|
|
0.09856387,
|
|
|
|
0.110657595,
|
|
|
|
// end value:
|
|
|
|
0.11378352,
|
|
|
|
0.11378352,
|
|
|
|
0.11378352,
|
|
|
|
0.11378352,
|
|
|
|
0.11378352,
|
|
|
|
]
|
|
|
|
);
|
2021-08-13 03:48:20 +00:00
|
|
|
|
|
|
|
pset_n(&mut matrix, rwk, "trig", 0.0);
|
2021-08-13 04:12:18 +00:00
|
|
|
pset_d_wait(&mut matrix, &mut node_exec, rwk, "slew", 10.0);
|
2021-08-13 03:48:20 +00:00
|
|
|
pset_n(&mut matrix, rwk, "trig", 1.0);
|
2021-08-14 05:45:11 +00:00
|
|
|
run_for_ms(&mut node_exec, 4.0); // wait for trigger...
|
2021-08-13 03:48:20 +00:00
|
|
|
|
|
|
|
let (out_l, _) = run_for_ms(&mut node_exec, 20.0);
|
2022-07-17 09:58:28 +00:00
|
|
|
assert_decimated_feq!(
|
|
|
|
out_l,
|
|
|
|
15,
|
|
|
|
vec![
|
|
|
|
0.11378352, 0.11378352, 0.11378352, // last value
|
|
|
|
0.11831867, 0.15233228, 0.18634588, 0.22035949, 0.2543731, 0.26017055,
|
|
|
|
0.26017055, // end value
|
|
|
|
]
|
|
|
|
);
|
2021-08-13 03:48:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn check_node_rndwk_step() {
|
|
|
|
let (node_conf, mut node_exec) = new_node_engine();
|
|
|
|
let mut matrix = Matrix::new(node_conf, 3, 3);
|
|
|
|
|
|
|
|
let rwk = NodeId::RndWk(0);
|
|
|
|
let out = NodeId::Out(0);
|
2022-07-17 09:58:28 +00:00
|
|
|
matrix.place(0, 0, Cell::empty(rwk).out(None, None, rwk.out("sig")));
|
|
|
|
matrix.place(0, 1, Cell::empty(out).input(out.inp("ch1"), None, None));
|
2021-08-13 03:48:20 +00:00
|
|
|
pset_d(&mut matrix, rwk, "step", 1.0);
|
|
|
|
matrix.sync().unwrap();
|
|
|
|
|
|
|
|
pset_n(&mut matrix, rwk, "trig", 1.0);
|
2021-08-14 05:45:11 +00:00
|
|
|
run_for_ms(&mut node_exec, 4.51); // wait for trigger...
|
2021-08-13 03:48:20 +00:00
|
|
|
|
2021-08-13 04:12:18 +00:00
|
|
|
let (out_l, _) = run_for_ms(&mut node_exec, 50.0);
|
2022-07-17 09:58:28 +00:00
|
|
|
assert_decimated_feq!(
|
|
|
|
out_l,
|
|
|
|
200,
|
|
|
|
vec![
|
|
|
|
0.0, // start value
|
|
|
|
// slew ramp:
|
|
|
|
0.054119427,
|
|
|
|
0.11458806,
|
|
|
|
0.1750567,
|
|
|
|
0.23552532,
|
|
|
|
0.29599395,
|
|
|
|
0.3564626,
|
|
|
|
0.4169312,
|
|
|
|
0.47739986,
|
|
|
|
0.5378685,
|
|
|
|
// end value
|
|
|
|
// which is 5.0 * 0.11378352
|
|
|
|
// (the first random sample, see previous test)
|
|
|
|
0.56891763,
|
|
|
|
0.56891763,
|
|
|
|
]
|
|
|
|
);
|
2021-08-13 03:48:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn check_node_rndwk_offs() {
|
|
|
|
let (node_conf, mut node_exec) = new_node_engine();
|
|
|
|
let mut matrix = Matrix::new(node_conf, 3, 3);
|
|
|
|
|
|
|
|
let rwk = NodeId::RndWk(0);
|
|
|
|
let out = NodeId::Out(0);
|
2022-07-17 09:58:28 +00:00
|
|
|
matrix.place(0, 0, Cell::empty(rwk).out(None, None, rwk.out("sig")));
|
|
|
|
matrix.place(0, 1, Cell::empty(out).input(out.inp("ch1"), None, None));
|
2021-08-13 03:48:20 +00:00
|
|
|
pset_d(&mut matrix, rwk, "offs", 0.3);
|
2021-08-13 04:12:18 +00:00
|
|
|
pset_d(&mut matrix, rwk, "slew", 10.0);
|
2021-08-13 03:48:20 +00:00
|
|
|
matrix.sync().unwrap();
|
|
|
|
|
|
|
|
pset_n(&mut matrix, rwk, "trig", 1.0);
|
2021-08-14 05:45:11 +00:00
|
|
|
run_for_ms(&mut node_exec, 4.51); // wait for trigger...
|
2021-08-13 03:48:20 +00:00
|
|
|
|
|
|
|
let (out_l, _) = run_for_ms(&mut node_exec, 20.0);
|
2022-07-17 09:58:28 +00:00
|
|
|
assert_decimated_feq!(
|
|
|
|
out_l,
|
|
|
|
60,
|
|
|
|
vec![
|
|
|
|
0.0, // start value
|
|
|
|
// slew ramp:
|
|
|
|
0.088435374,
|
|
|
|
0.2244898,
|
|
|
|
0.3605442,
|
|
|
|
// end value
|
|
|
|
// which is 0.11378352 + 0.3
|
|
|
|
// (the first random sample, see previous test)
|
|
|
|
0.41378355,
|
|
|
|
0.41378355,
|
|
|
|
0.41378355,
|
|
|
|
]
|
|
|
|
);
|
2021-08-13 03:48:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn check_node_rndwk_offs_neg() {
|
|
|
|
let (node_conf, mut node_exec) = new_node_engine();
|
|
|
|
let mut matrix = Matrix::new(node_conf, 3, 3);
|
|
|
|
|
|
|
|
let rwk = NodeId::RndWk(0);
|
|
|
|
let out = NodeId::Out(0);
|
2022-07-17 09:58:28 +00:00
|
|
|
matrix.place(0, 0, Cell::empty(rwk).out(None, None, rwk.out("sig")));
|
|
|
|
matrix.place(0, 1, Cell::empty(out).input(out.inp("ch1"), None, None));
|
2021-08-13 03:48:20 +00:00
|
|
|
pset_d(&mut matrix, rwk, "offs", -0.2);
|
|
|
|
matrix.sync().unwrap();
|
|
|
|
|
|
|
|
pset_n(&mut matrix, rwk, "trig", 1.0);
|
2021-08-14 05:45:11 +00:00
|
|
|
run_for_ms(&mut node_exec, 4.51); // wait for trigger...
|
2021-08-13 03:48:20 +00:00
|
|
|
|
|
|
|
let (out_l, _) = run_for_ms(&mut node_exec, 20.0);
|
2022-07-17 09:58:28 +00:00
|
|
|
assert_decimated_feq!(
|
|
|
|
out_l,
|
|
|
|
60,
|
|
|
|
vec![
|
|
|
|
0.0, // start value
|
|
|
|
// slew ramp:
|
|
|
|
0.011791383,
|
|
|
|
0.029931974,
|
|
|
|
0.04807256,
|
|
|
|
0.06621315,
|
|
|
|
0.084353745,
|
|
|
|
// end value
|
|
|
|
// which is (0.11378352 - 0.2).abs()
|
|
|
|
0.08621648,
|
|
|
|
0.08621648,
|
|
|
|
]
|
|
|
|
);
|
2021-08-13 03:48:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn check_node_rndwk_max() {
|
|
|
|
let (node_conf, mut node_exec) = new_node_engine();
|
|
|
|
let mut matrix = Matrix::new(node_conf, 3, 3);
|
|
|
|
|
|
|
|
let rwk = NodeId::RndWk(0);
|
|
|
|
let out = NodeId::Out(0);
|
2022-07-17 09:58:28 +00:00
|
|
|
matrix.place(0, 0, Cell::empty(rwk).out(None, None, rwk.out("sig")));
|
|
|
|
matrix.place(0, 1, Cell::empty(out).input(out.inp("ch1"), None, None));
|
2021-08-13 03:48:20 +00:00
|
|
|
pset_d(&mut matrix, rwk, "step", 1.0); // => first sample is 0.56891763
|
|
|
|
pset_d(&mut matrix, rwk, "max", 0.5);
|
|
|
|
matrix.sync().unwrap();
|
|
|
|
|
|
|
|
pset_n(&mut matrix, rwk, "trig", 1.0);
|
2021-08-14 05:45:11 +00:00
|
|
|
run_for_ms(&mut node_exec, 4.51); // wait for trigger...
|
2021-08-13 03:48:20 +00:00
|
|
|
|
2021-08-13 22:39:46 +00:00
|
|
|
let (out_l, _) = run_for_ms(&mut node_exec, 50.0);
|
2022-07-17 09:58:28 +00:00
|
|
|
assert_decimated_feq!(
|
|
|
|
out_l,
|
|
|
|
200,
|
|
|
|
vec![
|
|
|
|
0.0, // start value
|
|
|
|
// slew ramp:
|
|
|
|
0.054119427,
|
|
|
|
0.11458806,
|
|
|
|
0.1750567,
|
|
|
|
0.23552532,
|
|
|
|
0.29599395,
|
|
|
|
0.3564626,
|
|
|
|
0.4169312,
|
|
|
|
// end value
|
|
|
|
// which is (0.5 - 0.43108237) == 0.06891763
|
|
|
|
0.43108237,
|
|
|
|
0.43108237,
|
|
|
|
0.43108237,
|
|
|
|
0.43108237
|
|
|
|
]
|
|
|
|
);
|
2021-08-13 03:48:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn check_node_rndwk_min() {
|
|
|
|
let (node_conf, mut node_exec) = new_node_engine();
|
|
|
|
let mut matrix = Matrix::new(node_conf, 3, 3);
|
|
|
|
|
|
|
|
let rwk = NodeId::RndWk(0);
|
|
|
|
let out = NodeId::Out(0);
|
2022-07-17 09:58:28 +00:00
|
|
|
matrix.place(0, 0, Cell::empty(rwk).out(None, None, rwk.out("sig")));
|
|
|
|
matrix.place(0, 1, Cell::empty(out).input(out.inp("ch1"), None, None));
|
2021-08-13 03:48:20 +00:00
|
|
|
pset_d(&mut matrix, rwk, "step", 1.0); // => first sample is 0.56891763
|
|
|
|
pset_d(&mut matrix, rwk, "max", 1.0);
|
|
|
|
pset_d(&mut matrix, rwk, "min", 0.75); // wraps first sample to 0.93108237
|
|
|
|
matrix.sync().unwrap();
|
|
|
|
|
|
|
|
pset_n(&mut matrix, rwk, "trig", 1.0);
|
2021-08-14 05:45:11 +00:00
|
|
|
run_for_ms(&mut node_exec, 4.51); // wait for trigger...
|
2021-08-13 03:48:20 +00:00
|
|
|
|
2021-08-13 04:12:18 +00:00
|
|
|
let (out_l, _) = run_for_ms(&mut node_exec, 100.0); // 75ms slew time default
|
2022-07-17 09:58:28 +00:00
|
|
|
assert_decimated_feq!(
|
|
|
|
out_l,
|
|
|
|
400,
|
|
|
|
vec![
|
|
|
|
0.0, // start value
|
|
|
|
// slew ramp:
|
|
|
|
0.11458806, 0.23552532, 0.3564626, 0.47739986, 0.5983371, 0.7192744, 0.84021163,
|
|
|
|
// end value
|
|
|
|
0.93108237, 0.93108237, 0.93108237, 0.93108237, 0.93108237, 0.93108237,
|
|
|
|
]
|
|
|
|
);
|
2021-08-13 03:48:20 +00:00
|
|
|
}
|