"""Shared test fixtures for gr-apollo.""" import numpy as np import pytest from apollo.constants import ( PCM_HIGH_BIT_RATE, PCM_HIGH_WORDS_PER_FRAME, PCM_LOW_BIT_RATE, PCM_LOW_WORDS_PER_FRAME, SAMPLE_RATE_BASEBAND, ) from apollo.usb_signal_gen import generate_pcm_frame, generate_usb_baseband @pytest.fixture def sample_rate(): return SAMPLE_RATE_BASEBAND @pytest.fixture def high_rate_params(): return { "bit_rate": PCM_HIGH_BIT_RATE, "words_per_frame": PCM_HIGH_WORDS_PER_FRAME, } @pytest.fixture def low_rate_params(): return { "bit_rate": PCM_LOW_BIT_RATE, "words_per_frame": PCM_LOW_WORDS_PER_FRAME, } @pytest.fixture def known_payload(): """A known 124-byte payload (words 5-128) for frame verification.""" np.random.seed(42) return bytes(np.random.randint(0, 256, size=124, dtype=np.uint8)) @pytest.fixture def single_frame_bits(known_payload): """A single high-rate frame with known payload, as bit list.""" return generate_pcm_frame(frame_id=1, odd=True, data=known_payload) @pytest.fixture def clean_baseband(known_payload): """Clean (no noise) single-frame baseband signal with known payload.""" signal, frame_bits = generate_usb_baseband( frames=1, frame_data=[known_payload], snr_db=None, ) return signal, frame_bits[0] @pytest.fixture def noisy_baseband(known_payload): """Noisy (20 dB SNR) single-frame baseband signal.""" signal, frame_bits = generate_usb_baseband( frames=1, frame_data=[known_payload], snr_db=20.0, ) return signal, frame_bits[0] @pytest.fixture def multi_frame_baseband(): """5-frame baseband signal for frame sync testing.""" np.random.seed(123) signal, frame_bits = generate_usb_baseband(frames=5, snr_db=30.0) return signal, frame_bits