Browse Source

Added another test for #3109

Ask Solem 9 years ago
parent
commit
deded52652
1 changed files with 18 additions and 1 deletions
  1. 18 1
      celery/tests/utils/test_datastructures.py

+ 18 - 1
celery/tests/utils/test_datastructures.py

@@ -337,14 +337,31 @@ class test_LimitedSet(Case):
         s.add('foo')
         self.assertIsInstance(s.as_dict(), Mapping)
 
-    def test_no_duplicates(self):
+    def test_add_removes_duplicate_from_small_heap(self):
         s = LimitedSet(maxlen=2)
         s.add('foo')
         s.add('foo')
+        s.add('foo')
         self.assertEqual(len(s), 1)
         self.assertEqual(len(s._data), 1)
         self.assertEqual(len(s._heap), 1)
 
+    def test_add_removes_duplicate_from_big_heap(self):
+        s = LimitedSet(maxlen=1000)
+        [s.add(i) for i in range(2000)]
+        self.assertEqual(len(s), 1000)
+        [s.add('foo') for i in range(1000)]
+        # heap is refreshed when 15% larger than _data
+        self.assertLess(len(s._heap), 1150)
+        [s.add('foo') for i in range(1000)]
+        self.assertLess(len(s._heap), 1150)
+
+    def assert_lengths(self, s, expected, expected_data, expected_heap):
+        self.assertEqual(len(s), expected)
+        self.assertEqual(len(s._data), expected_data)
+        self.assertEqual(len(s._heap), expected_heap)
+
+
 class test_AttributeDict(Case):
 
     def test_getattr__setattr(self):