mirror of
https://github.com/craigerl/aprsd.git
synced 2026-01-14 01:25:32 -05:00
173 lines
5.0 KiB
Python
173 lines
5.0 KiB
Python
import unittest
|
|
|
|
from aprsd.utils.ring_buffer import RingBuffer
|
|
|
|
|
|
class TestRingBufferAdditional(unittest.TestCase):
|
|
"""Additional unit tests for the RingBuffer class to cover edge cases."""
|
|
|
|
def test_empty_buffer(self):
|
|
"""Test behavior with empty buffer."""
|
|
rb = RingBuffer(5)
|
|
self.assertEqual(len(rb), 0)
|
|
self.assertEqual(rb.get(), [])
|
|
|
|
def test_buffer_with_zero_size(self):
|
|
"""Test buffer with zero size."""
|
|
rb = RingBuffer(0)
|
|
# Should not crash, but behavior might be different
|
|
# In this implementation, it will behave like a normal list
|
|
rb.append(1)
|
|
self.assertEqual(len(rb), 1)
|
|
self.assertEqual(rb.get(), [1])
|
|
|
|
def test_buffer_with_negative_size(self):
|
|
"""Test buffer with negative size."""
|
|
# This might not be a valid use case, but let's test it
|
|
rb = RingBuffer(-1)
|
|
rb.append(1)
|
|
self.assertEqual(len(rb), 1)
|
|
self.assertEqual(rb.get(), [1])
|
|
|
|
def test_append_none_value(self):
|
|
"""Test appending None values."""
|
|
rb = RingBuffer(3)
|
|
rb.append(None)
|
|
rb.append(1)
|
|
rb.append(2)
|
|
|
|
result = rb.get()
|
|
self.assertEqual(len(result), 3)
|
|
self.assertIsNone(result[0])
|
|
self.assertEqual(result[1], 1)
|
|
self.assertEqual(result[2], 2)
|
|
|
|
def test_append_multiple_types(self):
|
|
"""Test appending multiple different types of values."""
|
|
rb = RingBuffer(4)
|
|
rb.append('string')
|
|
rb.append(42)
|
|
rb.append([1, 2, 3])
|
|
rb.append({'key': 'value'})
|
|
|
|
result = rb.get()
|
|
self.assertEqual(len(result), 4)
|
|
self.assertEqual(result[0], 'string')
|
|
self.assertEqual(result[1], 42)
|
|
self.assertEqual(result[2], [1, 2, 3])
|
|
self.assertEqual(result[3], {'key': 'value'})
|
|
|
|
def test_multiple_appends_then_get(self):
|
|
"""Test multiple appends followed by get operations."""
|
|
rb = RingBuffer(5)
|
|
|
|
# Append multiple items
|
|
for i in range(10):
|
|
rb.append(i)
|
|
|
|
# Get should return the last 5 items
|
|
result = rb.get()
|
|
self.assertEqual(len(result), 5)
|
|
self.assertEqual(result, [5, 6, 7, 8, 9])
|
|
|
|
def test_get_returns_copy(self):
|
|
"""Test that get() returns a copy, not a reference."""
|
|
rb = RingBuffer(3)
|
|
rb.append(1)
|
|
rb.append(2)
|
|
rb.append(3)
|
|
|
|
result = rb.get()
|
|
# Modify the returned list
|
|
result.append(4)
|
|
|
|
# Original buffer should not be affected
|
|
original = rb.get()
|
|
self.assertEqual(len(original), 3)
|
|
self.assertNotIn(4, original)
|
|
|
|
def test_buffer_size_one(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.assertEqual(result[0], 2)
|
|
|
|
def test_buffer_size_two(self):
|
|
"""Test buffer with size 2."""
|
|
rb = RingBuffer(2)
|
|
rb.append(1)
|
|
rb.append(2)
|
|
self.assertEqual(len(rb), 2)
|
|
self.assertEqual(rb.get(), [1, 2])
|
|
|
|
rb.append(3)
|
|
self.assertEqual(len(rb), 2)
|
|
result = rb.get()
|
|
self.assertEqual(len(result), 2)
|
|
self.assertEqual(result[0], 2)
|
|
self.assertEqual(result[1], 3)
|
|
|
|
def test_large_buffer_size(self):
|
|
"""Test with a large buffer size."""
|
|
rb = RingBuffer(1000)
|
|
for i in range(1000):
|
|
rb.append(i)
|
|
|
|
result = rb.get()
|
|
self.assertEqual(len(result), 1000)
|
|
self.assertEqual(result[0], 0)
|
|
self.assertEqual(result[-1], 999)
|
|
|
|
def test_buffer_with_many_wraparounds(self):
|
|
"""Test buffer with many wraparounds."""
|
|
rb = RingBuffer(3)
|
|
# Fill and wrap multiple times
|
|
for i in range(100):
|
|
rb.append(i)
|
|
|
|
result = rb.get()
|
|
self.assertEqual(len(result), 3)
|
|
# Should contain the last 3 elements
|
|
self.assertEqual(result[0], 97)
|
|
self.assertEqual(result[1], 98)
|
|
self.assertEqual(result[2], 99)
|
|
|
|
def test_multiple_get_calls(self):
|
|
"""Test multiple get() calls return consistent results."""
|
|
rb = RingBuffer(3)
|
|
rb.append(1)
|
|
rb.append(2)
|
|
rb.append(3)
|
|
|
|
result1 = rb.get()
|
|
result2 = rb.get()
|
|
result3 = rb.get()
|
|
|
|
self.assertEqual(result1, result2)
|
|
self.assertEqual(result2, result3)
|
|
self.assertEqual(result1, [1, 2, 3])
|
|
|
|
def test_get_order_consistency(self):
|
|
"""Test that get() maintains order consistency."""
|
|
rb = RingBuffer(5)
|
|
# Add elements
|
|
elements = [1, 2, 3, 4, 5, 6, 7]
|
|
for elem in elements:
|
|
rb.append(elem)
|
|
|
|
result = rb.get()
|
|
# Should contain the last 5 elements in correct order
|
|
self.assertEqual(len(result), 5)
|
|
self.assertEqual(result, [3, 4, 5, 6, 7])
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|