--- a/tests/test-lrucachedict.py Wed Sep 05 23:15:20 2018 -0700
+++ b/tests/test-lrucachedict.py Fri Sep 07 12:14:42 2018 -0700
@@ -12,27 +12,33 @@
def testsimple(self):
d = util.lrucachedict(4)
self.assertEqual(d.capacity, 4)
- d['a'] = 'va'
+ d.insert('a', 'va', cost=2)
d['b'] = 'vb'
d['c'] = 'vc'
- d['d'] = 'vd'
+ d.insert('d', 'vd', cost=42)
self.assertEqual(d['a'], 'va')
self.assertEqual(d['b'], 'vb')
self.assertEqual(d['c'], 'vc')
self.assertEqual(d['d'], 'vd')
+ self.assertEqual(d.totalcost, 44)
+
# 'a' should be dropped because it was least recently used.
d['e'] = 've'
self.assertNotIn('a', d)
-
self.assertIsNone(d.get('a'))
+ self.assertEqual(d.totalcost, 42)
self.assertEqual(d['b'], 'vb')
self.assertEqual(d['c'], 'vc')
self.assertEqual(d['d'], 'vd')
self.assertEqual(d['e'], 've')
+ # Replacing item with different cost adjusts totalcost.
+ d.insert('e', 've', cost=4)
+ self.assertEqual(d.totalcost, 46)
+
# Touch entries in some order (both get and set).
d['e']
d['c'] = 'vc2'
@@ -63,12 +69,13 @@
def testcopypartial(self):
d = util.lrucachedict(4)
- d['a'] = 'va'
- d['b'] = 'vb'
+ d.insert('a', 'va', cost=4)
+ d.insert('b', 'vb', cost=2)
dc = d.copy()
self.assertEqual(len(dc), 2)
+ self.assertEqual(dc.totalcost, 6)
for key in ('a', 'b'):
self.assertIn(key, dc)
self.assertEqual(dc[key], 'v%s' % key)
@@ -80,8 +87,10 @@
d['c'] = 'vc'
del d['b']
+ self.assertEqual(d.totalcost, 4)
dc = d.copy()
self.assertEqual(len(dc), 2)
+ self.assertEqual(dc.totalcost, 4)
for key in ('a', 'c'):
self.assertIn(key, dc)
self.assertEqual(dc[key], 'v%s' % key)
@@ -93,7 +102,7 @@
def testcopyfull(self):
d = util.lrucachedict(4)
- d['a'] = 'va'
+ d.insert('a', 'va', cost=42)
d['b'] = 'vb'
d['c'] = 'vc'
d['d'] = 'vd'
@@ -104,6 +113,9 @@
self.assertIn(key, dc)
self.assertEqual(dc[key], 'v%s' % key)
+ self.assertEqual(d.totalcost, 42)
+ self.assertEqual(dc.totalcost, 42)
+
# 'a' should be dropped because it was least recently used.
dc['e'] = 've'
self.assertNotIn('a', dc)
@@ -111,6 +123,9 @@
self.assertIn(key, dc)
self.assertEqual(dc[key], 'v%s' % key)
+ self.assertEqual(d.totalcost, 42)
+ self.assertEqual(dc.totalcost, 0)
+
# Contents and order of original dict should remain unchanged.
dc['b'] = 'vb_new'
@@ -120,25 +135,28 @@
def testcopydecreasecapacity(self):
d = util.lrucachedict(5)
- d['a'] = 'va'
- d['b'] = 'vb'
+ d.insert('a', 'va', cost=4)
+ d.insert('b', 'vb', cost=2)
d['c'] = 'vc'
d['d'] = 'vd'
dc = d.copy(2)
+ self.assertEqual(dc.totalcost, 0)
for key in ('a', 'b'):
self.assertNotIn(key, dc)
for key in ('c', 'd'):
self.assertIn(key, dc)
self.assertEqual(dc[key], 'v%s' % key)
- dc['e'] = 've'
+ dc.insert('e', 've', cost=7)
+ self.assertEqual(dc.totalcost, 7)
self.assertNotIn('c', dc)
for key in ('d', 'e'):
self.assertIn(key, dc)
self.assertEqual(dc[key], 'v%s' % key)
# Original should remain unchanged.
+ self.assertEqual(d.totalcost, 6)
for key in ('a', 'b', 'c', 'd'):
self.assertIn(key, d)
self.assertEqual(d[key], 'v%s' % key)
@@ -174,14 +192,16 @@
def testpopoldest(self):
d = util.lrucachedict(4)
- d['a'] = 'va'
- d['b'] = 'vb'
+ d.insert('a', 'va', cost=10)
+ d.insert('b', 'vb', cost=5)
self.assertEqual(len(d), 2)
self.assertEqual(d.popoldest(), ('a', 'va'))
self.assertEqual(len(d), 1)
+ self.assertEqual(d.totalcost, 5)
self.assertEqual(d.popoldest(), ('b', 'vb'))
self.assertEqual(len(d), 0)
+ self.assertEqual(d.totalcost, 0)
self.assertIsNone(d.popoldest())
d['a'] = 'va'