use crate::lighting::effects::*;
use crate::lighting::engine::tests::common::create_test_fixture;
use crate::lighting::engine::EffectEngine;
use std::time::Duration;
#[test]
fn test_pulse_at_peaks_and_troughs() {
let mut engine = EffectEngine::new();
let fixture = create_test_fixture("test_fixture", 1, 1);
engine.register_fixture(fixture);
let effect = EffectInstance::new(
"test_effect".to_string(),
EffectType::Pulse {
base_level: 0.0,
pulse_amplitude: 1.0,
frequency: TempoAwareFrequency::Fixed(1.0),
duration: Duration::from_secs(5),
},
vec!["test_fixture".to_string()],
None,
None,
None,
);
engine.start_effect(effect).unwrap();
let commands = engine.update(Duration::from_millis(0), None).unwrap();
let dimmer_cmd = commands.iter().find(|cmd| cmd.channel == 1).unwrap();
assert!(
(120..=135).contains(&dimmer_cmd.value),
"At t=0ms pulse should be ~127 (mid), got {}",
dimmer_cmd.value
);
let commands = engine.update(Duration::from_millis(250), None).unwrap();
let dimmer_cmd = commands.iter().find(|cmd| cmd.channel == 1).unwrap();
assert!(
dimmer_cmd.value >= 250,
"At t=250ms pulse should be at peak (~255), got {}",
dimmer_cmd.value
);
let commands = engine.update(Duration::from_millis(500), None).unwrap();
let dimmer_cmd = commands.iter().find(|cmd| cmd.channel == 1).unwrap();
assert!(
dimmer_cmd.value <= 5,
"At t=750ms pulse should be at trough (~0), got {}",
dimmer_cmd.value
);
let commands = engine.update(Duration::from_millis(250), None).unwrap();
let dimmer_cmd = commands.iter().find(|cmd| cmd.channel == 1).unwrap();
assert!(
(120..=135).contains(&dimmer_cmd.value),
"At t=1000ms pulse should be back to ~127 (mid), got {}",
dimmer_cmd.value
);
}
#[test]
fn test_pulse_effect() {
let mut engine = EffectEngine::new();
let fixture = create_test_fixture("test_fixture", 1, 1);
engine.register_fixture(fixture);
let effect = EffectInstance::new(
"test_effect".to_string(),
EffectType::Pulse {
base_level: 0.5,
pulse_amplitude: 0.5,
frequency: TempoAwareFrequency::Fixed(1.0), duration: Duration::from_secs(5),
},
vec!["test_fixture".to_string()],
None,
None,
None,
);
engine.start_effect(effect).unwrap();
let commands = engine.update(Duration::from_millis(16), None).unwrap();
assert_eq!(commands.len(), 1);
let _dimmer_cmd = commands.iter().find(|cmd| cmd.channel == 1).unwrap();
}