~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_lru_cache.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2009-04-30 15:00:23 UTC
  • mfrom: (4273.1.21 branch-subtree-locations)
  • Revision ID: pqm@pqm.ubuntu.com-20090430150023-1cw4lwqf312vpuu8
(abentley) Implement references command.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006, 2008, 2009 Canonical Ltd
 
1
# Copyright (C) 2006, 2008 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
46
46
        self.failUnless('foo' in cache)
47
47
        self.failIf('bar' in cache)
48
48
 
49
 
    def test_map_None(self):
50
 
        # Make sure that we can properly map None as a key.
51
 
        cache = lru_cache.LRUCache(max_cache=10)
52
 
        self.failIf(None in cache)
53
 
        cache[None] = 1
54
 
        self.assertEqual(1, cache[None])
55
 
        cache[None] = 2
56
 
        self.assertEqual(2, cache[None])
57
 
        # Test the various code paths of __getitem__, to make sure that we can
58
 
        # handle when None is the key for the LRU and the MRU
59
 
        cache[1] = 3
60
 
        cache[None] = 1
61
 
        cache[None]
62
 
        cache[1]
63
 
        cache[None]
64
 
        self.assertEqual([None, 1], [n.key for n in cache._walk_lru()])
65
 
 
66
 
    def test_add__null_key(self):
67
 
        cache = lru_cache.LRUCache(max_cache=10)
68
 
        self.assertRaises(ValueError, cache.add, lru_cache._null_key, 1)
69
 
 
70
49
    def test_overflow(self):
71
50
        """Adding extra entries will pop out old ones."""
72
51
        cache = lru_cache.LRUCache(max_cache=1, after_cleanup_count=1)
132
111
        cache[2] = 26
133
112
        self.assertEqual([(2, 20), (2, 25)], cleanup_called)
134
113
 
135
 
    def test_cleanup_error_maintains_linked_list(self):
136
 
        cleanup_called = []
137
 
        def cleanup_func(key, val):
138
 
            cleanup_called.append((key, val))
139
 
            raise ValueError('failure during cleanup')
140
 
 
141
 
        cache = lru_cache.LRUCache(max_cache=10)
142
 
        for i in xrange(10):
143
 
            cache.add(i, i, cleanup=cleanup_func)
144
 
        for i in xrange(10, 20):
145
 
            self.assertRaises(ValueError,
146
 
                cache.add, i, i, cleanup=cleanup_func)
147
 
 
148
 
        self.assertEqual([(i, i) for i in xrange(10)], cleanup_called)
149
 
 
150
 
        self.assertEqual(range(19, 9, -1), [n.key for n in cache._walk_lru()])
151
 
 
152
 
    def test_cleanup_during_replace_still_replaces(self):
153
 
        cleanup_called = []
154
 
        def cleanup_func(key, val):
155
 
            cleanup_called.append((key, val))
156
 
            raise ValueError('failure during cleanup')
157
 
 
158
 
        cache = lru_cache.LRUCache(max_cache=10)
159
 
        for i in xrange(10):
160
 
            cache.add(i, i, cleanup=cleanup_func)
161
 
        self.assertRaises(ValueError,
162
 
            cache.add, 1, 20, cleanup=cleanup_func)
163
 
        # We also still update the recent access to this node
164
 
        self.assertEqual([1, 9, 8, 7, 6, 5, 4, 3, 2, 0],
165
 
                         [n.key for n in cache._walk_lru()])
166
 
        self.assertEqual(20, cache[1])
167
 
 
168
 
        self.assertEqual([(1, 1)], cleanup_called)
169
 
        self.assertEqual([1, 9, 8, 7, 6, 5, 4, 3, 2, 0],
170
 
                         [n.key for n in cache._walk_lru()])
171
 
 
172
114
    def test_len(self):
173
115
        cache = lru_cache.LRUCache(max_cache=10, after_cleanup_count=10)
174
116
 
282
224
        cache[6] = 7
283
225
        self.assertEqual([2, 3, 4, 5, 6], sorted(cache.keys()))
284
226
 
 
227
    def test_after_cleanup_size_deprecated(self):
 
228
        obj = self.callDeprecated([
 
229
            'LRUCache.__init__(after_cleanup_size) was deprecated in 1.11.'
 
230
            ' Use after_cleanup_count instead.'],
 
231
            lru_cache.LRUCache, 50, after_cleanup_size=25)
 
232
        self.assertEqual(obj._after_cleanup_count, 25)
 
233
 
285
234
    def test_resize_smaller(self):
286
235
        cache = lru_cache.LRUCache(max_cache=5, after_cleanup_count=4)
287
236
        cache[1] = 2
330
279
        self.assertEqual(int(cache._max_size*0.8), cache._after_cleanup_size)
331
280
        self.assertEqual(0, cache._value_size)
332
281
 
333
 
    def test_add__null_key(self):
334
 
        cache = lru_cache.LRUSizeCache()
335
 
        self.assertRaises(ValueError, cache.add, lru_cache._null_key, 1)
336
 
 
337
282
    def test_add_tracks_size(self):
338
283
        cache = lru_cache.LRUSizeCache()
339
284
        self.assertEqual(0, cache._value_size)