speakrs 0.6.0

Fast Rust speaker diarization with pyannote-level accuracy and native CPU/CoreML/CUDA inference
Documentation
use super::CpuSegmentationBackend;
use crate::inference::cpu::workers::test_support;
use crate::test_support::model_fixture_dir;

#[test]
fn required_adapter_useful_lengths_order_and_fresh_clone() {
    let selector = model_fixture_dir().join("segmentation-3.0.onnx");
    let mut backend = CpuSegmentationBackend::load(&selector, 160000).unwrap();
    backend.workers = test_support::with_budget(backend.model.workspace(), 4);
    let mut clone = backend.clone();
    clone.workers = test_support::with_budget(clone.model.workspace(), 1);
    assert!(CpuSegmentationBackend::load(&selector, 0).is_err());
    let a = vec![0.0; 300];
    let b: Vec<f32> = (0..700).map(|i| (i as f32 * 0.3).sin() * 0.1).collect();
    let first = backend.run_window(&a).unwrap();
    let second = backend.run_window(&b).unwrap();
    assert!(first.iter().zip(&second).any(|(a, b)| (a - b).abs() > 0.01));
    assert!(backend.run_batch(&[]).unwrap().is_empty());
    for count in [1, 2, 3, 4, 5, 8, 9] {
        let windows: Vec<&[f32]> = (0..count)
            .map(|index| {
                if index % 2 == 0 {
                    a.as_slice()
                } else {
                    b.as_slice()
                }
            })
            .collect();
        let actual = backend.run_batch(&windows).unwrap();
        assert_eq!(actual.len(), count);
        for (index, output) in actual.iter().enumerate() {
            assert_eq!(output, if index % 2 == 0 { &first } else { &second });
        }
    }
    assert_eq!(test_support::count(&backend.workers), 4);
    assert_eq!(test_support::count(&clone.workers), 1);
    let mut fresh = backend.clone();
    assert_eq!(test_support::count(&fresh.workers), 1);
    assert!(!std::ptr::eq(
        backend.workers.first(),
        fresh.workers.first()
    ));
    assert_eq!(
        fresh.run_batch(&[&a, &b]).unwrap(),
        vec![first.clone(), second.clone()]
    );
    assert_eq!(clone.run_window(&a).unwrap(), first);
    assert_eq!(clone.run_window(&b).unwrap(), second);
}