| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- import os
- from ..src.core.synchronizer import Synchronizer, TimingEvent
- from ..src.hardware.constraints import HardwareConstraints
- def test_synchronizer_adds_delays():
- hw = HardwareConstraints() # используем значения по умолчанию
- # Два блока: RF (без ADC) и градиент (с ADC)
- blocks = [
- {"type": "RF", "duration": 1e-3, "has_adc": False},
- {"type": "GRAD", "duration": 2e-3, "has_adc": True}
- ]
- seq_data = {"blocks": blocks}
- synch = Synchronizer(hw)
- events = synch.process(seq_data)
- # Проверяем общее количество событий:
- # Ожидается: Start delay, RF delay, RF block, Grad block, TR delay = 5 событий
- assert isinstance(events, list) and all(isinstance(e, TimingEvent) for e in events)
- assert len(events) == 5
- # Проверяем последовательность типов событий
- types = [e.event_type for e in events]
- expected_types = ["DELAY", "DELAY", "RF", "GRAD", "DELAY"]
- assert types == expected_types
- # Проверяем, что первая задержка имеет длительность соответствующую START_DELAY
- start_delay_ticks = int(round(hw.START_DELAY / hw.MIN_BLOCK_DURATION))
- assert events[0].event_type == "DELAY"
- assert events[0].duration == start_delay_ticks
- # Проверяем, что RF_DELAY вставлена перед RF блоком
- rf_delay_ticks = int(round(hw.RF_DELAY / hw.MIN_BLOCK_DURATION))
- assert events[1].event_type == "DELAY" and events[2].event_type == "RF"
- assert events[1].duration == rf_delay_ticks
- # Проверяем, что TR_DELAY вставлена после градиентного блока с ADC
- tr_delay_ticks = int(round(hw.TR_DELAY / hw.MIN_BLOCK_DURATION))
- assert events[-1].event_type == "DELAY"
- assert events[-1].duration == tr_delay_ticks
- def test_synchronizer_timing_order():
- hw = HardwareConstraints()
- blocks = [
- {"type": "GRAD", "duration": 5e-4, "has_adc": True}, # один блок с ADC
- ]
- events = Synchronizer(hw).process({"blocks": blocks})
- # Должно быть: начальная задержка, блок, TR задержка (3 события)
- assert events[0].start == 0 # начало первой задержки в 0
- # Проверяем, что время старта каждого следующего события больше или равно предыдущего конца
- for i in range(1, len(events)):
- prev = events[i-1]
- curr = events[i]
- # start текущего должен равняться start предыдущего + duration предыдущего
- assert curr.start == prev.start + prev.duration
|