Exemplo n.º 1
0
def test_cache(cache_size, max_items, zipf_param, item_count, method):
    all_items = [i for i in range(int(max_items / 10))]
    Z = Accu_Zipfian(max_items, zipf_param)
    if method == "LRU":
        cache = LRUCache(cache_size)
    elif method == "Hyper":
        cache = HyperbolicCache(cache_size, 64)
    elif method == "LFU":
        cache = LFUCache(cache_size)

    cnt_hits = 0
    cnt_miss = 0
    for i in range(0, item_count):
        if i % 100 == 0:
            next_key = random.choice(all_items)
        else:
            next_key = 1 + Z.get_next(np.random.random())[0]
            #if next_key in all_items:
            #    all_items.remove(next_key)
        ret_val = cache.get(next_key)
        if ret_val == 1:
            #found in cache
            cnt_hits += 1
        else:
            #cache-miss
            cnt_miss += 1
            cache.put(next_key, 0, 0)
    print(method, "Miss rate:", 100.0 * cnt_miss / (cnt_hits + cnt_miss))
Exemplo n.º 2
0
 def test_put_update(self):
     capacity = 1
     cache = LRUCache(capacity)
     cache.put(1, 3)
     cache.put(1, 5)
     value = cache.get(1)
     self.assertEqual(5, value)
Exemplo n.º 3
0
 def test_put_hit_capacity_update(self):
     capacity = 2
     cache = LRUCache(capacity)
     cache.put(1, 3)
     cache.put(2, 5)
     cache.put(1, 2)
     value = cache.get(1)
     self.assertEqual(2, value)
Exemplo n.º 4
0
 def test_get_expired(self):
     capacity = 2
     cache = LRUCache(capacity)
     cache.put(1, 3)
     cache.put(2, 5)
     cache.get(1)
     cache.put(3, 6)
     value = cache.get(2)
     self.assertEqual(-1, value)
Exemplo n.º 5
0
    def test_del_should_do_no_op_when_key_not_found(self):

        lru_cache = LRUCache(3)
        lru_cache.put(1, "abc")
        lru_cache.put(2, "edf")
        lru_cache.put(3, "ghi")
        lru_cache.delete(4)

        self.assertEqual(lru_cache._get_head_value(), "ghi", "Failed")
Exemplo n.º 6
0
 def test_lru_cache_generic(self):
     lru = LRUCache(2)
     self.assertEqual(lru.put(1, 1), None)
     self.assertEqual(lru.put(2, 2), None)
     self.assertEqual(lru.get(1), 1)
     self.assertEqual(lru.put(3, 3), None)
     self.assertEqual(lru.get(2), -1)
     self.assertEqual(lru.put(4, 4), None)
     self.assertEqual(lru.get(1), -1)
     self.assertEqual(lru.get(3), 3)
     self.assertEqual(lru.get(4), 4)
Exemplo n.º 7
0
 def test_expired_after_update(self):
     capacity = 2
     cache = LRUCache(capacity)
     cache.put(2, 1)
     cache.put(1, 1)
     cache.put(2, 3)
     cache.put(4, 1)
     value = cache.get(1)
     self.assertEqual(-1, value)
     value = cache.get(2)
     self.assertEqual(3, value)
Exemplo n.º 8
0
    def test_reset_should_clear(self):
        lru_cache = LRUCache(3)
        lru_cache.put("a", "abc")
        lru_cache.put("b", "edf")
        lru_cache.put("c", "ghi")

        self.assertEqual(len(lru_cache._get_cache()), 3, "Failed")

        lru_cache.reset()

        self.assertEqual(len(lru_cache._get_cache()), 0, "Failed")
Exemplo n.º 9
0
    def test_get_should_make_it_top(self):
        lru_cache = LRUCache(3)
        lru_cache.put(1, "abc")
        lru_cache.put(2, "edf")
        lru_cache.put(3, "ghi")

        self.assertEqual(lru_cache._get_head_key(), 3, "Failed")

        lru_cache.get(1)

        self.assertEqual(lru_cache._get_head_key(), 1, "Failed")
Exemplo n.º 10
0
    def test(self):
        cache = LRUCache(2)

        cache.put(1, 1)
        cache.put(2, 2)
        cache.get(1)
        cache.get(1)
        cache.get(2)
        cache.put(3, 3)

        actual = cache.get(2)
        self.assertEqual(-1, actual)
Exemplo n.º 11
0
    def test_cache(self):
        test_actions = ["LRUCache", "put", "put", "put", "put", "put", "get", "put", "get", "get", "put", "get", "put",
                        "put", "put",
                        "get", "put", "get", "get", "get", "get", "put", "put", "get", "get", "get", "put", "put",
                        "get",
                        "put", "get",
                        "put", "get", "get", "get", "put", "put", "put", "get", "put", "get", "get", "put", "put",
                        "get",
                        "put", "put",
                        "put", "put", "get", "put", "put", "get", "put", "put", "get", "put", "put", "put", "put",
                        "put",
                        "get", "put",
                        "put", "get", "put", "get", "get", "get", "put", "get", "get", "put", "put", "put", "put",
                        "get",
                        "put", "put",
                        "put", "put", "get", "get", "get", "put", "put", "put", "get", "put", "put", "put", "get",
                        "put",
                        "put", "put",
                        "get", "get", "get", "put", "put", "put", "put", "get", "put", "put", "put", "put", "put",
                        "put",
                        "put"]
        test_input = [[10], [10, 13], [3, 17], [6, 11], [10, 5], [9, 10], [13], [2, 19], [2], [3], [5, 25], [8],
                      [9, 22], [5, 5],
                      [1, 30], [11], [9, 12], [7], [5], [8], [9], [4, 30], [9, 3], [9], [10], [10], [6, 14], [3, 1],
                      [3], [10, 11],
                      [8], [2, 14], [1], [5], [4], [11, 4], [12, 24], [5, 18], [13], [7, 23], [8], [12], [3, 27],
                      [2, 12], [5],
                      [2, 9], [13, 4], [8, 18], [1, 7], [6], [9, 29], [8, 21], [5], [6, 30], [1, 12], [10], [4, 15],
                      [7, 22],
                      [11, 26], [8, 17], [9, 29], [5], [3, 4], [11, 30], [12], [4, 29], [3], [9], [6], [3, 4], [1],
                      [10], [3, 29],
                      [10, 28], [1, 20], [11, 13], [3], [3, 12], [3, 8], [10, 9], [3, 26], [8], [7], [5], [13, 17],
                      [2, 27],
                      [11, 15], [12], [9, 19], [2, 15], [3, 16], [1], [12, 17], [9, 1], [6, 19], [4], [5], [5], [8, 1],
                      [11, 7],
                      [5, 2], [9, 28], [1], [2, 2], [7, 4], [4, 22], [7, 24], [9, 26], [13, 28], [11, 26]]

        lru = None
        result = []
        for i in range(len(test_actions)):
            if test_actions[i] is "LRUCache":
                lru = LRUCache(test_input[i][0])
                result.append(None)
            elif test_actions[i] is "get":
                result.append(lru.get(test_input[i][0]))
            elif test_actions[i] is "put":
                lru.put(test_input[i][0], test_input[i][1])
                result.append(None)

        self.assertListEqual([None, None, None, 1, None, -1, None, -1, 3, 4], result)
Exemplo n.º 12
0
def test_dynworkload(workload, cache_size, max_items, zipf_param, item_count,
                     method):
    if method == "LRU":
        cache = LRUCache(cache_size)
    elif method == "Hyper":
        cache = HyperbolicCache(cache_size, 64)
    elif method == "HyperLFU":
        cache = HyperLFUCache(cache_size, 100)
    elif method == "LFU":
        cache = LFUCache(cache_size)

    cnt_hits = 0
    cnt_miss = 0
    for i in range(0, item_count):
        next_key = workload[i]
        ret_val = cache.get(next_key)
        if ret_val == 1:
            cnt_hits += 1
        else:
            cnt_miss += 1
            cache.put(next_key, 0, 0)
    print(method, "Miss rate:", 100.0 * cnt_miss / (cnt_hits + cnt_miss))
Exemplo n.º 13
0
 def test(self):
     cache = LRUCache(3)
     cache.put(1, 1)  #1
     cache.put(2, 2)  #2,1
     self.assertEqual(cache.get(1), 1)  #1,2
     cache.get(1)  #// returns 1
     cache.put(3, 3)  #// evicts key 2  #3,1,2
     self.assertEqual(cache.get(2), 2)  #// returns -1 (not found) #2,3,1
     cache.put(4, 4)  #// evicts key 1 #4,2,3,1
     self.assertEqual(cache.get(1), -1)  #// returns -1 (not found)
     self.assertEqual(cache.get(3), 3)  #// returns 3
     cache.get(4)  #// returns 4
     self.assertEqual(cache.head.value, 4)
     cache.put(4, 2)
     self.assertEqual(cache.size, 3)
     self.assertEqual(cache.head.value, 2)
     self.assertEqual(cache.get(4), 2)
Exemplo n.º 14
0
    def test_put_should_add_new_and_evict_tail(self):
        lru_cache = LRUCache(3)
        lru_cache.put(1, "abc")
        lru_cache.put(2, "edf")
        lru_cache.put(3, "ghi")

        lru_cache.put(4, "jkl")

        self.assertIsNone(lru_cache.get(1), "Failed")
        self.assertEqual(lru_cache.get(4), "jkl", "Failed")
Exemplo n.º 15
0
    def test_item_removal_with_get(self):
        lru_cache = LRUCache(3)
        lru_cache.put(1, "abc")
        lru_cache.put(2, "edf")
        lru_cache.put(3, "ghi")
        lru_cache.get(1)

        lru_cache.put(4, "jkl")

        self.assertIsNone(lru_cache.get(2), "Failed")
Exemplo n.º 16
0
    def test_put_should_place_item_at_top_and_update_existing_key_value(self):
        lru_cache = LRUCache(3)
        lru_cache.put(1, "abc")
        lru_cache.put(2, "edf")
        lru_cache.put(3, "ghi")

        self.assertEqual(lru_cache._get_head_key(), 3, "Failed")

        lru_cache.put(2, "jkl")
        self.assertEqual(lru_cache._get_head_key(), 2, "Failed")

        self.assertEqual(lru_cache.get(2), "jkl", "Failed")
Exemplo n.º 17
0
    def test_lru_cache(self):
        cache = LRUCache(2)

        cache.put(1, 1)
        cache.put(2, 2)
        actual = cache.get(1)
        self.assertEqual(1, actual)

        cache.put(3, 3)
        actual = cache.get(2)
        self.assertEqual(-1, actual)

        cache.put(4, 4)
        actual = cache.get(1)
        self.assertEqual(-1, actual)
        actual = cache.get(3)
        self.assertEqual(3, actual)
        actual = cache.get(4)
        self.assertEqual(4, actual)
Exemplo n.º 18
0
    def test_del_should_remove_key_value(self):
        lru_cache = LRUCache(3)
        lru_cache.put(1, "abc")
        lru_cache.put(2, "edf")
        lru_cache.put(3, "ghi")

        #deleting head
        lru_cache.delete(3)

        self.assertEqual(lru_cache._get_head_key(), 2, "Failed")
        self.assertEqual(lru_cache._get_head_value(), "edf", "Failed")

        self.assertIsNone(lru_cache.get(3), "Failed")

        #deleting tail
        lru_cache.put(3, "ghi")
        lru_cache.delete(1)

        self.assertEqual(lru_cache._get_tail_key(), 2, "Failed")
Exemplo n.º 19
0
def test_lru_cache():
    my_cache = LRUCache(2)

    my_cache.put(1, 1)
    my_cache.put(2, 2)

    assert len(my_cache) == 2
    assert 1 == my_cache.get(1)      # returns 1

    my_cache.put(3, 3)               # evicts key 2
    assert 2 not in my_cache.cache_data

    assert -1 == my_cache.get(2)     # returns -1 (not found)

    my_cache.put(4, 4)               # evicts key 1
    assert 1 not in my_cache.cache_data

    assert my_cache.get(1) == -1     # returns -1 (not found)
    assert my_cache.get(3) == 3      # returns 3
    assert my_cache.get(4) == 4      # returns 4
Exemplo n.º 20
0
 def test_get_key_exists(self):
     capacity = 1
     cache = LRUCache(capacity)
     cache.put(1, 3)
     value = cache.get(1)
     self.assertEqual(3, value)