Rev 3889: Implement setdefault. in http://bzr.arbash-meinel.com/branches/bzr/1.11/fifo_cache
John Arbash Meinel
john at arbash-meinel.com
Tue Dec 9 21:57:56 GMT 2008
At http://bzr.arbash-meinel.com/branches/bzr/1.11/fifo_cache
------------------------------------------------------------
revno: 3889
revision-id: john at arbash-meinel.com-20081209215736-6rvlqtzobqbwqn2m
parent: john at arbash-meinel.com-20081209215038-uevgqhtrnlgnkecj
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: fifo_cache
timestamp: Tue 2008-12-09 15:57:36 -0600
message:
Implement setdefault.
-------------- next part --------------
=== modified file 'bzrlib/fifo_cache.py'
--- a/bzrlib/fifo_cache.py 2008-12-09 21:50:38 +0000
+++ b/bzrlib/fifo_cache.py 2008-12-09 21:57:36 +0000
@@ -72,6 +72,10 @@
# Make sure the cache is shrunk to the correct size
while len(self) > self._after_cleanup_count:
self._remove_oldest()
+ if len(self._queue) != len(self):
+ raise AssertionError('The length of the queue should always equal'
+ ' the length of the dict. %s != %s'
+ % (len(self._queue), len(self)))
def clear(self):
"""Clear out all of the cache."""
@@ -113,7 +117,10 @@
def setdefault(self, key, defaultval=None):
"""similar to dict.setdefault"""
- raise NotImplementedError(self.setdefault)
+ if key in self:
+ return self[key]
+ self[key] = defaultval
+ return defaultval
def update(self, *args, **kwargs):
"""Similar to dict.update()"""
=== modified file 'bzrlib/tests/test_fifo_cache.py'
--- a/bzrlib/tests/test_fifo_cache.py 2008-12-09 21:50:38 +0000
+++ b/bzrlib/tests/test_fifo_cache.py 2008-12-09 21:57:36 +0000
@@ -39,6 +39,7 @@
self.assertEqual([(1, 2)], list(c.iteritems()))
self.assertEqual([2], c.values())
self.assertEqual([2], list(c.itervalues()))
+ self.assertEqual({1: 2}, c)
def test_missing(self):
c = fifo_cache.FIFOCache()
@@ -53,6 +54,7 @@
self.assertEqual([], list(c.iteritems()))
self.assertEqual([], c.values())
self.assertEqual([], list(c.itervalues()))
+ self.assertEqual({}, c)
def test_add_maintains_fifo(self):
c = fifo_cache.FIFOCache(4, 4)
@@ -98,6 +100,7 @@
c.clear()
self.assertEqual([], c.keys())
self.assertEqual([], list(c._queue))
+ self.assertEqual({}, c)
def test_copy_not_implemented(self):
c = fifo_cache.FIFOCache()
@@ -111,9 +114,19 @@
c = fifo_cache.FIFOCache()
self.assertRaises(NotImplementedError, c.popitem)
- def test_setdefault_not_implemented(self):
- c = fifo_cache.FIFOCache()
- self.assertRaises(NotImplementedError, c.setdefault, 1, 2)
+ def test_setdefault(self):
+ c = fifo_cache.FIFOCache(5, 4)
+ c['one'] = 1
+ c['two'] = 2
+ c['three'] = 3
+ myobj = object()
+ self.assertIs(myobj, c.setdefault('four', myobj))
+ self.assertEqual({'one': 1, 'two': 2, 'three': 3, 'four': myobj}, c)
+ self.assertEqual(3, c.setdefault('three', myobj))
+ c.setdefault('five', myobj)
+ c.setdefault('six', myobj)
+ self.assertEqual({'three': 3, 'four': myobj, 'five': myobj,
+ 'six': myobj}, c)
def test_update(self):
c = fifo_cache.FIFOCache(5, 4)
More information about the bazaar-commits
mailing list