import numpy as np from ..src.core.waveform_processor import WaveformProcessor from ..src.hardware.constraints import HardwareConstraints def test_process_rf_numba_scaling(): # Тестируем масштабирование RF-сигнала rf = np.array([0.0, 0.5, -0.5, 1.0, -1.0], dtype=np.float32) max_val = 127 result = WaveformProcessor.process_rf_numba(rf, max_val) # Ожидаем int8 значения assert result.dtype == np.int8 expected = np.array([0, 64, -64, 127, -128], dtype=np.int8) # Проверяем равенство с ожидаемым результатом (с учетом округления) assert np.array_equal(result, expected) def test_process_gradient_numba_scaling(): # Тестируем масштабирование градиентного сигнала grad = np.array([-1.0, -0.5, 0.0, 0.5, 1.0], dtype=np.float32) max_val = 32767 # максимальное значение для int16 result = WaveformProcessor.process_gradient_numba(grad, max_val) assert result.dtype == np.int16 expected = np.array([-32767, -16384, 0, 16384, 32767], dtype=np.int16) assert np.array_equal(result, expected) def test_preprocess_adc_contiguity(): hw = HardwareConstraints() wp = WaveformProcessor(hw) # Создаем не смежный массив (шаг 2) arr = np.array([1.0, 2.5, 3.0], dtype=np.float64) arr_slice = arr[::2] # это представление: [1.0, 3.0], не смежное в памяти processed = wp.preprocess_adc(arr_slice) # Проверяем, что результат смежен в памяти и имеет dtype float32 assert processed.dtype == np.float32 assert processed.flags['C_CONTIGUOUS'] is True # Проверяем, что значения сохранились assert np.allclose(processed, arr_slice.astype(np.float32))