package com.sherpaonnxofflinestt import org.junit.Test import org.junit.Assert.* /** * Unit tests for STTConstants configuration values */ class STTConstantsTest { @Test fun `audio processing constants have valid values`() { assertEquals(16000, STTConstants.DEFAULT_SAMPLE_RATE) assertEquals(160, STTConstants.VAD_HOP_SIZE) assertEquals(5 * 16000, STTConstants.MAX_DENOISER_CHUNK_SAMPLES) assertEquals(80, STTConstants.AUDIO_CHUNK_SIZE_MS) } @Test fun `VAD threshold constants are within valid range`() { assertTrue(STTConstants.DEFAULT_VAD_THRESHOLD in 0f..1f) assertTrue(STTConstants.VAD_THRESHOLD_MIN in 0f..1f) assertTrue(STTConstants.VAD_THRESHOLD_MAX in 0f..1f) assertTrue(STTConstants.VAD_THRESHOLD_MIN < STTConstants.VAD_THRESHOLD_MAX) } @Test fun `VAD timing constants are positive`() { assertTrue(STTConstants.DEFAULT_MIN_SPEECH_MS > 0) assertTrue(STTConstants.DEFAULT_MIN_SILENCE_MS > 0) assertTrue(STTConstants.DEFAULT_MAX_SPEECH_MS > 0) assertTrue(STTConstants.DEFAULT_SPEECH_PADDING_MS >= 0) } @Test fun `diarization constants have valid ranges`() { assertTrue(STTConstants.DEFAULT_SPEAKER_THRESHOLD in 0f..1f) assertTrue(STTConstants.DEFAULT_EMBEDDING_THRESHOLD in 0f..1f) assertTrue(STTConstants.DEFAULT_MAX_SPEAKERS > 0) assertTrue(STTConstants.DEFAULT_EMBEDDING_AVERAGE_WEIGHT in 0f..1f) } @Test fun `diarization window constants are properly ordered`() { assertTrue(STTConstants.DIARIZATION_WINDOW_SIZE_MS > 0) assertTrue(STTConstants.DIARIZATION_WINDOW_STEP_MS > 0) // Step should be <= size for proper overlap assertTrue(STTConstants.DIARIZATION_WINDOW_STEP_MS <= STTConstants.DIARIZATION_WINDOW_SIZE_MS) } @Test fun `streaming state constants are valid`() { assertTrue(STTConstants.DEFAULT_CONFIRMATION_THRESHOLD in 0f..1f) assertTrue(STTConstants.DEFAULT_MIN_CONTEXT_MS > 0) } @Test fun `embedding validation constants are valid`() { assertTrue(STTConstants.MIN_EMBEDDING_NORM > 0) assertTrue(STTConstants.EMBEDDING_QUALITY_FACTOR > 0) } @Test fun `pyannote defaults are valid`() { assertTrue(STTConstants.DEFAULT_CLUSTERING_THRESHOLD in 0f..1f) assertTrue(STTConstants.DEFAULT_MIN_DURATION_ON > 0) assertTrue(STTConstants.DEFAULT_MIN_DURATION_OFF > 0) } @Test fun `model inference constants are valid`() { assertTrue(STTConstants.DEFAULT_STT_NUM_THREADS > 0) assertTrue(STTConstants.DEFAULT_AUXILIARY_NUM_THREADS > 0) assertNotNull(STTConstants.DEFAULT_PROVIDER) assertTrue(STTConstants.DEFAULT_PROVIDER.isNotEmpty()) } @Test fun `speaker threshold is more lenient than embedding threshold`() { // Speaker matching should use a lower threshold than profile updates assertTrue(STTConstants.DEFAULT_SPEAKER_THRESHOLD < STTConstants.DEFAULT_EMBEDDING_THRESHOLD) } @Test fun `min speech for new speaker is greater than min speech duration`() { // New speaker creation requires more accumulated speech assertTrue(STTConstants.DEFAULT_MIN_SPEECH_FOR_NEW_SPEAKER >= STTConstants.DEFAULT_MIN_SPEECH_DURATION_MS) } }