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