Files
led-controller/tests/test_sequence_beat_phase_sync.py

44 lines
1.3 KiB
Python

"""Sequence beat phase alignment (sync to musical downbeat)."""
import os
import sys
PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
SRC_PATH = os.path.join(PROJECT_ROOT, "src")
if SRC_PATH not in sys.path:
sys.path.insert(0, SRC_PATH)
from util.sequence_playback import apply_beat_phase_sync # noqa: E402
def _ctx(lane_states):
return {"lane_states": lane_states, "sequence_loop_beat": 5}
def test_apply_beat_phase_sync_step_resets_beat_count_only():
ctx = _ctx(
[
{"stepIdx": 2, "beatCount": 3, "done": False},
{"stepIdx": 1, "beatCount": 1, "done": True},
]
)
ok, resend = apply_beat_phase_sync(ctx, "step")
assert ok is True
assert resend is False
assert ctx["lane_states"][0]["stepIdx"] == 2
assert ctx["lane_states"][0]["beatCount"] == 0
assert ctx["lane_states"][1]["beatCount"] == 1
assert ctx["sequence_loop_beat"] == 5
def test_apply_beat_phase_sync_pass_restarts_pass():
ctx = _ctx([{"stepIdx": 2, "beatCount": 3, "done": False}])
ok, resend = apply_beat_phase_sync(ctx, "pass")
assert ok is True
assert resend is True
st = ctx["lane_states"][0]
assert st["stepIdx"] == 0
assert st["beatCount"] == 0
assert st["done"] is False
assert ctx["sequence_loop_beat"] == 0