| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- """
- Tests for PostRequestGenerator — the single canonical POST-manifest builder.
- Regression guard for the "points < 1" bug: a divergent GUI copy of this logic
- put raw ADC-window durations (seconds, e.g. 0.002) into ``iadc.points`` instead
- of sample counts ``int(window_s * srate)``, so int(0.002) collapsed to 0.
- """
- from __future__ import annotations
- from seq_interp.src.core.synchronizer import Synchronizer
- from seq_interp.src.hardware.constraints import HardwareConstraints
- from seq_interp.src.interfaces.post_request_generator import PostRequestGenerator
- from seq_interp.src.interfaces.xml_generator import XMLGenerator
- def _adc_windows(make_seq, specs, tmp_path):
- hw = HardwareConstraints()
- sync_data = Synchronizer(hw).process(make_seq(specs))
- adc_vals, _ = XMLGenerator().generate(sync_data, str(tmp_path / "s.xml"), hw)
- return adc_vals
- def test_points_are_sample_counts_not_seconds(make_seq, tmp_path):
- """points must be int(window_s * srate), i.e. >= 1 for a real ADC window."""
- adc_vals = _adc_windows(make_seq, [{"adc": True, "dur": 2e-3}], tmp_path)
- srate = 8_000_000
- payload = PostRequestGenerator().build(
- seq_data={}, adc_values=adc_vals, sequence_path="seq.seq",
- output_dir=str(tmp_path), hw_cfg={"iadc": {"srate": srate}},
- rf_raster_time=1e-6,
- )
- points = payload["info"]["iadc"]["points"]
- assert points == [int(2e-3 * srate)] # 16000
- assert all(isinstance(p, int) and p >= 1 for p in points)
- def test_points_track_split_full_window(make_seq, tmp_path):
- """A split long ADC still yields one window -> one (large) sample count."""
- adc_vals = _adc_windows(make_seq, [{"adc": True, "dur": 50e-3}], tmp_path)
- srate = 8_000_000
- payload = PostRequestGenerator().build(
- seq_data={}, adc_values=adc_vals, sequence_path="seq.seq",
- output_dir=str(tmp_path), hw_cfg={"iadc": {"srate": srate}},
- rf_raster_time=1e-6,
- )
- points = payload["info"]["iadc"]["points"]
- assert points == [int(50e-3 * srate)] # 400000
|