From 8bed33d44ea9d6d63c69707a9051621003f30c00 Mon Sep 17 00:00:00 2001 From: Bartosz Podrygajlo Date: Thu, 9 Jul 2026 08:38:58 +0200 Subject: [PATCH] test(zmq): add SIMD sample validation Add `TxRxSamplesSIMD` to validate the correctness of the new ZMQ device transmit and receive paths with int16 complex samples. Signed-off-by: Bartosz Podrygajlo --- radio/zmq/tests/test_zmq_radio.cpp | 42 ++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/radio/zmq/tests/test_zmq_radio.cpp b/radio/zmq/tests/test_zmq_radio.cpp index 95d78b17f0..7d0baa2a94 100644 --- a/radio/zmq/tests/test_zmq_radio.cpp +++ b/radio/zmq/tests/test_zmq_radio.cpp @@ -153,6 +153,48 @@ TEST_F(ZMQTest, TxRxSamples) t2.join(); } +TEST_F(ZMQTest, TxRxSamplesSIMD) +{ + const int size = 100; + std::thread t1([this, size]() { + c16_t rx_samples[size]; + openair0_timestamp_t rx_timestamp; + void *samples[1] = {rx_samples}; + ASSERT_EQ(device1.trx_read_func(&device1, &rx_timestamp, samples, size, 1), size); + for (int i = 0; i < size; i++) { + ASSERT_EQ(rx_samples[i].r, 0); + ASSERT_EQ(rx_samples[i].i, 0); + } + c16_t tx_samples[size]; + openair0_timestamp_t tx_timestamp = rx_timestamp + size; + for (int i = 0; i < size; i++) { + tx_samples[i].r = (int16_t)i; + tx_samples[i].i = (int16_t)(i + 1); + } + samples[0] = tx_samples; + ASSERT_EQ(device1.trx_write_func(&device1, tx_timestamp, samples, size, 1, 0), size); + }); + std::thread t2([this, size]() { + c16_t rx_samples[size]; + openair0_timestamp_t rx_timestamp; + void *samples[1] = {rx_samples}; + ASSERT_EQ(device2.trx_read_func(&device2, &rx_timestamp, samples, size, 1), size); + for (int i = 0; i < size; i++) { + ASSERT_EQ(rx_samples[i].r, 0); + ASSERT_EQ(rx_samples[i].i, 0); + } + openair0_timestamp_t rx_timestamp2; + ASSERT_EQ(device2.trx_read_func(&device2, &rx_timestamp2, samples, size, 1), size); + for (int i = 0; i < size; i++) { + ASSERT_EQ(rx_samples[i].r, (int16_t)i); + ASSERT_EQ(rx_samples[i].i, (int16_t)(i + 1)); + } + ASSERT_EQ(rx_timestamp + size, rx_timestamp2); + }); + t1.join(); + t2.join(); +} + TEST_F(ZMQTest, BenchmarkThroughput) { int level = g_log->log_component[HW].level;