Auto commit Sun Mar 22 12:01:01 AM CDT 2026
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package com.mindmachine.mvp
|
||||
|
||||
import com.mindmachine.mvp.session.FlashColor
|
||||
import com.mindmachine.mvp.session.SplitFlashSequencer
|
||||
import com.mindmachine.mvp.session.computeSplitFlashFrame
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Test
|
||||
@@ -39,4 +40,37 @@ class VisualSignalTest {
|
||||
val validAt2000ms = computeSplitFlashFrame(frameTimeNanos = 2_100_000_000L, flashOnMs = 2000, flashOffMs = 2000)
|
||||
assertEquals(validAt2000ms, tooSlow)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun sequencer_keeps_blank_duration_constant_when_flash_duration_changes_mid_blank() {
|
||||
val sequencer = SplitFlashSequencer(startTimeNanos = 0L, flashOnMs = 100, flashOffMs = 1000)
|
||||
|
||||
assertEquals(FlashColor.BLACK, sequencer.frameAt(100_000_000L).left)
|
||||
|
||||
sequencer.updateIntervals(flashOnMs = 200, flashOffMs = 1000)
|
||||
|
||||
// Still blank before the configured 1000ms blank phase is complete.
|
||||
assertEquals(FlashColor.BLACK, sequencer.frameAt(600_000_000L).left)
|
||||
assertEquals(FlashColor.BLACK, sequencer.frameAt(1_099_000_000L).left)
|
||||
|
||||
// At 1100ms total, blank ends and next on-phase starts.
|
||||
assertEquals(FlashColor.GREEN, sequencer.frameAt(1_100_000_000L).left)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun sequencer_applies_new_blank_interval_on_next_blank_boundary() {
|
||||
val sequencer = SplitFlashSequencer(startTimeNanos = 0L, flashOnMs = 100, flashOffMs = 100)
|
||||
|
||||
// Enter second on phase.
|
||||
assertEquals(FlashColor.GREEN, sequencer.frameAt(200_000_000L).left)
|
||||
|
||||
// Change blank interval during on phase; current on should finish uninterrupted.
|
||||
sequencer.updateIntervals(flashOnMs = 100, flashOffMs = 1000)
|
||||
assertEquals(FlashColor.GREEN, sequencer.frameAt(250_000_000L).left)
|
||||
|
||||
// Next phase is blank and should use new 1000ms off interval.
|
||||
assertEquals(FlashColor.BLACK, sequencer.frameAt(300_000_000L).left)
|
||||
assertEquals(FlashColor.BLACK, sequencer.frameAt(1_299_000_000L).left)
|
||||
assertEquals(FlashColor.RED, sequencer.frameAt(1_300_000_000L).left)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user