Files
bass-foundry/plugins/rivet/app/tests/roles.rs
T
nvrl 15853e61ac
Check and Windows preview / check (patina) (push) Successful in 2m20s
Check and Windows preview / check (rivet) (push) Successful in 1m38s
Check and Windows preview / previews (push) Successful in 1m6s
Check and Windows preview / windows (push) Successful in 1m50s
Independent plugin release / publish (push) Successful in 8s
Independent plugin release / plan (push) Successful in 7s
Independent plugin release / build (push) Successful in 2m21s
restructure
2026-11-05 23:58:00 +01:00

118 lines
3.2 KiB
Rust

use rivet_app::{AudioEngine, Shared};
use rivet_core::*;
fn fixture() -> (Shared, AudioEngine, Phrase) {
let mut settings = PerformanceSettings {
mode: RoleMode::Alternating,
..Default::default()
};
for (i, v) in settings.voices.iter_mut().enumerate() {
v.controller.enabled = true;
v.controller.cc = 20 + i as u8;
v.controller.rest = 5 + i as u8;
}
let shared = Shared::default();
shared
.replace(Session {
performance: settings,
audition: Audition::Midi,
tempo: 120.,
..Default::default()
})
.unwrap();
let mut audio = AudioEngine::default();
audio.player.set_sample_rate(8000.).unwrap();
let phrase = Phrase {
length: PPQ,
notes: vec![
Note {
start: 0,
duration: PPQ / 2,
pitch: 60,
velocity: 90,
..Default::default()
},
Note {
start: PPQ / 2,
duration: PPQ / 2,
pitch: 67,
velocity: 80,
..Default::default()
},
],
};
(shared, audio, phrase)
}
#[test]
fn stop_and_profile_replacement_release_old_mappings() {
let (shared, mut audio, phrase) = fixture();
shared.preview(&phrase).unwrap();
audio.begin_block(&shared);
let first = audio.frame(120., true);
assert!(first
.events
.events
.iter()
.flatten()
.any(|e| e.kind == MessageKind::On && e.channel == 0));
for _ in 0..2100 {
audio.frame(120., true);
}
let (revision, mut state) = shared.snapshot();
state.performance.voices[0].controller.cc = 30;
shared.edit(revision, state).unwrap();
audio.begin_block(&shared);
let released = audio.frame(120., true);
for (channel, key, value) in [(0, 20, 5), (1, 21, 6)] {
assert!(released
.events
.events
.iter()
.flatten()
.any(|e| e.kind == MessageKind::Control
&& e.channel == channel
&& e.key == key
&& e.value == value));
}
assert!(released
.events
.events
.iter()
.flatten()
.any(|e| e.kind == MessageKind::Off && e.channel == 1 && e.key == 67));
assert!(!released
.events
.events
.iter()
.flatten()
.any(|e| e.kind == MessageKind::On));
}
#[test]
fn muting_midi_resets_both_controllers_and_reenabling_restores_current_state() {
let (shared, mut audio, phrase) = fixture();
shared.preview(&phrase).unwrap();
audio.begin_block(&shared);
audio.frame(120., true);
let off = audio.frame(120., false);
assert_eq!(
off.events
.events
.iter()
.flatten()
.filter(|e| e.kind == MessageKind::Control)
.count(),
2
);
assert_eq!(off.off, Some(60));
let on = audio.frame(120., true);
assert_eq!(on.on, Some((60, 90)));
assert_eq!(
on.events
.events
.iter()
.flatten()
.filter(|e| e.kind == MessageKind::Control)
.count(),
2
);
}