def test_delitem(self): with self.assertRaises(KeyError): del LruCache()['key'] pairs = [('a', 1), ('b', 2), ('c', 3), ('d', 4)] cache = LruCache(pairs) with self.assertRaises(KeyError): del cache['key'] for index, (key, value) in enumerate(pairs): del cache[key] self.assertEqual(cache.items(), pairs[index+1:][::-1]) # start deleting from the tail cache.update(pairs) for index, (key, value) in enumerate(pairs[::-1]): del cache[key] index = len(pairs) - index - 1 self.assertEqual(cache.items(), pairs[:index][::-1])
def test_copy(self): pairs = [('a', 1), ('b', 2), ('c', 3), ('d', 4)] cache = LruCache(pairs) self.assertEqual(cache.copy().items(), cache.items()) self.assertEqual(cache.copy().keys(), cache.keys()) self.assertEqual(LruCache().items(), LruCache().copy().items()) self.assertEqual(LruCache().keys(), LruCache().copy().keys())
def test_setitem(self): with self.assertRaises(ValueError): LruCache()['a'] = None with self.assertRaises(ValueError): LruCache()[None] = 'a' with self.assertRaises(ValueError): LruCache()[None] = None cache = LruCache(capacity=10) cache['a'] = 1 cache['b'] = 2 self.assertEqual(cache.items(), [('b', 2), ('a', 1)]) cache['a'] = 3 self.assertEqual(cache.items(), [('a', 3), ('b', 2)]) cache['b'] = 4 self.assertEqual(cache.items(), [('b', 4), ('a', 3)]) cache['c'] = 5 self.assertEqual(cache.items(), [('c', 5), ('b', 4), ('a', 3)]) del cache['c'] cache['c'] = 5 self.assertEqual(cache.items(), [('c', 5), ('b', 4), ('a', 3)])
def test_set_item(self): """Test putting item in cache.""" cache = LruCache(3) cache['k1'] = 100 cache['k2'] = 200 cache['k3'] = 300 cache['k4'] = 400 self.assertEqual(len(cache), 3) self.assertListEqual(list(cache.items()), [('k2', 200), ('k3', 300), ('k4', 400)])
def test_init(self): with self.assertRaises(ValueError): LruCache(capacity=0) pairs = [('a', 1), ('b', 2), ('c', 3), ('d', 4)] self.assertEqual(sorted(LruCache(pairs).items()), pairs) self.assertEqual(sorted(LruCache(dict(pairs)).items()), pairs) self.assertEqual(sorted(LruCache(**dict(pairs)).items()), pairs) self.assertEqual(sorted(LruCache(pairs, e=4, f=5, r=6).items()), pairs + [('e', 4), ('f', 5), ('r', 6)]) cache = LruCache(pairs) cache.__init__([('e', 5), ('t', 6)]) self.assertEqual(sorted(cache.items()), pairs + [('e', 5), ('t', 6)])
def test_update_item(self): """Test update item in cache.""" cache = LruCache(3) cache['k1'] = 100 cache['k2'] = 200 cache['k1'] = 300 self.assertEqual(len(cache), 2) self.assertListEqual(list(cache.items()), [ ('k2', 200), ('k1', 300), ])