class LRUCacheScaleTests(unittest.TestCase):
    def setUp(self):
        self.capacity = 5000000
        self.__num_over_capacity = 500002
        self.lru_cache = LRUCache(self.capacity)
        
        for i in xrange(1, self.capacity + self.__num_over_capacity):
            self.lru_cache.set('user' + str(i), 'user_number_' + str(i))

    def tearDown(self):
        self.lru_cache = None

    @raises(KeyError)
    def test_set_and_get(self):
        """
        lru element should be user2 and user1 sould be removed.
        """
        self.assertEqual(self.lru_cache.get_lru_el(), self.lru_cache._cache_dict['user' + str(self.__num_over_capacity)])
        self.lru_cache.get('user' + str(self.__num_over_capacity - 1))

    def test_update(self):
        """
        test update
        """
        self.lru_cache.set('user' + str(self.__num_over_capacity + self.capacity/2), 'ANON_USER')
        self.assertTrue(self.lru_cache.get('user' + str(self.__num_over_capacity + self.capacity/2)) == 'ANON_USER')

        self.lru_cache.set('user' + str(self.__num_over_capacity), 'USER' + str(self.__num_over_capacity))
        self.assertEqual(self.lru_cache.get_lru_el(), self.lru_cache._cache_dict['user' + str(self.__num_over_capacity + 1)])
Exemplo n.º 2
0
class LRUCacheTests(unittest.TestCase):
    def setUp(self):
        self.lru_cache = LRUCache(3)
        self.lru_cache.set('user1', 'timur')
        self.lru_cache.set('user2', 'ogden')
        self.lru_cache.set('user3', 'francis')
        self.lru_cache.set('user4', 'amra')

    def tearDown(self):
        self.lru_cache = None

    @raises(KeyError)
    def test_key_error(self):
        """
        First element should be removed from cache
        """
        self.lru_cache.get('user1')


    def test_get(self):
        """
        Checks to see if 3 most recent elements are in the cache
        """
        self.assertTrue(self.lru_cache.get('user2') == 'ogden')
        self.assertTrue(self.lru_cache.get('user3') == 'francis')
        self.assertTrue(self.lru_cache.get('user4') == 'amra')

    @raises(KeyError)
    def test_lru_get_and_set(self):
        """
        Performs a few get and set operations: user3 should be the least recently used element and should raise a key error. 
        user2, user 4 and user5 should still be in the cache
        """
        self.lru_cache.get('user2')
        self.lru_cache.set('user5', 'tom')
        
        self.assertTrue(self.lru_cache.get('user2') == 'ogden')
        self.assertTrue(self.lru_cache.get('user4') == 'amra')
        self.assertTrue(self.lru_cache.get('user5') == 'tom')

        self.lru_cache.get('user3')

    @raises(KeyError)
    def test_update(self):
        """
        Updates user2 before adding new element. user4 should be the lru element and user3 should be removed from cache.
        """
        self.lru_cache.set('user2', 'Ogden')
        self.lru_cache.set('user5', 'tom')

        self.assertTrue(self.lru_cache.get('user2') == 'Ogden')
        self.assertFalse(self.lru_cache.get('user2') == 'ogden')

        self.assertTrue(self.lru_cache.get_lru_el() == self.lru_cache._cache_dict['user4'])
        self.lru_cache.get('user3')