40 lines
1.4 KiB
Python
40 lines
1.4 KiB
Python
import unittest
|
|
|
|
from audio_field.probe_optimizer import ActiveProbeOptimizer, ProbePolicy
|
|
from audio_field.runtime_sync import SyncState
|
|
|
|
|
|
class ActiveProbeOptimizerTests(unittest.TestCase):
|
|
def test_schedules_weakest_source_when_masked(self):
|
|
optimizer = ActiveProbeOptimizer(ProbePolicy(trigger_confidence=0.4, min_interval_frames=10))
|
|
|
|
request = optimizer.choose_probe(
|
|
100,
|
|
{
|
|
"good": SyncState(confidence=0.8),
|
|
"weak": SyncState(confidence=0.2),
|
|
},
|
|
masked_window=True,
|
|
)
|
|
|
|
self.assertIsNotNone(request)
|
|
self.assertEqual("weak", request.source_id)
|
|
self.assertGreater(request.urgency, 0.0)
|
|
|
|
def test_respects_probe_spacing(self):
|
|
optimizer = ActiveProbeOptimizer(ProbePolicy(trigger_confidence=0.4, min_interval_frames=10))
|
|
states = {"weak": SyncState(confidence=0.2)}
|
|
|
|
self.assertIsNotNone(optimizer.choose_probe(100, states, masked_window=True))
|
|
self.assertIsNone(optimizer.choose_probe(105, states, masked_window=True))
|
|
|
|
def test_waits_for_masked_window_when_configured(self):
|
|
optimizer = ActiveProbeOptimizer(ProbePolicy(trigger_confidence=0.4, prefer_masked_windows=True))
|
|
|
|
request = optimizer.choose_probe(100, {"weak": SyncState(confidence=0.2)}, masked_window=False)
|
|
|
|
self.assertIsNone(request)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|