HexoDSP/tests/node_midicc.rs

140 lines
4.1 KiB
Rust
Raw Normal View History

// 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::*;
#[test]
fn check_node_midicc_test_receive() {
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("midicc", "sig1")
.set_atom("cc1", SAtom::setting(10))
.node_inp("out", "ch1")
.place(&mut matrix, 0, 0)
.unwrap();
let mut chain = MatrixCellChain::new(CellDir::B);
chain
.node_out("midicc", "sig2")
.set_atom("cc2", SAtom::setting(12))
.node_inp("out", "ch2")
.place(&mut matrix, 1, 0)
.unwrap();
matrix.sync().unwrap();
// Test run for 5ms with 3 Note On events at sample positions
// 5, 10 and 130 in this block of samples:
let (ch1, ch2) = node_exec.test_run(
0.005,
false,
&[
HxTimedEvent::cc(3, 0, 12, 1.55),
HxTimedEvent::cc(5, 0, 10, 0.55),
HxTimedEvent::cc(100, 0, 10, 0.35),
HxTimedEvent::cc(120, 0, 10, 0.15),
HxTimedEvent::cc(190, 0, 10, 0.05),
HxTimedEvent::cc(200, 0, 12, 1.15),
],
);
let changes = collect_signal_changes(&ch1[..], 0);
assert_eq!(changes, &[(5, 55), (100, 35), (120, 15), (190, 5)]);
let changes = collect_signal_changes(&ch2[..], 0);
assert_eq!(changes, &[(3, 155), (200, 115)]);
}
#[test]
fn check_node_midicc_test_slew() {
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("midicc", "sig1")
.set_atom("cc1", SAtom::setting(10))
.set_denorm("slew", 4.0)
.node_inp("out", "ch1")
.place(&mut matrix, 0, 0)
.unwrap();
matrix.sync().unwrap();
// Test run for 5ms with 3 Note On events at sample positions
// 5, 10 and 130 in this block of samples:
let (ch1, ch2) = node_exec.test_run(
0.005,
false,
&[
HxTimedEvent::cc(3, 0, 12, 1.55),
HxTimedEvent::cc(5, 0, 10, 0.55),
HxTimedEvent::cc(100, 0, 10, 0.35),
HxTimedEvent::cc(120, 0, 10, 0.15),
HxTimedEvent::cc(190, 0, 10, 0.05),
HxTimedEvent::cc(200, 0, 12, 1.15),
],
);
let changes: Vec<(usize, i32)> = collect_signal_changes_flt(&ch1[..], 0.0)
.iter()
.step_by(20)
.map(|(a, b)| (*a, (b * 1000.0).round() as i32))
.collect();
assert_eq!(
changes,
&[
(5, 6),
(25, 119),
(45, 232),
(65, 346),
(85, 459),
(105, 505),
(125, 391),
(145, 278),
(165, 164),
(206, 54)
]
);
}
#[test]
fn check_node_midicc_test_slew2() {
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("midicc", "sig1")
.set_atom("cc1", SAtom::setting(10))
.set_denorm("slew", 2.0)
.node_inp("out", "ch1")
.place(&mut matrix, 0, 0)
.unwrap();
matrix.sync().unwrap();
// Test run for 5ms with 3 Note On events at sample positions
// 5, 10 and 130 in this block of samples:
let (ch1, ch2) = node_exec.test_run(
0.005,
false,
&[
HxTimedEvent::cc(3, 0, 12, 1.55),
HxTimedEvent::cc(5, 0, 10, 0.55),
HxTimedEvent::cc(100, 0, 10, 0.35),
HxTimedEvent::cc(120, 0, 10, 0.15),
HxTimedEvent::cc(190, 0, 10, 0.05),
HxTimedEvent::cc(200, 0, 12, 1.15),
],
);
let changes: Vec<(usize, i32)> = collect_signal_changes_flt(&ch1[..], 0.0)
.iter()
.step_by(20)
.map(|(a, b)| (*a, (b * 1000.0).round() as i32))
.collect();
assert_eq!(changes, &[(5, 11), (25, 238), (45, 465), (111, 414), (133, 191),]);
}