public void Get_MovesElementToFrontOfListForEviction()
        {
            // Arrange
            var cache = new LeastRecentlyUsedCache <string>(2);

            cache.Set(KeyOne, ValueOne);
            cache.Set(KeyTwo, ValueTwo);
            cache.Get(KeyOne);
            cache.Set(KeyThree, ValueThree);

            // Act
            var result = cache.Get(KeyOne);

            // Assert
            Assert.AreEqual(ValueOne, result);
        }
        public void Get_ReturnsCachedItem()
        {
            // Arrange
            var cache = new LeastRecentlyUsedCache <string>(1);

            cache.Set(KeyOne, ValueOne);

            // Act
            var result = cache.Get(KeyOne);

            // Assert
            Assert.AreEqual(ValueOne, result);
        }
        public void Set_EvictsOldestElement()
        {
            // Arrange
            var cache = new LeastRecentlyUsedCache <string>(1);

            cache.Set(KeyOne, ValueOne);
            cache.Set(KeyTwo, ValueTwo);

            // Act
            var result = cache.Get(KeyOne);

            // Assert
            Assert.IsNull(result);
        }
        public static void LRUCache()
        {
            LeastRecentlyUsedCache cache = new LeastRecentlyUsedCache(2);

            cache.Set(1, 10);
            cache.Set(5, 12);

            Assert.That(cache.Get(5) == 12);
            Assert.That(cache.Get(1) == 10);
            Assert.That(cache.Get(10) == -1);

            cache.Set(6, 14);
            Assert.That(cache.Get(5) == -1);

            LRUCache cache2 = new LRUCache(2);

            cache2.Put(2, 1);
            cache2.Put(1, 1);
            cache2.Get(2);
            cache2.Put(4, 1);
            cache2.Get(1);
            cache2.Get(2);
        }