public void MostRecentlyUsedCacheInsertMovesItemToMostRecentIfItAlreadyExistsInCache()
        {
            var cache = new MostRecentlyUsedCache <int, TestCacheStub>(5);

            cache.Insert(1, new TestCacheStub {
                Id = 1, Value = 1.1
            });
            cache.Insert(2, new TestCacheStub {
                Id = 2, Value = 1.2
            });
            cache.Insert(3, new TestCacheStub {
                Id = 3, Value = 1.3
            });
            cache.Insert(4, new TestCacheStub {
                Id = 4, Value = 1.4
            });
            cache.Insert(5, new TestCacheStub {
                Id = 5, Value = 1.5
            });
            //should move 1 to most recently used
            cache.Insert(1, new TestCacheStub {
                Id = 1, Value = 1.1
            });
            //should force removal of MRU
            cache.Insert(6, new TestCacheStub {
                Id = 6, Value = 1.6
            });

            TestCacheStub value;
            bool          result = cache.TryGetItem(1, out value);

            Assert.IsFalse(result);
        }
        public void MostRecentlyUsedCacheInsertUpdatesCacheWithMostRecentInstanceOfItemIfItAlreadyExistsInCache()
        {
            var cache = new MostRecentlyUsedCache <int, TestCacheStub>(5);

            cache.Insert(1, new TestCacheStub {
                Id = 1, Value = 1.1
            });
            cache.Insert(1, new TestCacheStub {
                Id = 2, Value = 1.2
            });
            cache.Insert(1, new TestCacheStub {
                Id = 3, Value = 1.3
            });
            cache.Insert(1, new TestCacheStub {
                Id = 4, Value = 1.4
            });
            cache.Insert(1, new TestCacheStub {
                Id = 5, Value = 1.5
            });

            TestCacheStub value;

            cache.TryGetItem(1, out value);

            Assert.AreEqual(1.5, value.Value);
        }
        public void MostRecentlyUsedCacheRemovesMostRecentlyUsedItemWhenCapacityReached()
        {
            var cache = new MostRecentlyUsedCache <int, TestCacheStub>(5);

            cache.Insert(1, new TestCacheStub {
                Id = 1, Value = 1.1
            });
            cache.Insert(2, new TestCacheStub {
                Id = 2, Value = 1.2
            });
            cache.Insert(3, new TestCacheStub {
                Id = 3, Value = 1.3
            });
            cache.Insert(4, new TestCacheStub {
                Id = 4, Value = 1.4
            });
            cache.Insert(5, new TestCacheStub {
                Id = 5, Value = 1.5
            });
            cache.Insert(6, new TestCacheStub {
                Id = 6, Value = 1.6
            });

            TestCacheStub value;
            bool          result = cache.TryGetItem(5, out value);

            Assert.IsFalse(result);
        }
        public void MostRecentlyUsedCacheTryGetItemThrowsIfKeyIsNull()
        {
            var cache = new MostRecentlyUsedCache <int?, TestCacheStub>(5);

            TestCacheStub cacheItem;

            Assert.Throws <ArgumentNullException>(() => cache.TryGetItem(null, out cacheItem));
        }
        public void MostRecentlyUsedCacheTryGetItemReturnsFalseIfItemIsInCache()
        {
            var cache     = new MostRecentlyUsedCache <int, TestCacheStub>(5);
            var cacheItem = new TestCacheStub {
                Id = 1, Value = 1.1
            };

            cache.Insert(cacheItem.Id, cacheItem);

            TestCacheStub value;
            bool          result = cache.TryGetItem(2, out value);

            Assert.IsFalse(result);
        }