1use super::meta::Complex as ComplexSpace;
3use super::meta::Real as RealSpace;
4use super::{
5 Buffer, BufferBorrow, ComplexNumberSpace, DataDomain, Domain, DspVec, ErrorReason, NumberSpace,
6 ToSlice, ToSliceMut, TypeMetaData, VoidResult,
7};
8use crate::multicore_support::MultiCoreSettings;
9use crate::numbers::*;
10use crate::{array_to_complex, array_to_complex_mut};
11use std::ops::*;
12
13pub trait FloatIndex<Idx>
17where
18 Idx: Sized,
19{
20 type Output: ?Sized;
21 fn data(&self, index: Idx) -> &Self::Output;
25}
26
27pub trait FloatIndexMut<Idx>: FloatIndex<Idx>
31where
32 Idx: Sized,
33{
34 fn data_mut(&mut self, index: Idx) -> &mut Self::Output;
36}
37
38pub trait ComplexIndex<Idx>
44where
45 Idx: Sized,
46{
47 type Output: ?Sized;
48 fn datac(&self, index: Idx) -> &Self::Output;
50}
51
52pub trait ComplexIndexMut<Idx>: ComplexIndex<Idx>
58where
59 Idx: Sized,
60{
61 fn datac_mut(&mut self, index: Idx) -> &mut Self::Output;
63}
64
65pub trait MetaData {
67 fn domain(&self) -> DataDomain;
72
73 fn is_complex(&self) -> bool;
78}
79
80pub trait ResizeOps {
82 fn resize(&mut self, len: usize) -> VoidResult;
86}
87
88pub trait ResizeBufferedOps<S: ToSliceMut<T>, T: RealNumber> {
90 fn resize_b<B>(&mut self, buffer: &mut B, len: usize) -> VoidResult
95 where
96 B: for<'a> Buffer<'a, S, T>;
97}
98
99pub trait Vector<T>:
101 MetaData
102 + ResizeOps
103 + FloatIndex<RangeFull, Output = [T]>
104 + FloatIndex<Range<usize>>
105 + FloatIndex<RangeFrom<usize>, Output = [T]>
106 + FloatIndex<RangeTo<usize>>
107 + FloatIndex<usize>
108where
109 T: RealNumber,
110{
111 fn delta(&self) -> T;
114
115 fn set_delta(&mut self, delta: T);
118
119 fn len(&self) -> usize;
122
123 fn is_empty(&self) -> bool;
125
126 fn points(&self) -> usize;
130
131 fn get_multicore_settings(&self) -> &MultiCoreSettings;
135
136 fn set_multicore_settings(&mut self, settings: MultiCoreSettings);
140
141 fn alloc_len(&self) -> usize;
145}
146
147pub trait GetMetaData<T, N, D>
160where
161 T: RealNumber,
162 N: NumberSpace,
163 D: Domain,
164{
165 fn get_meta_data(&self) -> TypeMetaData<T, N, D>;
168}
169
170impl<S, T, N, D> MetaData for DspVec<S, T, N, D>
171where
172 S: ToSlice<T>,
173 T: RealNumber,
174 N: NumberSpace,
175 D: Domain,
176{
177 fn domain(&self) -> DataDomain {
178 self.domain.domain()
179 }
180
181 fn is_complex(&self) -> bool {
182 self.number_space.is_complex()
183 }
184}
185
186impl<T, N, D> MetaData for TypeMetaData<T, N, D>
187where
188 T: RealNumber,
189 N: NumberSpace,
190 D: Domain,
191{
192 fn domain(&self) -> DataDomain {
193 self.domain.domain()
194 }
195
196 fn is_complex(&self) -> bool {
197 self.number_space.is_complex()
198 }
199}
200
201impl<S, T, N, D> ResizeOps for DspVec<S, T, N, D>
202where
203 S: ToSlice<T>,
204 T: RealNumber,
205 N: NumberSpace,
206 D: Domain,
207{
208 fn resize(&mut self, len: usize) -> VoidResult {
209 if self.is_complex() && len % 2 != 0 {
210 return Err(ErrorReason::InputMustHaveAnEvenLength);
211 }
212
213 if len > self.alloc_len() {
214 self.data.try_resize(len)?;
215 }
216
217 self.valid_len = len;
218
219 Ok(())
220 }
221}
222
223impl<S, T, N, D> ResizeBufferedOps<S, T> for DspVec<S, T, N, D>
224where
225 S: ToSliceMut<T>,
226 T: RealNumber,
227 N: NumberSpace,
228 D: Domain,
229{
230 fn resize_b<B>(&mut self, buffer: &mut B, len: usize) -> VoidResult
231 where
232 B: for<'a> Buffer<'a, S, T>,
233 {
234 if self.is_complex() && len % 2 != 0 {
235 return Err(ErrorReason::InputMustHaveAnEvenLength);
236 }
237 let res = self.resize(len);
238 match res {
239 Ok(_) => Ok(()),
240 Err(_) => {
241 let orig_len = self.len();
242 let mut temp = buffer.borrow(len);
243 temp.to_slice_mut()[0..orig_len].clone_from_slice(self.data(..));
244 temp.trade(&mut self.data);
245 self.valid_len = len;
246 Ok(())
247 }
248 }
249 }
250}
251
252impl<S, T, N, D> Vector<T> for DspVec<S, T, N, D>
253where
254 S: ToSlice<T>,
255 T: RealNumber,
256 N: NumberSpace,
257 D: Domain,
258{
259 fn delta(&self) -> T {
260 self.delta
261 }
262
263 fn set_delta(&mut self, delta: T) {
264 self.delta = delta;
265 }
266
267 fn len(&self) -> usize {
268 self.valid_len
269 }
270
271 fn is_empty(&self) -> bool {
272 self.valid_len == 0
273 }
274
275 fn points(&self) -> usize {
276 self.valid_len / if self.is_complex() { 2 } else { 1 }
277 }
278
279 fn get_multicore_settings(&self) -> &MultiCoreSettings {
280 &self.multicore_settings
281 }
282
283 fn set_multicore_settings(&mut self, settings: MultiCoreSettings) {
284 self.multicore_settings = settings;
285 }
286
287 fn alloc_len(&self) -> usize {
288 self.data.len()
289 }
290}
291
292impl<S, T, N, D> GetMetaData<T, N, D> for DspVec<S, T, N, D>
293where
294 S: ToSlice<T>,
295 T: RealNumber,
296 N: NumberSpace,
297 D: Domain,
298{
299 fn get_meta_data(&self) -> TypeMetaData<T, N, D> {
300 TypeMetaData {
301 number_space: self.number_space.clone(),
302 domain: self.domain.clone(),
303 delta: self.delta,
304 multicore_settings: self.multicore_settings,
305 }
306 }
307}
308
309impl<S, T, N, D> FloatIndex<usize> for DspVec<S, T, N, D>
310where
311 S: ToSlice<T>,
312 T: RealNumber,
313 N: NumberSpace,
314 D: Domain,
315{
316 type Output = T;
317
318 fn data(&self, index: usize) -> &T {
319 let len = self.valid_len;
320 let slice = self.data.to_slice();
321 let slice = &slice[0..len];
322 &slice[index]
323 }
324}
325
326impl<S, T, N, D> FloatIndexMut<usize> for DspVec<S, T, N, D>
327where
328 S: ToSliceMut<T>,
329 T: RealNumber,
330 N: NumberSpace,
331 D: Domain,
332{
333 fn data_mut(&mut self, index: usize) -> &mut T {
334 let len = self.valid_len;
335 let slice = self.data.to_slice_mut();
336 let slice = &mut slice[0..len];
337 &mut slice[index]
338 }
339}
340
341impl<S, T, N, D> FloatIndex<RangeFull> for DspVec<S, T, N, D>
342where
343 S: ToSlice<T>,
344 T: RealNumber,
345 N: NumberSpace,
346 D: Domain,
347{
348 type Output = [T];
349
350 fn data(&self, _index: RangeFull) -> &[T] {
351 let len = self.valid_len;
352 let slice = self.data.to_slice();
353 &slice[0..len]
354 }
355}
356
357impl<S, T, N, D> FloatIndexMut<RangeFull> for DspVec<S, T, N, D>
358where
359 S: ToSliceMut<T>,
360 T: RealNumber,
361 N: NumberSpace,
362 D: Domain,
363{
364 fn data_mut(&mut self, _index: RangeFull) -> &mut [T] {
365 let len = self.valid_len;
366 let slice = self.data.to_slice_mut();
367 &mut slice[0..len]
368 }
369}
370
371impl<S, T, N, D> FloatIndex<RangeFrom<usize>> for DspVec<S, T, N, D>
372where
373 S: ToSlice<T>,
374 T: RealNumber,
375 N: NumberSpace,
376 D: Domain,
377{
378 type Output = [T];
379
380 fn data(&self, index: RangeFrom<usize>) -> &[T] {
381 let len = self.valid_len;
382 let slice = self.data.to_slice();
383 let slice = &slice[0..len];
384 &slice[index]
385 }
386}
387
388impl<S, T, N, D> FloatIndexMut<RangeFrom<usize>> for DspVec<S, T, N, D>
389where
390 S: ToSliceMut<T>,
391 T: RealNumber,
392 N: NumberSpace,
393 D: Domain,
394{
395 fn data_mut(&mut self, index: RangeFrom<usize>) -> &mut [T] {
396 let len = self.valid_len;
397 let slice = self.data.to_slice_mut();
398 let slice = &mut slice[0..len];
399 &mut slice[index]
400 }
401}
402
403impl<S, T, N, D> FloatIndex<RangeTo<usize>> for DspVec<S, T, N, D>
404where
405 S: ToSlice<T>,
406 T: RealNumber,
407 N: NumberSpace,
408 D: Domain,
409{
410 type Output = [T];
411
412 fn data(&self, index: RangeTo<usize>) -> &[T] {
413 let len = self.valid_len;
414 let slice = self.data.to_slice();
415 let slice = &slice[0..len];
416 &slice[index]
417 }
418}
419
420impl<S, T, N, D> FloatIndexMut<RangeTo<usize>> for DspVec<S, T, N, D>
421where
422 S: ToSliceMut<T>,
423 T: RealNumber,
424 N: NumberSpace,
425 D: Domain,
426{
427 fn data_mut(&mut self, index: RangeTo<usize>) -> &mut [T] {
428 let len = self.valid_len;
429 let slice = self.data.to_slice_mut();
430 let slice = &mut slice[0..len];
431 &mut slice[index]
432 }
433}
434
435impl<S, T, N, D> FloatIndex<Range<usize>> for DspVec<S, T, N, D>
436where
437 S: ToSlice<T>,
438 T: RealNumber,
439 N: NumberSpace,
440 D: Domain,
441{
442 type Output = [T];
443
444 fn data(&self, index: Range<usize>) -> &[T] {
445 let len = self.valid_len;
446 let slice = self.data.to_slice();
447 let slice = &slice[0..len];
448 &slice[index]
449 }
450}
451
452impl<S, T, N, D> FloatIndexMut<Range<usize>> for DspVec<S, T, N, D>
453where
454 S: ToSliceMut<T>,
455 T: RealNumber,
456 N: NumberSpace,
457 D: Domain,
458{
459 fn data_mut(&mut self, index: Range<usize>) -> &mut [T] {
460 let len = self.valid_len;
461 let slice = self.data.to_slice_mut();
462 let slice = &mut slice[0..len];
463 &mut slice[index]
464 }
465}
466
467impl<S, T, N, D> ComplexIndex<usize> for DspVec<S, T, N, D>
468where
469 S: ToSlice<T>,
470 T: RealNumber,
471 N: ComplexNumberSpace,
472 D: Domain,
473{
474 type Output = Complex<T>;
475
476 fn datac(&self, index: usize) -> &Complex<T> {
477 let len = self.valid_len;
478 let slice = self.data.to_slice();
479 let slice = array_to_complex(&slice[0..len]);
480 &slice[index]
481 }
482}
483
484impl<S, T, N, D> ComplexIndexMut<usize> for DspVec<S, T, N, D>
485where
486 S: ToSliceMut<T>,
487 T: RealNumber,
488 N: ComplexNumberSpace,
489 D: Domain,
490{
491 fn datac_mut(&mut self, index: usize) -> &mut Complex<T> {
492 let len = self.valid_len;
493 let slice = self.data.to_slice_mut();
494 let slice = array_to_complex_mut(&mut slice[0..len]);
495 &mut slice[index]
496 }
497}
498
499impl<S, T, N, D> ComplexIndex<RangeFull> for DspVec<S, T, N, D>
500where
501 S: ToSlice<T>,
502 T: RealNumber,
503 N: ComplexNumberSpace,
504 D: Domain,
505{
506 type Output = [Complex<T>];
507
508 fn datac(&self, _index: RangeFull) -> &[Complex<T>] {
509 let len = self.valid_len;
510 let slice = self.data.to_slice();
511 array_to_complex(&slice[0..len])
512 }
513}
514
515impl<S, T, N, D> ComplexIndexMut<RangeFull> for DspVec<S, T, N, D>
516where
517 S: ToSliceMut<T>,
518 T: RealNumber,
519 N: ComplexNumberSpace,
520 D: Domain,
521{
522 fn datac_mut(&mut self, _index: RangeFull) -> &mut [Complex<T>] {
523 let len = self.valid_len;
524 let slice = self.data.to_slice_mut();
525 array_to_complex_mut(&mut slice[0..len])
526 }
527}
528
529impl<S, T, N, D> ComplexIndex<RangeFrom<usize>> for DspVec<S, T, N, D>
530where
531 S: ToSlice<T>,
532 T: RealNumber,
533 N: ComplexNumberSpace,
534 D: Domain,
535{
536 type Output = [Complex<T>];
537
538 fn datac(&self, index: RangeFrom<usize>) -> &[Complex<T>] {
539 let len = self.valid_len;
540 let slice = self.data.to_slice();
541 let slice = array_to_complex(&slice[0..len]);
542 &slice[index]
543 }
544}
545
546impl<S, T, N, D> ComplexIndexMut<RangeFrom<usize>> for DspVec<S, T, N, D>
547where
548 S: ToSliceMut<T>,
549 T: RealNumber,
550 N: ComplexNumberSpace,
551 D: Domain,
552{
553 fn datac_mut(&mut self, index: RangeFrom<usize>) -> &mut [Complex<T>] {
554 let len = self.valid_len;
555 let slice = self.data.to_slice_mut();
556 let slice = array_to_complex_mut(&mut slice[0..len]);
557 &mut slice[index]
558 }
559}
560
561impl<S, T, N, D> ComplexIndex<RangeTo<usize>> for DspVec<S, T, N, D>
562where
563 S: ToSlice<T>,
564 T: RealNumber,
565 N: ComplexNumberSpace,
566 D: Domain,
567{
568 type Output = [Complex<T>];
569
570 fn datac(&self, index: RangeTo<usize>) -> &[Complex<T>] {
571 let len = self.valid_len;
572 let slice = self.data.to_slice();
573 let slice = array_to_complex(&slice[0..len]);
574 &slice[index]
575 }
576}
577
578impl<S, T, N, D> ComplexIndexMut<RangeTo<usize>> for DspVec<S, T, N, D>
579where
580 S: ToSliceMut<T>,
581 T: RealNumber,
582 N: ComplexNumberSpace,
583 D: Domain,
584{
585 fn datac_mut(&mut self, index: RangeTo<usize>) -> &mut [Complex<T>] {
586 let len = self.valid_len;
587 let slice = self.data.to_slice_mut();
588 let slice = array_to_complex_mut(&mut slice[0..len]);
589 &mut slice[index]
590 }
591}
592
593impl<S, T, N, D> ComplexIndex<Range<usize>> for DspVec<S, T, N, D>
594where
595 S: ToSlice<T>,
596 T: RealNumber,
597 N: ComplexNumberSpace,
598 D: Domain,
599{
600 type Output = [Complex<T>];
601
602 fn datac(&self, index: Range<usize>) -> &[Complex<T>] {
603 let len = self.valid_len;
604 let slice = self.data.to_slice();
605 let slice = array_to_complex(&slice[0..len]);
606 &slice[index]
607 }
608}
609
610impl<S, T, N, D> ComplexIndexMut<Range<usize>> for DspVec<S, T, N, D>
611where
612 S: ToSliceMut<T>,
613 T: RealNumber,
614 N: ComplexNumberSpace,
615 D: Domain,
616{
617 fn datac_mut(&mut self, index: Range<usize>) -> &mut [Complex<T>] {
618 let len = self.valid_len;
619 let slice = self.data.to_slice_mut();
620 let slice = array_to_complex_mut(&mut slice[0..len]);
621 &mut slice[index]
622 }
623}
624
625impl<S, T, D> Index<usize> for DspVec<S, T, RealSpace, D>
626where
627 S: ToSlice<T>,
628 T: RealNumber,
629 D: Domain,
630{
631 type Output = T;
632
633 fn index(&self, index: usize) -> &T {
634 self.data(index)
635 }
636}
637
638impl<S, T, D> IndexMut<usize> for DspVec<S, T, RealSpace, D>
639where
640 S: ToSliceMut<T>,
641 T: RealNumber,
642 D: Domain,
643{
644 fn index_mut(&mut self, index: usize) -> &mut T {
645 self.data_mut(index)
646 }
647}
648
649impl<S, T, D> Index<RangeFull> for DspVec<S, T, RealSpace, D>
650where
651 S: ToSlice<T>,
652 T: RealNumber,
653 D: Domain,
654{
655 type Output = [T];
656
657 fn index(&self, index: RangeFull) -> &[T] {
658 self.data(index)
659 }
660}
661
662impl<S, T, D> IndexMut<RangeFull> for DspVec<S, T, RealSpace, D>
663where
664 S: ToSliceMut<T>,
665 T: RealNumber,
666 D: Domain,
667{
668 fn index_mut(&mut self, index: RangeFull) -> &mut [T] {
669 self.data_mut(index)
670 }
671}
672
673impl<S, T, D> Index<RangeFrom<usize>> for DspVec<S, T, RealSpace, D>
674where
675 S: ToSlice<T>,
676 T: RealNumber,
677 D: Domain,
678{
679 type Output = [T];
680
681 fn index(&self, index: RangeFrom<usize>) -> &[T] {
682 self.data(index)
683 }
684}
685
686impl<S, T, D> IndexMut<RangeFrom<usize>> for DspVec<S, T, RealSpace, D>
687where
688 S: ToSliceMut<T>,
689 T: RealNumber,
690 D: Domain,
691{
692 fn index_mut(&mut self, index: RangeFrom<usize>) -> &mut [T] {
693 self.data_mut(index)
694 }
695}
696
697impl<S, T, D> Index<RangeTo<usize>> for DspVec<S, T, RealSpace, D>
698where
699 S: ToSlice<T>,
700 T: RealNumber,
701 D: Domain,
702{
703 type Output = [T];
704
705 fn index(&self, index: RangeTo<usize>) -> &[T] {
706 self.data(index)
707 }
708}
709
710impl<S, T, D> IndexMut<RangeTo<usize>> for DspVec<S, T, RealSpace, D>
711where
712 S: ToSliceMut<T>,
713 T: RealNumber,
714 D: Domain,
715{
716 fn index_mut(&mut self, index: RangeTo<usize>) -> &mut [T] {
717 self.data_mut(index)
718 }
719}
720
721impl<S, T, D> Index<Range<usize>> for DspVec<S, T, RealSpace, D>
722where
723 S: ToSlice<T>,
724 T: RealNumber,
725 D: Domain,
726{
727 type Output = [T];
728
729 fn index(&self, index: Range<usize>) -> &[T] {
730 self.data(index)
731 }
732}
733
734impl<S, T, D> IndexMut<Range<usize>> for DspVec<S, T, RealSpace, D>
735where
736 S: ToSliceMut<T>,
737 T: RealNumber,
738 D: Domain,
739{
740 fn index_mut(&mut self, index: Range<usize>) -> &mut [T] {
741 self.data_mut(index)
742 }
743}
744
745impl<S, T, D> Index<usize> for DspVec<S, T, ComplexSpace, D>
746where
747 S: ToSlice<T>,
748 T: RealNumber,
749 D: Domain,
750{
751 type Output = Complex<T>;
752
753 fn index(&self, index: usize) -> &Complex<T> {
754 self.datac(index)
755 }
756}
757
758impl<S, T, D> IndexMut<usize> for DspVec<S, T, ComplexSpace, D>
759where
760 S: ToSliceMut<T>,
761 T: RealNumber,
762 D: Domain,
763{
764 fn index_mut(&mut self, index: usize) -> &mut Complex<T> {
765 self.datac_mut(index)
766 }
767}
768
769impl<S, T, D> Index<RangeFull> for DspVec<S, T, ComplexSpace, D>
770where
771 S: ToSlice<T>,
772 T: RealNumber,
773 D: Domain,
774{
775 type Output = [Complex<T>];
776
777 fn index(&self, index: RangeFull) -> &[Complex<T>] {
778 self.datac(index)
779 }
780}
781
782impl<S, T, D> IndexMut<RangeFull> for DspVec<S, T, ComplexSpace, D>
783where
784 S: ToSliceMut<T>,
785 T: RealNumber,
786 D: Domain,
787{
788 fn index_mut(&mut self, index: RangeFull) -> &mut [Complex<T>] {
789 self.datac_mut(index)
790 }
791}
792
793impl<S, T, D> Index<RangeFrom<usize>> for DspVec<S, T, ComplexSpace, D>
794where
795 S: ToSlice<T>,
796 T: RealNumber,
797 D: Domain,
798{
799 type Output = [Complex<T>];
800
801 fn index(&self, index: RangeFrom<usize>) -> &[Complex<T>] {
802 self.datac(index)
803 }
804}
805
806impl<S, T, D> IndexMut<RangeFrom<usize>> for DspVec<S, T, ComplexSpace, D>
807where
808 S: ToSliceMut<T>,
809 T: RealNumber,
810 D: Domain,
811{
812 fn index_mut(&mut self, index: RangeFrom<usize>) -> &mut [Complex<T>] {
813 self.datac_mut(index)
814 }
815}
816
817impl<S, T, D> Index<RangeTo<usize>> for DspVec<S, T, ComplexSpace, D>
818where
819 S: ToSlice<T>,
820 T: RealNumber,
821 D: Domain,
822{
823 type Output = [Complex<T>];
824
825 fn index(&self, index: RangeTo<usize>) -> &[Complex<T>] {
826 self.datac(index)
827 }
828}
829
830impl<S, T, D> IndexMut<RangeTo<usize>> for DspVec<S, T, ComplexSpace, D>
831where
832 S: ToSliceMut<T>,
833 T: RealNumber,
834 D: Domain,
835{
836 fn index_mut(&mut self, index: RangeTo<usize>) -> &mut [Complex<T>] {
837 self.datac_mut(index)
838 }
839}
840
841impl<S, T, D> Index<Range<usize>> for DspVec<S, T, ComplexSpace, D>
842where
843 S: ToSlice<T>,
844 T: RealNumber,
845 D: Domain,
846{
847 type Output = [Complex<T>];
848
849 fn index(&self, index: Range<usize>) -> &[Complex<T>] {
850 self.datac(index)
851 }
852}
853
854impl<S, T, D> IndexMut<Range<usize>> for DspVec<S, T, ComplexSpace, D>
855where
856 S: ToSliceMut<T>,
857 T: RealNumber,
858 D: Domain,
859{
860 fn index_mut(&mut self, index: Range<usize>) -> &mut [Complex<T>] {
861 self.datac_mut(index)
862 }
863}
864
865#[cfg(test)]
866mod tests {
867 use super::super::*;
868
869 #[test]
870 fn len_of_vec() {
871 let vec: Vec<f32> = vec![1.0, 2.0, 3.0];
872 let dsp = vec.to_real_time_vec();
873 assert_eq!(dsp.len(), 3);
874 }
875
876 #[test]
877 fn len_of_slice() {
878 let slice = [1.0, 5.0, 4.0];
879 let dsp = slice.to_real_freq_vec();
880 assert_eq!(dsp.len(), 3);
881 }
882
883 #[test]
884 #[allow(unused_mut)]
885 fn len_of_slice_mut() {
886 let mut slice = [1.0, 5.0, 4.0];
887 let dsp = slice.to_real_freq_vec();
888 assert_eq!(dsp.len(), 3);
889 }
890
891 #[test]
892 #[allow(unused_mut)]
893 fn len_of_invalid_storage() {
894 let mut slice = [1.0, 5.0, 4.0];
895 let dsp = slice.to_complex_freq_vec();
896 assert_eq!(dsp.len(), 0);
897 }
898
899 #[test]
900 fn index_of_vec() {
901 let vec = vec![1.0, 2.0, 3.0];
902 let dsp = vec.to_real_time_vec();
903 assert_eq!(dsp.data(..), [1.0, 2.0, 3.0]);
904 }
905
906 #[test]
907 fn index_of_slice() {
908 let slice = [1.0, 5.0, 4.0];
909 let dsp = slice.to_real_time_vec();
910 assert_eq!(dsp.data(..), [1.0, 5.0, 4.0]);
911 }
912}