from __future__ import annotations import numpy as np import unittest from rfg_adc_plotter.state.ring_buffer import RingBuffer class RingBufferTests(unittest.TestCase): def test_ring_buffer_initializes_on_first_push(self): ring = RingBuffer(max_sweeps=4) sweep = np.linspace(-1.0, 1.0, 64, dtype=np.float32) ring.push(sweep, np.linspace(3.3, 14.3, 64)) self.assertIsNotNone(ring.ring) self.assertIsNotNone(ring.ring_fft) self.assertIsNotNone(ring.ring_time) self.assertIsNotNone(ring.distance_axis) self.assertIsNotNone(ring.last_fft_db) self.assertEqual(ring.ring.shape[0], 4) self.assertEqual(ring.ring_fft.shape, (4, ring.fft_bins)) def test_ring_buffer_reallocates_when_sweep_width_grows(self): ring = RingBuffer(max_sweeps=3) ring.push(np.ones((32,), dtype=np.float32), np.linspace(3.3, 14.3, 32)) first_width = ring.width ring.push(np.ones((2048,), dtype=np.float32), np.linspace(3.3, 14.3, 2048)) self.assertGreater(ring.width, first_width) self.assertIsNotNone(ring.ring) self.assertEqual(ring.ring.shape, (3, ring.width)) def test_ring_buffer_tracks_latest_fft_and_display_arrays(self): ring = RingBuffer(max_sweeps=2) ring.push(np.linspace(0.0, 1.0, 64, dtype=np.float32), np.linspace(3.3, 14.3, 64)) ring.push(np.linspace(1.0, 0.0, 64, dtype=np.float32), np.linspace(3.3, 14.3, 64)) raw = ring.get_display_raw() fft = ring.get_display_fft_linear() self.assertEqual(raw.shape[1], 2) self.assertEqual(fft.shape[1], 2) self.assertIsNotNone(ring.last_fft_db) self.assertEqual(ring.last_fft_db.shape, (ring.fft_bins,)) if __name__ == "__main__": unittest.main()