| 123456789101112131415161718192021222324252627282930313233343536 |
- 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))
|