public void Test_Remove() { SmartCache <int> cache = new SmartCache <int>(5); int item; Assert.AreEqual(0, cache.ItemCount); Assert.IsFalse(cache.TryGetValue("1", out item)); cache.Add("1", 1); Assert.AreEqual(1, cache.ItemCount); cache.Add("1", 1); cache.Add("2", 2); cache.Add("3", 3); cache.Add("4", 4); cache.Add("5", 5); Assert.AreEqual(5, cache.ItemCount); cache.Remove("3"); Assert.IsTrue(cache.TryGetValue("1", out item)); Assert.AreEqual(1, item); Assert.IsTrue(cache.TryGetValue("2", out item)); Assert.AreEqual(2, item); Assert.IsFalse(cache.TryGetValue("3", out item)); Assert.IsTrue(cache.TryGetValue("4", out item)); Assert.AreEqual(4, item); Assert.IsTrue(cache.TryGetValue("5", out item)); Assert.AreEqual(5, item); Assert.AreEqual(4, cache.ItemCount); cache.Remove("1"); Assert.IsFalse(cache.TryGetValue("1", out item)); Assert.IsTrue(cache.TryGetValue("2", out item)); Assert.AreEqual(2, item); Assert.IsFalse(cache.TryGetValue("3", out item)); Assert.IsTrue(cache.TryGetValue("4", out item)); Assert.AreEqual(4, item); Assert.IsTrue(cache.TryGetValue("5", out item)); Assert.AreEqual(5, item); Assert.AreEqual(3, cache.ItemCount); cache.Add("3", 3); Assert.IsFalse(cache.TryGetValue("1", out item)); Assert.IsTrue(cache.TryGetValue("2", out item)); Assert.IsTrue(cache.TryGetValue("3", out item)); Assert.IsTrue(cache.TryGetValue("4", out item)); Assert.IsTrue(cache.TryGetValue("5", out item)); Assert.AreEqual(4, cache.ItemCount); cache.Remove("6"); Assert.IsFalse(cache.TryGetValue("1", out item)); Assert.IsTrue(cache.TryGetValue("2", out item)); Assert.IsTrue(cache.TryGetValue("3", out item)); Assert.IsTrue(cache.TryGetValue("4", out item)); Assert.IsTrue(cache.TryGetValue("5", out item)); Assert.AreEqual(4, cache.ItemCount); }
private void ThreadCacheRemove(object data) { SmartCache <int> cache = (SmartCache <int>)data; try { Random random = new Random(); for (int i = 0; i < 10000; i++) { int x; if (!cache.TryGetValue(i.ToString(), out x)) { if (random.Next() % 4 != 0) { cache.Remove(i.ToString()); } else { cache.Add(i.ToString(), i); } } else { if (random.Next() % 3 == 0) { cache.Remove(i.ToString()); } } } } catch { lock (_exceptionCountLock) _exceptionCount++; throw; } }
public void RemoveCache(string key) { _cache.Remove(key); }
public void Test_Remove() { SmartCache<int> cache = new SmartCache<int>(5); int item; Assert.AreEqual(0, cache.ItemCount); Assert.IsFalse(cache.TryGetValue("1", out item)); cache.Add("1", 1); Assert.AreEqual(1, cache.ItemCount); cache.Add("1", 1); cache.Add("2", 2); cache.Add("3", 3); cache.Add("4", 4); cache.Add("5", 5); Assert.AreEqual(5, cache.ItemCount); cache.Remove("3"); Assert.IsTrue(cache.TryGetValue("1", out item)); Assert.AreEqual(1, item); Assert.IsTrue(cache.TryGetValue("2", out item)); Assert.AreEqual(2, item); Assert.IsFalse(cache.TryGetValue("3", out item)); Assert.IsTrue(cache.TryGetValue("4", out item)); Assert.AreEqual(4, item); Assert.IsTrue(cache.TryGetValue("5", out item)); Assert.AreEqual(5, item); Assert.AreEqual(4, cache.ItemCount); cache.Remove("1"); Assert.IsFalse(cache.TryGetValue("1", out item)); Assert.IsTrue(cache.TryGetValue("2", out item)); Assert.AreEqual(2, item); Assert.IsFalse(cache.TryGetValue("3", out item)); Assert.IsTrue(cache.TryGetValue("4", out item)); Assert.AreEqual(4, item); Assert.IsTrue(cache.TryGetValue("5", out item)); Assert.AreEqual(5, item); Assert.AreEqual(3, cache.ItemCount); cache.Add("3", 3); Assert.IsFalse(cache.TryGetValue("1", out item)); Assert.IsTrue(cache.TryGetValue("2", out item)); Assert.IsTrue(cache.TryGetValue("3", out item)); Assert.IsTrue(cache.TryGetValue("4", out item)); Assert.IsTrue(cache.TryGetValue("5", out item)); Assert.AreEqual(4, cache.ItemCount); cache.Remove("6"); Assert.IsFalse(cache.TryGetValue("1", out item)); Assert.IsTrue(cache.TryGetValue("2", out item)); Assert.IsTrue(cache.TryGetValue("3", out item)); Assert.IsTrue(cache.TryGetValue("4", out item)); Assert.IsTrue(cache.TryGetValue("5", out item)); Assert.AreEqual(4, cache.ItemCount); }
public void ThreadedRemoveTest() { SmartCache <int> cache = new SmartCache <int>(50); Thread[] threads = new Thread[50]; int exceptionCount = 0; object exceptionCountLock = new object(); ParameterizedThreadStart t = o => { try { Random random = new Random(); for (int i1 = 0; i1 < 10000; i1++) { int x; if (!cache.TryGetValue(i1.ToString(), out x)) { if (random.Next() % 4 != 0) { cache.Remove(i1.ToString()); } else { cache.Add(i1.ToString(), i1); } } else { if (random.Next() % 3 == 0) { cache.Remove(i1.ToString()); } } } } catch { lock (exceptionCountLock) exceptionCount++; throw; } }; for (int i = 0; i < 50; i++) { threads[i] = new Thread(t); threads[i].Start(); } for (int i = 0; i < 50; i++) { threads[i].Join(); } Assert.AreEqual(50, cache.ItemCount); Assert.AreEqual(0, exceptionCount); }