Exemple #1
0
class MyTestCase(unittest.TestCase):
    def setUp(self):
        self.cache = LRUCache(4)

    def test_set_get(self):
        self.cache.set('Jesse', 'James')
        self.assertTrue(self.cache.get('Jesse'), 'James')

    def test_delete(self):
        self.cache.set('Jesse', 'James')
        self.cache.get('Jesse')
        self.cache.delete('Walter')

    def test_out_of_memory(self):
        self.cache.set('Jesse', 'James')
        self.cache.set('Jim', 'Richard')
        self.cache.set('Smith', 'Alex')
        self.cache.set('Walter', 'White')

        self.cache.set(
            'Jesse',
            'John')  # ('Jesse', 'John') will be moved to the end of the list

        self.cache.set('Williams',
                       'Jack')  # ('Jim', 'Richard') will be deleted

        self.assertEqual(self.cache.get('Jim'), None)
        self.assertEqual(self.cache.get('Smith'), 'Alex')

        self.cache.set('Jim', 'Richard')  # ('Walter', 'White') will be deleted

        self.assertEqual(self.cache.get('Walter'), None)
Exemple #2
0
class TestCache(unittest.TestCase):

    def setUp(self):
        self.cache1 = LRUCache(2)
        node1 = Node(1, 1)
        node2 = Node(2, 2)
        self.cache1.head.next = node1
        node1.prev = self.cache1.head
        node1.next = node2
        node2.prev = node1
        node2.next = self.cache1.tail
        self.cache1.tail.prev = node2
        self.cache1.valdict[1] = node1
        self.cache1.valdict[2] = node2

    def tearDown(self):
        #del self.cache1
        pass

    def test_get(self):
        print('Test_get')
        # Simple Get
        self.assertEqual(self.cache1.get(1),1)
        self.assertEqual(self.cache1.get(2),2)
        self.assertEqual(self.cache1.head.next.val,2)
        self.assertEqual(self.cache1.tail.prev.val,1)

        # Get value not in cache
        self.assertEqual(self.cache1.get(3),-1)


    def test_put(self):
        print('test_put')
        #Add with an overwrite
        self.cache1.put(1,1)
        self.assertEqual(self.cache1.head.next.val,1)

        #Add with a full cache
        self.cache1.put(3,3)
        self.assertEqual(self.cache1.head.next.val,3)
        self.assertEqual(self.cache1.head.next.next.val,1)


    def test_delete(self):
        print('Test Delete')
        #Delete of value in cache
        self.cache1.delete(1)
        self.assertEqual(self.cache1.head.next.val, 2)

        #Delete of value not in cache
        self.cache1.delete(3)
        self.assertEqual(self.cache1.head.next.val, 2)
        self.assertEqual(self.cache1.head.next.next.val, 0)

    def test_reset(self):
        print('Test Reset')
        self.cache1.reset()
        self.assertEqual(self.cache1.head.next.val, 0)
Exemple #3
0
    def test_delete(self):
        """ Test if Delete function actually deletes the (key, value) pair from the cache. """

        cache = LRUCache(2)
        cache.put(1, 1)
        cache.delete(2)
        self.assertEqual(
            cache.cache, OrderedDict([(1, 1)]),
            f"The result must be {OrderedDict([(1, 1)])} instead of {cache.cache}"
        )
        cache.delete(1)
        self.assertEqual(
            cache.cache, OrderedDict(),
            f"The result must be {OrderedDict()} instead of {cache.cache}")
Exemple #4
0
    def test_all(self):
        """ Test all functions! """

        cache = LRUCache(2)
        cache.put(1, 1)
        cache.put(2, 2)
        cache.get(1)
        cache.put(3, 3)
        cache.get(2)
        cache.get(3)
        cache.delete(3)
        cache.reset()
        cache.put(4, 4)
        self.assertEqual(
            cache.cache, OrderedDict([(4, 4)]),
            f"The result must be {OrderedDict([(4, 4)])} instead of {cache.cache}"
        )
Exemple #5
0
from LRUCache import LRUCache

if __name__ == '__main__':
    cache = LRUCache(100)
    cache.set('Jesse', 'Pinkman')
    cache.set('Walter', 'White')
    cache.set('Jesse', 'James')
    cache.get('Jesse')  # вернёт 'James'
    cache.delete('Walter')
    cache.get('Walter')  # вернёт ''
Exemple #6
0
class TestLRUCache(unittest.TestCase):
    def setUp(self):
        self.capacity = 10
        self.lrucache = LRUCache(self.capacity)

    def test_addkey(self):
        # Add Element to cache
        key = get_random_key()
        value = get_random_string()
        self.lrucache.put(key, value)
        self.assertEqual(self.lrucache.store[key].value, value)
        self.assertEqual(self.lrucache.current_size, 1)

    def test_getkey(self):
        # Add Element to cache
        key = get_random_key()
        value = get_random_string()
        self.lrucache.put(key, value)
        self.assertEqual(self.lrucache.get(key), value)
        self.assertEqual(self.lrucache.current_size, 1)

    def test_getnonexistantkey(self):
        # Add Element to cache
        key = get_random_key()
        self.assertEqual(self.lrucache.get(key), -1)
        self.assertEqual(self.lrucache.current_size, 0)

    def test_deletekey(self):
        key = get_random_key()
        value = get_random_string()
        self.lrucache.put(key, value)
        self.assertEqual(self.lrucache.current_size, 1)
        self.lrucache.delete(key)
        self.assertEqual(self.lrucache.get(key), -1)
        self.assertEqual(self.lrucache.head, None)

    def test_deletenonexistantkey(self):
        key = get_random_key()
        self.lrucache.delete(key)

    def test_resetcache(self):
        kv_pairs = get_key_value_pairs(length=5)
        # Insert keys
        for key, value in kv_pairs:
            self.lrucache.put(key, value)

        self.assertEqual(self.lrucache.current_size, len(kv_pairs))
        self.lrucache.reset()
        self.assertEqual(self.lrucache.current_size, 0)
        self.assertEqual(self.lrucache.head, None)
        self.assertEqual(self.lrucache.tail, None)
        self.assertEqual(self.lrucache.store, {})
        # Add get cache list

    def test_updatekey(self):
        key = get_random_key()
        value = get_random_string()
        self.lrucache.put(key, value)
        self.assertEqual(self.lrucache.get(key), value)
        value = get_random_string()
        self.lrucache.put(key, value)
        self.assertEqual(self.lrucache.get(key), value)
        self.assertEqual(self.lrucache.current_size, 1)

    def test_lrukey_addition(self):
        """[Test which is the top key after inital write]
        """
        kv_pairs = get_key_value_pairs(length=5)
        # Insert keys
        for key, value in kv_pairs:
            self.lrucache.put(key, value)

        self.assertEqual(self.lrucache.current_size, len(kv_pairs))
        self.assertEqual(self.lrucache.head.key, kv_pairs[-1][0])

    def test_lrukey_access(self):
        """[Test which is the top key after read key access]
        """
        kv_pairs = get_key_value_pairs(length=5)
        # Insert keys
        for key, value in kv_pairs:
            self.lrucache.put(key, value)

        self.assertEqual(self.lrucache.current_size, len(kv_pairs))
        rand_index = random.randint(*(0, len(kv_pairs) - 1))
        self.lrucache.get(kv_pairs[rand_index][0])
        self.assertEqual(self.lrucache.head.key, kv_pairs[rand_index][0])

    def test_lrukey_update(self):
        """[Test whcih is the top key after write key update]
        """
        kv_pairs = get_key_value_pairs(length=5)
        # Insert keys
        for key, value in kv_pairs:
            self.lrucache.put(key, value)

        self.assertEqual(self.lrucache.current_size, len(kv_pairs))
        rand_index = random.randint(*(0, len(kv_pairs) - 1))
        value = get_random_string()
        self.lrucache.put(kv_pairs[rand_index][0], value)
        self.assertEqual(self.lrucache.head.key, kv_pairs[rand_index][0])
        self.assertEqual(self.lrucache.head.value, value)