package com.mindmachine.mvp import com.mindmachine.mvp.domain.VisualPattern import com.mindmachine.mvp.session.computeVisualAlpha import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue import org.junit.Test class VisualSignalTest { @Test fun flashPatternAlternatesBetweenIntensityAndOff() { val intensity = 70 val hz = 10f val on = computeVisualAlpha( visualPattern = VisualPattern.FLASH, frameTimeNanos = 0L, blinkFrequencyHz = hz, intensityPercent = intensity ) val off = computeVisualAlpha( visualPattern = VisualPattern.FLASH, frameTimeNanos = 75_000_000L, blinkFrequencyHz = hz, intensityPercent = intensity ) assertEquals(0.7f, on, 0.0001f) assertEquals(0f, off, 0.0001f) } @Test fun pulsePatternStaysWithinZeroAndIntensity() { val intensity = 60 val atStart = computeVisualAlpha( visualPattern = VisualPattern.PULSE, frameTimeNanos = 0L, blinkFrequencyHz = 3f, intensityPercent = intensity ) val quarterCycle = computeVisualAlpha( visualPattern = VisualPattern.PULSE, frameTimeNanos = 83_333_333L, blinkFrequencyHz = 3f, intensityPercent = intensity ) assertTrue(atStart in 0f..0.6f) assertTrue(quarterCycle in 0f..0.6f) assertTrue(quarterCycle > atStart) } @Test fun intensityZeroAlwaysReturnsZero() { val alpha = computeVisualAlpha( visualPattern = VisualPattern.FLASH, frameTimeNanos = 123_000_000L, blinkFrequencyHz = 8f, intensityPercent = 0 ) assertEquals(0f, alpha, 0f) } }