2022-08-20 06:36:45 +00:00
|
|
|
// Copyright (c) 2022 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::*;
|
|
|
|
|
|
|
|
struct MyParams {}
|
|
|
|
|
|
|
|
impl hexodsp::nodes::ExternalParams for MyParams {
|
|
|
|
fn a1(&self) -> f32 {
|
|
|
|
0.23
|
|
|
|
}
|
|
|
|
fn a2(&self) -> f32 {
|
|
|
|
0.44
|
|
|
|
}
|
|
|
|
fn a3(&self) -> f32 {
|
|
|
|
-0.33
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn check_node_exta() {
|
|
|
|
let (node_conf, mut node_exec) = new_node_engine();
|
|
|
|
let mut matrix = Matrix::new(node_conf, 3, 3);
|
|
|
|
|
|
|
|
let myparams = std::sync::Arc::new(MyParams {});
|
|
|
|
|
|
|
|
let mut chain = MatrixCellChain::new(CellDir::B);
|
|
|
|
chain.node_out("exta", "sig1").node_inp("out", "ch1").place(&mut matrix, 0, 0).unwrap();
|
|
|
|
let mut chain = MatrixCellChain::new(CellDir::B);
|
|
|
|
chain.node_out("exta", "sig3").node_inp("out", "ch2").place(&mut matrix, 1, 0).unwrap();
|
|
|
|
matrix.sync().unwrap();
|
|
|
|
|
|
|
|
node_exec.set_external_params(myparams);
|
|
|
|
|
|
|
|
let (ch1, ch2) = node_exec.test_run(0.1, false, &[]);
|
|
|
|
assert_decimated_feq!(ch1, 10, vec![0.23; 100]);
|
|
|
|
assert_decimated_feq!(ch2, 10, vec![-0.33; 100]);
|
|
|
|
|
|
|
|
node_pset_n(&mut matrix, "exta", 0, "atv1", -1.0);
|
|
|
|
node_pset_n(&mut matrix, "exta", 0, "atv3", 0.5);
|
|
|
|
|
|
|
|
let (ch1, ch2) = node_exec.test_run(0.1, false, &[]);
|
|
|
|
assert_decimated_feq!(
|
|
|
|
ch1,
|
|
|
|
80,
|
|
|
|
vec![
|
|
|
|
0.22895692,
|
|
|
|
0.14551038,
|
|
|
|
0.062063817,
|
|
|
|
-0.021382917,
|
|
|
|
-0.10482957,
|
|
|
|
-0.18827613,
|
|
|
|
-0.23,
|
|
|
|
-0.23,
|
|
|
|
-0.23,
|
|
|
|
-0.23,
|
|
|
|
-0.23
|
|
|
|
]
|
|
|
|
);
|
|
|
|
assert_decimated_feq!(
|
|
|
|
ch2,
|
|
|
|
80,
|
|
|
|
vec![
|
|
|
|
-0.32962584,
|
|
|
|
-0.29969355,
|
|
|
|
-0.26976123,
|
|
|
|
-0.23982893,
|
|
|
|
-0.20989662,
|
|
|
|
-0.17996432,
|
|
|
|
-0.165,
|
|
|
|
-0.165,
|
|
|
|
-0.165,
|
|
|
|
-0.165,
|
|
|
|
-0.165,
|
|
|
|
-0.165,
|
|
|
|
-0.165
|
|
|
|
]
|
|
|
|
);
|
|
|
|
}
|
2022-08-20 12:01:54 +00:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn check_node_exta_slew() {
|
|
|
|
let (node_conf, mut node_exec) = new_node_engine();
|
|
|
|
let mut matrix = Matrix::new(node_conf, 3, 3);
|
|
|
|
|
|
|
|
let myparams = std::sync::Arc::new(MyParams {});
|
|
|
|
|
|
|
|
let mut chain = MatrixCellChain::new(CellDir::B);
|
|
|
|
chain
|
|
|
|
.node_out("exta", "sig1")
|
|
|
|
.set_denorm("slew", 40.0)
|
|
|
|
.node_inp("out", "ch1")
|
|
|
|
.place(&mut matrix, 0, 0)
|
|
|
|
.unwrap();
|
|
|
|
let mut chain = MatrixCellChain::new(CellDir::B);
|
|
|
|
chain
|
|
|
|
.node_out("exta", "sig3")
|
|
|
|
.set_denorm("slew", 40.0)
|
|
|
|
.node_inp("out", "ch2")
|
|
|
|
.place(&mut matrix, 1, 0)
|
|
|
|
.unwrap();
|
|
|
|
matrix.sync().unwrap();
|
|
|
|
|
|
|
|
node_exec.set_external_params(myparams);
|
|
|
|
|
|
|
|
let (ch1, ch2) = node_exec.test_run(0.1, false, &[]);
|
|
|
|
assert_decimated_feq!(
|
|
|
|
ch1,
|
|
|
|
80,
|
|
|
|
vec![
|
|
|
|
0.00056689343,
|
|
|
|
0.045918357,
|
|
|
|
0.09126975,
|
|
|
|
0.13662128,
|
|
|
|
0.18197326,
|
|
|
|
0.22732525,
|
|
|
|
0.23,
|
|
|
|
0.23,
|
|
|
|
0.23,
|
|
|
|
0.23,
|
|
|
|
0.23
|
|
|
|
]
|
|
|
|
);
|
|
|
|
assert_decimated_feq!(
|
|
|
|
ch2,
|
|
|
|
80,
|
|
|
|
vec![
|
|
|
|
-0.00056689343,
|
|
|
|
-0.045918357,
|
|
|
|
-0.09126975,
|
|
|
|
-0.13662128,
|
|
|
|
-0.18197326,
|
|
|
|
-0.22732525,
|
|
|
|
-0.2726772,
|
|
|
|
-0.3180292,
|
|
|
|
-0.33,
|
|
|
|
-0.33,
|
|
|
|
-0.33
|
|
|
|
]
|
|
|
|
);
|
|
|
|
}
|