2026-03-10 23:14:33 -05:00
|
|
|
package com.mindmachine.mvp
|
|
|
|
|
|
2026-03-10 23:24:49 -05:00
|
|
|
import com.mindmachine.mvp.session.FlashColor
|
|
|
|
|
import com.mindmachine.mvp.session.computeSplitFlashFrame
|
2026-03-10 23:14:33 -05:00
|
|
|
import org.junit.Assert.assertEquals
|
|
|
|
|
import org.junit.Test
|
|
|
|
|
|
|
|
|
|
class VisualSignalTest {
|
|
|
|
|
|
|
|
|
|
@Test
|
2026-03-10 23:24:49 -05:00
|
|
|
fun splitFlashPattern_cycles_redGreen_black_greenRed_black() {
|
|
|
|
|
val intervalMs = 100
|
2026-03-10 23:14:33 -05:00
|
|
|
|
2026-03-10 23:24:49 -05:00
|
|
|
val phase0 = computeSplitFlashFrame(frameTimeNanos = 0L, flashIntervalMs = intervalMs)
|
|
|
|
|
val phase1 = computeSplitFlashFrame(frameTimeNanos = 100_000_000L, flashIntervalMs = intervalMs)
|
|
|
|
|
val phase2 = computeSplitFlashFrame(frameTimeNanos = 200_000_000L, flashIntervalMs = intervalMs)
|
|
|
|
|
val phase3 = computeSplitFlashFrame(frameTimeNanos = 300_000_000L, flashIntervalMs = intervalMs)
|
2026-03-10 23:14:33 -05:00
|
|
|
|
2026-03-10 23:24:49 -05:00
|
|
|
assertEquals(FlashColor.RED, phase0.left)
|
|
|
|
|
assertEquals(FlashColor.GREEN, phase0.right)
|
2026-03-10 23:14:33 -05:00
|
|
|
|
2026-03-10 23:24:49 -05:00
|
|
|
assertEquals(FlashColor.BLACK, phase1.left)
|
|
|
|
|
assertEquals(FlashColor.BLACK, phase1.right)
|
|
|
|
|
|
|
|
|
|
assertEquals(FlashColor.GREEN, phase2.left)
|
|
|
|
|
assertEquals(FlashColor.RED, phase2.right)
|
|
|
|
|
|
|
|
|
|
assertEquals(FlashColor.BLACK, phase3.left)
|
|
|
|
|
assertEquals(FlashColor.BLACK, phase3.right)
|
2026-03-10 23:14:33 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
2026-03-10 23:24:49 -05:00
|
|
|
fun interval_is_clamped_to_valid_range() {
|
|
|
|
|
val tooFast = computeSplitFlashFrame(frameTimeNanos = 49_000_000L, flashIntervalMs = 1)
|
|
|
|
|
val validAt50ms = computeSplitFlashFrame(frameTimeNanos = 49_000_000L, flashIntervalMs = 50)
|
|
|
|
|
assertEquals(validAt50ms, tooFast)
|
2026-03-10 23:14:33 -05:00
|
|
|
|
2026-03-10 23:24:49 -05:00
|
|
|
val tooSlow = computeSplitFlashFrame(frameTimeNanos = 2_100_000_000L, flashIntervalMs = 5000)
|
|
|
|
|
val validAt2000ms = computeSplitFlashFrame(frameTimeNanos = 2_100_000_000L, flashIntervalMs = 2000)
|
|
|
|
|
assertEquals(validAt2000ms, tooSlow)
|
2026-03-10 23:14:33 -05:00
|
|
|
}
|
|
|
|
|
}
|