class LRUCache(object): def __init__(self): self.hash_table = HashTable(50, hash_djb2) self.time_tracker = [] self.size = 0 def get(self, key, func): result = self.hash_table.get(key) if result == 'No item found at key ' + key: if self.size == 50: key_to_remove = self.time_tracker[49] self.hash_table.remove(key_to_remove) del (self.time_tracker[-1]) self.size = self.size - 1 value = func(key) result = self.hash_table.put(key, value) self.time_tracker.insert(0, key) self.size = self.size + 1 return result
def test_put_overrides_key_value_pair(): hash_function = hash_djb2 hash_table = HashTable(10, hash_function) hash_table.put('banana', 'strawberry') hash_table.put('banana', 'blueberry') expected_kvp = {'banana': 'blueberry'} assert hash_table.data[1][0] == expected_kvp
def test_remove_deletes_value_at_key(): hash_function = hash_djb2 hash_table = HashTable(10, hash_function) hash_table.put('banana', 'strawberry') expected_kvp = {'banana': 'strawberry'} assert hash_table.data[1][0] == expected_kvp hash_table.remove('banana') assert len(hash_table.data[1]) == 0
def test_put_adds_multiple_key_value_pairs(): hash_function = hash_djb2 hash_table = HashTable(10, hash_function) hash_table.put('banana', 'strawberry') expected_kvp = {'banana': 'strawberry'} assert hash_table.data[1][0] == expected_kvp hash_table.put('blueberry', 'apple') expected_kvp = {'blueberry': 'apple'} assert hash_table.data[3][0] == expected_kvp
def __init__(self): self.hash_table = HashTable(50, hash_djb2) self.time_tracker = [] self.size = 0
def test_remove_returns_no_item_message_with_no_item(): hash_function = hash_djb2 hash_table = HashTable(10, hash_function) result = hash_table.remove('StarWars') assert result == 'No item found at key StarWars'
def test_get_returns_value(): hash_function = hash_djb2 hash_table = HashTable(10, hash_function) hash_table.put('banana', 'strawberry') result = hash_table.get('banana') assert result == 'strawberry'
def test_hash_table_can_be_created_with_proper_parameters(): hash_function = hash_djb2 result = HashTable(10, hash_function) assert result.data == [[], [], [], [], [], [], [], [], [], []] assert result.size == 10 assert result.max_size == 110