diff tests/test-lrucachedict.py @ 39582:bd9d3a89f07b

util: add a popoldest() method to lrucachedict This allows consumers to prune the oldest item from the cache. This could be useful for e.g. a consumer that wishes for the size of items tracked by the cache to remain under a high water mark. Differential Revision: https://phab.mercurial-scm.org/D4501
author Gregory Szorc <gregory.szorc@gmail.com>
date Wed, 05 Sep 2018 23:15:20 -0700
parents 2dcc68c7d25b
children ee087f0d7db5
line wrap: on
line diff
--- a/tests/test-lrucachedict.py	Thu Sep 06 11:40:20 2018 -0700
+++ b/tests/test-lrucachedict.py	Wed Sep 05 23:15:20 2018 -0700
@@ -172,5 +172,30 @@
             self.assertIn(key, d)
             self.assertEqual(d[key], 'v%s' % key)
 
+    def testpopoldest(self):
+        d = util.lrucachedict(4)
+        d['a'] = 'va'
+        d['b'] = 'vb'
+
+        self.assertEqual(len(d), 2)
+        self.assertEqual(d.popoldest(), ('a', 'va'))
+        self.assertEqual(len(d), 1)
+        self.assertEqual(d.popoldest(), ('b', 'vb'))
+        self.assertEqual(len(d), 0)
+        self.assertIsNone(d.popoldest())
+
+        d['a'] = 'va'
+        d['b'] = 'vb'
+        d['c'] = 'vc'
+        d['d'] = 'vd'
+
+        self.assertEqual(d.popoldest(), ('a', 'va'))
+        self.assertEqual(len(d), 3)
+        for key in ('b', 'c', 'd'):
+            self.assertEqual(d[key], 'v%s' % key)
+
+        d['a'] = 'va'
+        self.assertEqual(d.popoldest(), ('b', 'vb'))
+
 if __name__ == '__main__':
     silenttestrunner.main(__name__)