import unittest from threading import Thread from buf import HighFrequencyBuffer import time class TestHighFrequencyBuffer(unittest.TestCase): def setUp(self): self.buffer = HighFrequencyBuffer() # 基础功能测试 def test_basic_operations(self): # 测试空缓冲区 self.assertEqual(self.buffer.get_all(), []) # 测试单元素 self.buffer.put(1) self.assertEqual(self.buffer.get_all(), [1]) self.assertEqual(self.buffer.get_all(), []) # 确认缓冲区已清空 # 测试多元素 for i in range(5): self.buffer.put(i) self.assertEqual(self.buffer.get_all(), [0, 1, 2, 3, 4]) # 缓冲区交换测试 def test_buffer_swapping(self): # 第一次填充 self.buffer.put("A") result1 = self.buffer.get_all() self.assertEqual(result1, ["A"]) # 第二次填充(测试缓冲区复用) self.buffer.put("B") result2 = self.buffer.get_all() self.assertEqual(result2, ["B"]) # 线程安全测试 def test_concurrent_access(self): def producer(): for i in range(1000): self.buffer.put(i) def consumer(): time.sleep(0.1) # 确保生产者先启动 total = 0 while total < 1000: items = self.buffer.get_all() total += len(items) # 启动生产者和消费者线程 prod_thread = Thread(target=producer) cons_thread = Thread(target=consumer) prod_thread.start() cons_thread.start() prod_thread.join() cons_thread.join() # 验证数据完整性 self.assertEqual(len(self.buffer.get_all()), 0) self.assertTrue(True) # 如果未发生死锁则通过 if __name__ == "__main__": unittest.main()