def test_adding_large_key(self): c = fifo_cache.FIFOSizeCache(10, 8) c[1] = 'abcdefgh' # Adding a large key won't get cached at all self.assertEqual({}, c) c[1] = 'abcdefg' self.assertEqual({1: 'abcdefg'}, c) # Replacing with a too-large key will remove it c[1] = 'abcdefgh' self.assertEqual({}, c) self.assertEqual(0, c._value_size)
def test_resize_larger(self): c = fifo_cache.FIFOSizeCache(10, 8) c[1] = 'a' c[2] = 'bc' c[3] = 'def' c[4] = 'ghij' c.resize(12, 10) self.assertEqual({1: 'a', 2: 'bc', 3: 'def', 4: 'ghij'}, c) c[5] = 'kl' self.assertEqual({1: 'a', 2: 'bc', 3: 'def', 4: 'ghij', 5: 'kl'}, c) c[6] = 'mn' self.assertEqual({4: 'ghij', 5: 'kl', 6: 'mn'}, c)
def test_add_maintains_fifo(self): c = fifo_cache.FIFOSizeCache(10, 8) c[1] = 'ab' c[2] = 'cde' c[3] = 'fghi' self.assertEqual({1: 'ab', 2: 'cde', 3: 'fghi'}, c) c[4] = 'jkl' # Collapse self.assertEqual({3: 'fghi', 4: 'jkl'}, c) # Replacing an item will bump it to the end of the queue c[3] = 'mnop' self.assertEqual({3: 'mnop', 4: 'jkl'}, c) c[5] = 'qrst' self.assertEqual({3: 'mnop', 5: 'qrst'}, c)
def test_missing(self): c = fifo_cache.FIFOSizeCache() self.assertRaises(KeyError, c.__getitem__, 1) self.assertFalse(1 in c) self.assertEqual(0, len(c)) self.assertEqual(None, c.get(1)) self.assertEqual(None, c.get(1, None)) self.assertEqual([], c.keys()) self.assertEqual([], list(c.iterkeys())) self.assertEqual([], c.items()) self.assertEqual([], list(c.iteritems())) self.assertEqual([], c.values()) self.assertEqual([], list(c.itervalues())) self.assertEqual({}, c)
def test_resize_smaller(self): c = fifo_cache.FIFOSizeCache(20, 16) c[1] = 'a' c[2] = 'bc' c[3] = 'def' c[4] = 'ghij' # No cleanup, because it is the exact size c.resize(10, 8) self.assertEqual({1: 'a', 2: 'bc', 3: 'def', 4: 'ghij'}, c) self.assertEqual(10, c.cache_size()) # Adding one more will trigger a cleanup, though c[5] = 'k' self.assertEqual({3: 'def', 4: 'ghij', 5: 'k'}, c) c.resize(5, 4) self.assertEqual({5: 'k'}, c)
def test_add_is_present(self): c = fifo_cache.FIFOSizeCache() c[1] = '2' self.assertTrue(1 in c) self.assertEqual(1, len(c)) self.assertEqual('2', c[1]) self.assertEqual('2', c.get(1)) self.assertEqual('2', c.get(1, None)) self.assertEqual([1], c.keys()) self.assertEqual([1], list(c.iterkeys())) self.assertEqual([(1, '2')], c.items()) self.assertEqual([(1, '2')], list(c.iteritems())) self.assertEqual(['2'], c.values()) self.assertEqual(['2'], list(c.itervalues())) self.assertEqual({1: '2'}, c) self.assertEqual(1024*1024, c.cache_size())