polyvoice 0.17.0

Speaker diarization for Rust — who spoke when. ONNX path optional: default features are empty (ort-free BYO-embedder core); enable onnx for Silero VAD, WeSpeaker embeddings, and Pyannote segmentation.
Documentation
use super::*;

#[test]
fn no_overlap_regions_pass_through() {
    let audio = vec![1.0_f32; 16_000];
    let masked = apply_overlap_mask(&audio, &[], 16_000);
    assert_eq!(masked, audio);
}

#[test]
fn single_overlap_region_is_zeroed() {
    let audio = vec![1.0_f32; 16_000];
    let masked = apply_overlap_mask(&audio, &[(0.5, 0.7)], 16_000);
    for (i, &v) in masked.iter().enumerate() {
        if (8000..11200).contains(&i) {
            assert_eq!(v, 0.0, "sample {i} should be zeroed");
        } else {
            assert_eq!(v, 1.0, "sample {i} should pass through");
        }
    }
}

#[test]
fn empty_input_returns_empty() {
    let masked = apply_overlap_mask(&[], &[(0.0, 1.0)], 16_000);
    assert!(masked.is_empty());
}

#[test]
fn out_of_bounds_overlap_is_clamped() {
    let audio = vec![1.0_f32; 100];
    let masked = apply_overlap_mask(&audio, &[(0.5, 1.0)], 16_000);
    assert_eq!(masked, audio, "out-of-bounds overlap is a no-op");
}

#[test]
fn negative_overlap_start_is_clamped_to_zero() {
    let audio = vec![1.0_f32; 16_000];
    let masked = apply_overlap_mask(&audio, &[(-1.0, 0.5)], 16_000);
    for &v in masked.iter().take(8000) {
        assert_eq!(v, 0.0);
    }
    for &v in masked.iter().skip(8000) {
        assert_eq!(v, 1.0);
    }
}

#[test]
fn multiple_overlap_regions_all_zeroed() {
    let audio = vec![1.0_f32; 16_000];
    let masked = apply_overlap_mask(&audio, &[(0.1, 0.2), (0.5, 0.6), (0.9, 1.0)], 16_000);
    let zero_ranges = [(1600..3200), (8000..9600), (14_400..16_000)];
    for (i, &v) in masked.iter().enumerate() {
        let in_zero = zero_ranges.iter().any(|r| r.contains(&i));
        if in_zero {
            assert_eq!(v, 0.0, "sample {i} should be zeroed");
        } else {
            assert_eq!(v, 1.0, "sample {i} should pass through");
        }
    }
}

#[test]
fn invalid_overlap_with_end_before_start_is_no_op() {
    let audio = vec![1.0_f32; 16_000];
    let masked = apply_overlap_mask(&audio, &[(0.7, 0.5)], 16_000);
    assert_eq!(masked, audio, "end<start is silently skipped");
}

#[test]
fn non_finite_overlap_bounds_are_skipped() {
    let audio = vec![1.0_f32; 16_000];
    let masked = apply_overlap_mask(
        &audio,
        &[(f32::NAN, 0.5), (0.1, f32::INFINITY), (0.2, f32::NAN)],
        16_000,
    );
    assert_eq!(masked, audio, "NaN/infinite bounds are silently skipped");
}

#[test]
fn zero_length_overlap_is_no_op() {
    let audio = vec![1.0_f32; 16_000];
    let masked = apply_overlap_mask(&audio, &[(0.5, 0.5)], 16_000);
    assert_eq!(masked, audio, "end==start is silently skipped");
}

#[test]
fn overlap_extending_past_end_is_clamped_to_len() {
    let audio = vec![1.0_f32; 100];
    let masked = apply_overlap_mask(&audio, &[(0.0, 10.0)], 16_000);
    assert!(
        masked.iter().all(|&v| v == 0.0),
        "region past the end zeroes through the final sample"
    );
    assert_eq!(masked.len(), audio.len());
}

#[test]
fn overlap_starting_past_end_is_no_op() {
    let audio = vec![1.0_f32; 100];
    let masked = apply_overlap_mask(&audio, &[(5.0, 6.0)], 16_000);
    assert_eq!(masked, audio, "region fully past the end is a no-op");
}