test(US-03): add failing tests for 880 Hz beep generation

This commit is contained in:
Jeena 2026-03-09 07:46:08 +00:00
parent a5b3f46eae
commit 5897d2b77b

View file

@ -0,0 +1,50 @@
package net.jeena.pacer
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Test
import kotlin.math.abs
class BeepGeneratorTest {
@Test
fun `generateBeep returns correct number of samples`() {
val durationMs = 50
val samples = BeepGenerator.generateBeep(durationMs)
val expected = BeepGenerator.SAMPLE_RATE * durationMs / 1000
assertEquals(expected, samples.size)
}
@Test
fun `generateBeep samples are within Short range`() {
val samples = BeepGenerator.generateBeep(50)
assertTrue(samples.all { it in Short.MIN_VALUE..Short.MAX_VALUE })
}
@Test
fun `generateBeep produces non-silent output`() {
val samples = BeepGenerator.generateBeep(50)
val maxAmplitude = samples.maxOf { abs(it.toInt()) }
assertTrue("Expected non-silent beep, max amplitude was $maxAmplitude", maxAmplitude > 1000)
}
@Test
fun `generateBeep produces approximately 880 Hz frequency`() {
val durationMs = 100
val samples = BeepGenerator.generateBeep(durationMs)
// Count zero crossings (positive→negative transitions)
var crossings = 0
for (i in 1 until samples.size) {
if (samples[i - 1] > 0 && samples[i] <= 0) crossings++
}
// At 880 Hz over 100 ms we expect ~88 complete cycles = ~88 crossings
val expectedCrossings = BeepGenerator.FREQUENCY * durationMs / 1000
val tolerance = expectedCrossings * 0.05 // 5% tolerance
assertTrue(
"Expected ~$expectedCrossings zero crossings, got $crossings",
abs(crossings - expectedCrossings) < tolerance
)
}
}