public void TimedLRUCache_Basic() { TimedLRUCache <string, string> cache; string value; cache = new TimedLRUCache <string, string>(StringComparer.OrdinalIgnoreCase); Assert.AreEqual(0, cache.Count); cache.Add("foo", "bar"); Assert.AreEqual(1, cache.Count); Assert.AreEqual("bar", cache["foo"]); try { value = cache["xxx"]; Assert.Fail("Expected a KeyNotFoundException"); } catch (Exception e) { Assert.AreEqual(typeof(KeyNotFoundException).Name, e.GetType().Name); } cache["foo"] = "foobar"; Assert.AreEqual("foobar", cache["foo"]); cache["bar"] = "boobar"; Assert.AreEqual("boobar", cache["bar"]); Assert.AreEqual("foobar", cache["foo"]); Assert.IsTrue(cache.TryGetValue("foo", out value)); Assert.AreEqual("foobar", value); Assert.IsTrue(cache.TryGetValue("bar", out value)); Assert.AreEqual("boobar", value); Assert.IsFalse(cache.TryGetValue("xxx", out value)); Assert.IsTrue(cache.ContainsKey("foo")); Assert.IsTrue(cache.ContainsKey("bar")); Assert.IsFalse(cache.ContainsKey("xxx")); cache.Remove("foo"); Assert.IsFalse(cache.ContainsKey("foo")); cache.Remove("bar"); Assert.IsFalse(cache.ContainsKey("bar")); cache.Remove("xxx"); Assert.IsFalse(cache.ContainsKey("xxx")); cache["foo"] = "foobar"; cache["bar"] = "boobar"; Assert.AreEqual(2, cache.Count); Assert.IsTrue(cache.ContainsKey("foo")); Assert.IsTrue(cache.ContainsKey("bar")); cache.Clear(); Assert.AreEqual(0, cache.Count); Assert.IsFalse(cache.ContainsKey("foo")); Assert.IsFalse(cache.ContainsKey("bar")); }
/// <summary> /// Returns the cached <see cref="AuthenticationResult" /> for a set of credentials. /// </summary> /// <param name="realm">The authentication realm.</param> /// <param name="account">The account.</param> /// <param name="password">The password.</param> /// <returns>The cached authentication result or <c>null</c>.</returns> public AuthenticationResult GetCachedResult(string realm, string account, string password) { using (TimedLock.Lock(this)) { AuthenticationResult result; if (cache != null && cache.TryGetValue(GetCacheKey(realm, account, password), out result)) { return(result); } else { return(null); } } }
public void TimedLRUCache_GetHitStats() { TimedLRUCache <string, string> cache = new TimedLRUCache <string, string>(); int cHits, cMisses; string found; cache.Add("a", "a"); cache.Add("b", "b"); cache.Add("c", "c"); cache.GetHitStats(out cHits, out cMisses); Assert.AreEqual(0, cHits); Assert.AreEqual(0, cMisses); cache.TryGetValue("a", out found); cache.TryGetValue("b", out found); cache.TryGetValue("c", out found); cache.TryGetValue("d", out found); cache.GetHitStats(out cHits, out cMisses); Assert.AreEqual(3, cHits); Assert.AreEqual(1, cMisses); cache.GetHitStats(out cHits, out cMisses); Assert.AreEqual(0, cHits); Assert.AreEqual(0, cMisses); found = cache["a"]; found = cache["b"]; try { found = cache["d"]; } catch { // Ignore } cache.GetHitStats(out cHits, out cMisses); Assert.AreEqual(2, cHits); Assert.AreEqual(1, cMisses); }
public void TimedLRUCache_MaxItems() { TimedLRUCache <int, int> cache; int value; cache = new TimedLRUCache <int, int>(); Assert.AreEqual(0, cache.Count); Assert.AreEqual(int.MaxValue, cache.MaxItems); cache.MaxItems = 3; //--------------------------------------------- cache.Clear(); for (int i = 0; i < 3; i++) { cache.Add(i, i); } Assert.AreEqual(3, cache.Count); cache.Add(3, 3); Assert.AreEqual(3, cache.Count); Assert.IsFalse(cache.ContainsKey(0)); Assert.IsTrue(cache.ContainsKey(1)); Assert.IsTrue(cache.ContainsKey(2)); Assert.IsTrue(cache.ContainsKey(3)); //--------------------------------------------- cache.Clear(); for (int i = 0; i < 3; i++) { cache[i] = i; } Assert.AreEqual(3, cache.Count); cache[3] = 3; Assert.AreEqual(3, cache.Count); Assert.IsFalse(cache.ContainsKey(0)); Assert.IsTrue(cache.ContainsKey(1)); Assert.IsTrue(cache.ContainsKey(2)); Assert.IsTrue(cache.ContainsKey(3)); //--------------------------------------------- cache.Clear(); for (int i = 0; i < 3; i++) { cache[i] = i; } Assert.AreEqual(3, cache.Count); cache.MaxItems = 2; Assert.AreEqual(2, cache.Count); Assert.IsFalse(cache.ContainsKey(0)); Assert.IsTrue(cache.ContainsKey(1)); Assert.IsTrue(cache.ContainsKey(2)); cache.MaxItems = 3; //--------------------------------------------- cache.Clear(); for (int i = 0; i < 3; i++) { cache[i] = i; } Assert.IsTrue(cache.ContainsKey(0)); Assert.AreEqual(3, cache.Count); cache[3] = 3; Assert.AreEqual(3, cache.Count); Assert.IsTrue(cache.ContainsKey(0)); Assert.IsFalse(cache.ContainsKey(1)); Assert.IsTrue(cache.ContainsKey(2)); Assert.IsTrue(cache.ContainsKey(3)); //--------------------------------------------- cache.Clear(); for (int i = 0; i < 3; i++) { cache[i] = i; } cache.Touch(0); Assert.AreEqual(3, cache.Count); cache[3] = 3; Assert.AreEqual(3, cache.Count); Assert.IsTrue(cache.ContainsKey(0)); Assert.IsFalse(cache.ContainsKey(1)); Assert.IsTrue(cache.ContainsKey(2)); Assert.IsTrue(cache.ContainsKey(3)); //--------------------------------------------- cache.Clear(); for (int i = 0; i < 3; i++) { cache[i] = i; } cache.TryGetValue(0, out value); Assert.AreEqual(3, cache.Count); cache[3] = 3; Assert.AreEqual(3, cache.Count); Assert.IsTrue(cache.ContainsKey(0)); Assert.IsFalse(cache.ContainsKey(1)); Assert.IsTrue(cache.ContainsKey(2)); Assert.IsTrue(cache.ContainsKey(3)); //--------------------------------------------- cache.Clear(); for (int i = 0; i < 6; i++) { cache[i] = i; } cache.TryGetValue(0, out value); Assert.AreEqual(3, cache.Count); cache[3] = 3; Assert.AreEqual(3, cache.Count); Assert.IsFalse(cache.ContainsKey(0)); Assert.IsFalse(cache.ContainsKey(1)); Assert.IsFalse(cache.ContainsKey(2)); Assert.IsTrue(cache.ContainsKey(3)); Assert.IsTrue(cache.ContainsKey(4)); Assert.IsTrue(cache.ContainsKey(5)); }