From 86378dcc5d0892dbd46ed88972a6d4b03b3cd346 Mon Sep 17 00:00:00 2001 From: Anton Palgunov Date: Sat, 1 Apr 2023 21:14:36 +0100 Subject: [PATCH] Upd --- transcription_dict.py | 6 ++++++ transcription_dict_test.py | 44 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 transcription_dict_test.py diff --git a/transcription_dict.py b/transcription_dict.py index fed136e..1cbf96b 100644 --- a/transcription_dict.py +++ b/transcription_dict.py @@ -31,6 +31,12 @@ class TranscriptionDict: expired_items = [k for k, v in self._dict.items() if now - v['timestamp'] >= 180] # 180 seconds = 3 minutes for key in expired_items: del self._dict[key] + + # Ensure the cache size does not exceed max_size + while len(self._dict) > self.max_size: + oldest_key = min(self._dict, key=lambda k: self._dict[k]['timestamp']) + del self._dict[oldest_key] + print(f"Cleaned {len(expired_items)} expired items from the cache") def _clean_expired_items_periodically(self): diff --git a/transcription_dict_test.py b/transcription_dict_test.py new file mode 100644 index 0000000..30503e2 --- /dev/null +++ b/transcription_dict_test.py @@ -0,0 +1,44 @@ +import unittest +import time +from transcription_dict import TranscriptionDict + +class TestTranscriptionDict(unittest.TestCase): + + def test_basic_operations(self): + cache = TranscriptionDict(max_size=3) + + # Test setting and getting items + cache.set("key1", "value1") + self.assertEqual(cache.get("key1"), "value1") + + # Test setting and getting items with default value + self.assertEqual(cache.get("non_existent_key", "default_value"), "default_value") + + # Test updating value + cache.set("key1", "updated_value1") + self.assertEqual(cache.get("key1"), "updated_value1") + + # Test cache size limit + cache.set("key2", "value2") + cache.set("key3", "value3") + cache.set("key4", "value4") + self.assertEqual(len(cache), 3) + self.assertNotIn("key1", cache) + + def test_item_expiration(self): + cache = TranscriptionDict(max_size=5) + + # Test setting items + cache.set("key1", "value1") + time.sleep(2) # Sleep for 2 seconds + cache.set("key2", "value2") + + # Test that key1 has not expired yet + self.assertIn("key1", cache) + + # Sleep for enough time to let key1 expire + time.sleep(200) # Sleep for 3+ minutes (200 seconds) + self.assertNotIn("key1", cache) + +if __name__ == '__main__': + unittest.main()