Skip to content

Commit e6f0717

Browse files
committed
Add tests for ChannelMergerNode
1 parent 3d12566 commit e6f0717

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed

src/node/channel_merger.rs

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,3 +149,78 @@ impl AudioProcessor for ChannelMergerRenderer {
149149
false
150150
}
151151
}
152+
153+
#[cfg(test)]
154+
mod tests {
155+
use crate::context::{BaseAudioContext, OfflineAudioContext};
156+
use crate::node::{AudioNode, AudioScheduledSourceNode};
157+
158+
use float_eq::assert_float_eq;
159+
160+
#[test]
161+
fn test_merge() {
162+
let sample_rate = 48000.;
163+
let mut context = OfflineAudioContext::new(2, 128, sample_rate);
164+
165+
let merger = context.create_channel_merger(2);
166+
merger.connect(&context.destination());
167+
168+
let mut src1 = context.create_constant_source();
169+
src1.offset().set_value(2.);
170+
src1.connect_at(&merger, 0, 0);
171+
src1.start();
172+
173+
let mut src2 = context.create_constant_source();
174+
src2.offset().set_value(3.);
175+
src2.connect_at(&merger, 0, 1);
176+
src2.start();
177+
178+
let buffer = context.start_rendering_sync();
179+
180+
let left = buffer.get_channel_data(0);
181+
assert_float_eq!(&left[..], &[2.; 128][..], abs_all <= 0.);
182+
183+
let right = buffer.get_channel_data(1);
184+
assert_float_eq!(&right[..], &[3.; 128][..], abs_all <= 0.);
185+
}
186+
187+
#[test]
188+
fn test_merge_disconnect() {
189+
let sample_rate = 48000.;
190+
let length = 4 * 128;
191+
let disconnect_at = length as f64 / sample_rate as f64 / 2.;
192+
let mut context = OfflineAudioContext::new(2, length, sample_rate);
193+
194+
let merger = context.create_channel_merger(2);
195+
merger.connect(&context.destination());
196+
197+
let mut src1 = context.create_constant_source();
198+
src1.offset().set_value(2.);
199+
src1.connect_at(&merger, 0, 0);
200+
src1.start();
201+
202+
let mut src2 = context.create_constant_source();
203+
src2.offset().set_value(3.);
204+
src2.connect_at(&merger, 0, 1);
205+
src2.start();
206+
207+
context.suspend_sync(disconnect_at, move |_| src2.disconnect());
208+
209+
let buffer = context.start_rendering_sync();
210+
211+
let left = buffer.get_channel_data(0);
212+
assert_float_eq!(&left[..], &vec![2.; length][..], abs_all <= 0.);
213+
214+
let right = buffer.get_channel_data(1);
215+
assert_float_eq!(
216+
&right[0..length / 2],
217+
&vec![3.; length / 2][..],
218+
abs_all <= 0.
219+
);
220+
assert_float_eq!(
221+
&right[length / 2..],
222+
&vec![0.; length / 2][..],
223+
abs_all <= 0.
224+
);
225+
}
226+
}

0 commit comments

Comments
 (0)