2021-08-04 01:58:43 +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.
|
|
|
|
|
2021-07-01 03:06:46 +00:00
|
|
|
mod common;
|
|
|
|
use common::*;
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn check_node_noise_bipolar() {
|
|
|
|
let (node_conf, mut node_exec) = new_node_engine();
|
|
|
|
let mut matrix = Matrix::new(node_conf, 3, 3);
|
|
|
|
|
|
|
|
let noise = NodeId::Noise(0);
|
|
|
|
let out = NodeId::Out(0);
|
|
|
|
matrix.place(0, 0, Cell::empty(noise)
|
|
|
|
.out(None, None, noise.out("sig")));
|
|
|
|
matrix.place(0, 1, Cell::empty(out)
|
|
|
|
.input(out.inp("ch1"), None, None));
|
2021-07-17 08:03:10 +00:00
|
|
|
pset_n(&mut matrix, noise, "atv", 1.0);
|
2021-07-01 03:06:46 +00:00
|
|
|
matrix.sync().unwrap();
|
|
|
|
|
|
|
|
let (out_l, _) = run_for_ms(&mut node_exec, 25.0);
|
|
|
|
|
|
|
|
assert_float_eq!(out_l[0], 0.1545);
|
|
|
|
assert_float_eq!(out_l[10], 0.5924);
|
|
|
|
assert_float_eq!(out_l[11], -0.3643);
|
|
|
|
|
|
|
|
let rms_mimax = calc_rms_mimax_each_ms(&out_l[..], 10.0);
|
|
|
|
assert_rmsmima!(rms_mimax[0], (0.3374, -0.9958, 0.9971));
|
|
|
|
assert_rmsmima!(rms_mimax[1], (0.3384, -0.9997, 0.9993));
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn check_node_noise_seed() {
|
|
|
|
let (node_conf, mut node_exec) = new_node_engine();
|
|
|
|
let mut matrix = Matrix::new(node_conf, 3, 3);
|
|
|
|
|
|
|
|
let noise = NodeId::Noise(0);
|
|
|
|
let nois2 = NodeId::Noise(1);
|
|
|
|
let out = NodeId::Out(0);
|
|
|
|
matrix.place(0, 0, Cell::empty(noise)
|
|
|
|
.out(None, None, noise.out("sig")));
|
|
|
|
matrix.place(0, 1, Cell::empty(out)
|
|
|
|
.input(out.inp("ch1"), None, None));
|
|
|
|
matrix.place(1, 0, Cell::empty(nois2)
|
|
|
|
.out(None, None, nois2.out("sig")));
|
|
|
|
matrix.place(1, 1, Cell::empty(out)
|
|
|
|
.input(out.inp("ch2"), None, None));
|
2021-07-17 08:03:10 +00:00
|
|
|
pset_n(&mut matrix, noise, "atv", 1.0);
|
|
|
|
pset_n(&mut matrix, nois2, "atv", 1.0);
|
2021-07-01 03:06:46 +00:00
|
|
|
matrix.sync().unwrap();
|
|
|
|
|
|
|
|
let (out_l, out_r) = run_for_ms(&mut node_exec, 25.0);
|
|
|
|
|
|
|
|
assert_float_eq!(out_l[0], 0.1545);
|
|
|
|
assert_float_eq!(out_l[10], 0.5924);
|
|
|
|
|
|
|
|
assert_float_eq!(out_r[0], -0.2156);
|
|
|
|
assert_float_eq!(out_r[10], 0.9441);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn check_node_noise_unipolar() {
|
|
|
|
let (node_conf, mut node_exec) = new_node_engine();
|
|
|
|
let mut matrix = Matrix::new(node_conf, 3, 3);
|
|
|
|
|
|
|
|
let noise = NodeId::Noise(0);
|
|
|
|
let out = NodeId::Out(0);
|
|
|
|
matrix.place(0, 0, Cell::empty(noise)
|
|
|
|
.out(None, None, noise.out("sig")));
|
|
|
|
matrix.place(0, 1, Cell::empty(out)
|
|
|
|
.input(out.inp("ch1"), None, None));
|
|
|
|
pset_s(&mut matrix, noise, "mode", 1);
|
2021-07-17 08:03:10 +00:00
|
|
|
pset_n(&mut matrix, noise, "atv", 1.0);
|
2021-07-01 03:06:46 +00:00
|
|
|
matrix.sync().unwrap();
|
|
|
|
|
|
|
|
let (out_l, _) = run_for_ms(&mut node_exec, 25.0);
|
|
|
|
|
|
|
|
assert_float_eq!(out_l[0], 0.5772);
|
|
|
|
assert_float_eq!(out_l[10], 0.7962);
|
|
|
|
assert_float_eq!(out_l[11], 0.3178);
|
|
|
|
|
|
|
|
let rms_mimax = calc_rms_mimax_each_ms(&out_l[..], 10.0);
|
|
|
|
assert_rmsmima!(rms_mimax[0], (0.3214, 0.002, 0.9985));
|
|
|
|
assert_rmsmima!(rms_mimax[1], (0.3373, 0.0001, 0.9996));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn check_node_noise_atv_offs() {
|
|
|
|
let (node_conf, mut node_exec) = new_node_engine();
|
|
|
|
let mut matrix = Matrix::new(node_conf, 3, 3);
|
|
|
|
|
|
|
|
let noise = NodeId::Noise(0);
|
|
|
|
let out = NodeId::Out(0);
|
|
|
|
matrix.place(0, 0, Cell::empty(noise)
|
|
|
|
.out(None, None, noise.out("sig")));
|
|
|
|
matrix.place(0, 1, Cell::empty(out)
|
|
|
|
.input(out.inp("ch1"), None, None));
|
|
|
|
pset_s(&mut matrix, noise, "mode", 1);
|
|
|
|
pset_n(&mut matrix, noise, "atv", 0.5);
|
|
|
|
pset_n(&mut matrix, noise, "offs", 0.3);
|
|
|
|
matrix.sync().unwrap();
|
|
|
|
|
|
|
|
let (out_l, _) = run_for_ms(&mut node_exec, 100.0);
|
|
|
|
let rms_mimax = calc_rms_mimax_each_ms(&out_l[..], 100.0);
|
|
|
|
println!("mima {:?}", rms_mimax);
|
|
|
|
assert_rmsmima!(rms_mimax[0], (0.3223, 0.3, 0.7998));
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn check_node_noise_atv_offs_2() {
|
|
|
|
let (node_conf, mut node_exec) = new_node_engine();
|
|
|
|
let mut matrix = Matrix::new(node_conf, 3, 3);
|
|
|
|
|
|
|
|
let noise = NodeId::Noise(0);
|
|
|
|
let out = NodeId::Out(0);
|
|
|
|
matrix.place(0, 0, Cell::empty(noise)
|
|
|
|
.out(None, None, noise.out("sig")));
|
|
|
|
matrix.place(0, 1, Cell::empty(out)
|
|
|
|
.input(out.inp("ch1"), None, None));
|
|
|
|
pset_s(&mut matrix, noise, "mode", 1);
|
|
|
|
pset_n(&mut matrix, noise, "atv", -0.5);
|
|
|
|
pset_n(&mut matrix, noise, "offs", -0.4);
|
|
|
|
matrix.sync().unwrap();
|
|
|
|
|
|
|
|
let (out_l, _) = run_for_ms(&mut node_exec, 100.0);
|
|
|
|
let rms_mimax = calc_rms_mimax_each_ms(&out_l[..], 100.0);
|
|
|
|
println!("mima {:?}", rms_mimax);
|
|
|
|
assert_rmsmima!(rms_mimax[0], (0.4422, -0.8998, -0.4));
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn check_node_noise_atv_offs_bipolar() {
|
|
|
|
let (node_conf, mut node_exec) = new_node_engine();
|
|
|
|
let mut matrix = Matrix::new(node_conf, 3, 3);
|
|
|
|
|
|
|
|
let noise = NodeId::Noise(0);
|
|
|
|
let out = NodeId::Out(0);
|
|
|
|
matrix.place(0, 0, Cell::empty(noise)
|
|
|
|
.out(None, None, noise.out("sig")));
|
|
|
|
matrix.place(0, 1, Cell::empty(out)
|
|
|
|
.input(out.inp("ch1"), None, None));
|
|
|
|
pset_s(&mut matrix, noise, "mode", 0);
|
|
|
|
pset_n(&mut matrix, noise, "atv", 0.5);
|
|
|
|
pset_n(&mut matrix, noise, "offs", 0.4);
|
|
|
|
matrix.sync().unwrap();
|
|
|
|
|
|
|
|
let (out_l, _) = run_for_ms(&mut node_exec, 100.0);
|
|
|
|
let rms_mimax = calc_rms_mimax_each_ms(&out_l[..], 100.0);
|
|
|
|
println!("mima {:?}", rms_mimax);
|
|
|
|
assert_rmsmima!(rms_mimax[0], (0.2407, -0.0998, 0.8996));
|
|
|
|
}
|
2021-07-10 20:16:55 +00:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn check_node_noise_fft() {
|
|
|
|
let (node_conf, mut node_exec) = new_node_engine();
|
|
|
|
let mut matrix = Matrix::new(node_conf, 3, 3);
|
|
|
|
|
|
|
|
let noise = NodeId::Noise(0);
|
|
|
|
let out = NodeId::Out(0);
|
|
|
|
matrix.place(0, 0, Cell::empty(noise)
|
|
|
|
.out(None, None, noise.out("sig")));
|
|
|
|
matrix.place(0, 1, Cell::empty(out)
|
|
|
|
.input(out.inp("ch1"), None, None));
|
|
|
|
pset_s(&mut matrix, noise, "mode", 0);
|
|
|
|
pset_n(&mut matrix, noise, "atv", 1.0);
|
|
|
|
pset_n(&mut matrix, noise, "offs", 0.0);
|
|
|
|
matrix.sync().unwrap();
|
|
|
|
|
|
|
|
let fft = run_and_get_fft4096(&mut node_exec, 50, 1000.0);
|
|
|
|
assert!(fft.len() > 15);
|
|
|
|
for (_freq, lvl) in fft {
|
|
|
|
assert_float_eq!(
|
|
|
|
(((lvl as i64 - 57) as f32).abs() / 10.0).floor(),
|
|
|
|
0.0);
|
|
|
|
}
|
|
|
|
}
|