mirror of
https://github.com/craigerl/aprsd.git
synced 2026-06-10 18:08:44 -04:00
Added unit tests
This commit is contained in:
@@ -0,0 +1,144 @@
|
||||
import unittest
|
||||
|
||||
from aprsd.utils.ring_buffer import RingBuffer
|
||||
|
||||
|
||||
class TestRingBuffer(unittest.TestCase):
|
||||
"""Unit tests for the RingBuffer class."""
|
||||
|
||||
def test_init(self):
|
||||
"""Test initialization."""
|
||||
rb = RingBuffer(5)
|
||||
self.assertEqual(rb.max, 5)
|
||||
self.assertEqual(len(rb.data), 0)
|
||||
|
||||
def test_append_non_full(self):
|
||||
"""Test append() when buffer is not full."""
|
||||
rb = RingBuffer(3)
|
||||
rb.append(1)
|
||||
rb.append(2)
|
||||
|
||||
self.assertEqual(len(rb), 2)
|
||||
self.assertEqual(rb.get(), [1, 2])
|
||||
|
||||
def test_append_to_full(self):
|
||||
"""Test append() when buffer becomes full."""
|
||||
rb = RingBuffer(3)
|
||||
rb.append(1)
|
||||
rb.append(2)
|
||||
rb.append(3)
|
||||
|
||||
self.assertEqual(len(rb), 3)
|
||||
self.assertEqual(rb.get(), [1, 2, 3])
|
||||
# Should transition to full state
|
||||
self.assertEqual(rb.__class__.__name__, '__Full')
|
||||
|
||||
def test_append_overwrites_when_full(self):
|
||||
"""Test append() overwrites oldest when full."""
|
||||
rb = RingBuffer(3)
|
||||
rb.append(1)
|
||||
rb.append(2)
|
||||
rb.append(3)
|
||||
rb.append(4) # Should overwrite 1
|
||||
|
||||
self.assertEqual(len(rb), 3)
|
||||
result = rb.get()
|
||||
# Should return elements in order from oldest to newest
|
||||
self.assertEqual(len(result), 3)
|
||||
self.assertIn(2, result)
|
||||
self.assertIn(3, result)
|
||||
self.assertIn(4, result)
|
||||
|
||||
def test_get_non_full(self):
|
||||
"""Test get() when buffer is not full."""
|
||||
rb = RingBuffer(5)
|
||||
rb.append(1)
|
||||
rb.append(2)
|
||||
|
||||
result = rb.get()
|
||||
self.assertEqual(result, [1, 2])
|
||||
|
||||
def test_get_empty(self):
|
||||
"""Test get() when buffer is empty."""
|
||||
rb = RingBuffer(5)
|
||||
result = rb.get()
|
||||
self.assertEqual(result, [])
|
||||
|
||||
def test_len_non_full(self):
|
||||
"""Test __len__() when buffer is not full."""
|
||||
rb = RingBuffer(5)
|
||||
rb.append(1)
|
||||
rb.append(2)
|
||||
|
||||
self.assertEqual(len(rb), 2)
|
||||
|
||||
def test_len_full(self):
|
||||
"""Test __len__() when buffer is full."""
|
||||
rb = RingBuffer(3)
|
||||
rb.append(1)
|
||||
rb.append(2)
|
||||
rb.append(3)
|
||||
|
||||
self.assertEqual(len(rb), 3)
|
||||
|
||||
def test_wraparound(self):
|
||||
"""Test that buffer wraps around correctly."""
|
||||
rb = RingBuffer(3)
|
||||
# Fill buffer
|
||||
rb.append(1)
|
||||
rb.append(2)
|
||||
rb.append(3)
|
||||
|
||||
# Add more to test wraparound
|
||||
rb.append(4)
|
||||
rb.append(5)
|
||||
rb.append(6)
|
||||
|
||||
result = rb.get()
|
||||
self.assertEqual(len(result), 3)
|
||||
# Should contain the last 3 elements
|
||||
self.assertIn(4, result)
|
||||
self.assertIn(5, result)
|
||||
self.assertIn(6, result)
|
||||
|
||||
def test_get_order_when_full(self):
|
||||
"""Test get() returns elements in correct order when full."""
|
||||
rb = RingBuffer(3)
|
||||
rb.append('a')
|
||||
rb.append('b')
|
||||
rb.append('c')
|
||||
rb.append('d') # Overwrites 'a'
|
||||
|
||||
result = rb.get()
|
||||
# Should return from current position
|
||||
self.assertEqual(len(result), 3)
|
||||
# Order should be maintained from oldest to newest
|
||||
self.assertIn('b', result)
|
||||
self.assertIn('c', result)
|
||||
self.assertIn('d', result)
|
||||
|
||||
def test_multiple_wraparounds(self):
|
||||
"""Test multiple wraparounds."""
|
||||
rb = RingBuffer(3)
|
||||
for i in range(10):
|
||||
rb.append(i)
|
||||
|
||||
result = rb.get()
|
||||
self.assertEqual(len(result), 3)
|
||||
# Should contain last 3 elements
|
||||
self.assertIn(7, result)
|
||||
self.assertIn(8, result)
|
||||
self.assertIn(9, result)
|
||||
|
||||
def test_single_element_buffer(self):
|
||||
"""Test buffer with size 1."""
|
||||
rb = RingBuffer(1)
|
||||
rb.append(1)
|
||||
self.assertEqual(len(rb), 1)
|
||||
self.assertEqual(rb.get(), [1])
|
||||
|
||||
rb.append(2)
|
||||
self.assertEqual(len(rb), 1)
|
||||
result = rb.get()
|
||||
self.assertEqual(len(result), 1)
|
||||
self.assertIn(2, result)
|
||||
Reference in New Issue
Block a user